1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.sf.magicproject.test;
22
23 import java.io.IOException;
24 import java.io.InputStream;
25
26 import net.sf.magicproject.clickable.ability.Ability;
27 import net.sf.magicproject.clickable.targetable.Targetable;
28 import net.sf.magicproject.clickable.targetable.card.AbstractCard;
29 import net.sf.magicproject.clickable.targetable.card.MCard;
30 import net.sf.magicproject.clickable.targetable.card.TriggeredCard;
31 import net.sf.magicproject.stack.StackContext;
32 import net.sf.magicproject.stack.StackManager;
33
34 /***
35 * @author <a href="mailto:fabdouglas@users.sourceforge.net">Fabrice Daugan </a>
36 * @since 0.83
37 */
38 public class IsAborting extends TestCard {
39
40 /***
41 * The source of abortion
42 */
43 private final TestOn by;
44
45 /***
46 * Create an instance of IsAborting by reading a file. Offset's file must
47 * pointing on the first byte of this test <br>
48 * <ul>
49 * Structure of InputStream : Data[size]
50 * <li>card TestOn [1]</li>
51 * <li>by TestOn [1]</li>
52 * </ul>
53 *
54 * @param inputFile
55 * is the file containing this test
56 * @throws IOException
57 * if error occurred during the reading process from the specified
58 * input stream
59 */
60 IsAborting(InputStream inputFile) throws IOException {
61 super(inputFile);
62 by = TestOn.deserialize(inputFile);
63 }
64
65 @Override
66 public boolean testCard(Ability ability, MCard tested) {
67 Targetable targetable = on.getTargetable(ability, tested);
68 if (targetable.isCard()) {
69 AbstractCard card = (AbstractCard) targetable;
70 StackContext context = StackManager.getContextOf(card);
71 return (on == TestOn.TESTED || (targetable instanceof TriggeredCard && card
72 .isACopy()))
73 && context.getAbortingAbility() != null
74 && context.getAbortingAbility().getCard() == by.getTargetable(
75 ability, tested);
76 }
77 return false;
78 }
79
80 }