1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package net.sf.magicproject.expression;
21
22 import java.io.IOException;
23 import java.io.InputStream;
24 import java.util.List;
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.MCard;
29 import net.sf.magicproject.event.ArrangedZone;
30 import net.sf.magicproject.event.MEventListener;
31 import net.sf.magicproject.event.context.ContextEventListener;
32 import net.sf.magicproject.test.Test;
33 import net.sf.magicproject.test.TestOn;
34 import net.sf.magicproject.token.IdConst;
35 import net.sf.magicproject.token.IdZones;
36
37 /***
38 * @author <a href="mailto:fabdouglas@users.sourceforge.net">Fabrice Daugan </a>
39 * @since 0.82 restriction zone supported to optimize the target processing.
40 * @since 0.83 count-player option apply test on the players.
41 * @since 0.85 objects may be counted
42 */
43 public class Position extends Expression {
44
45 /***
46 * Creates a new instance of Counter <br>
47 * <ul>
48 * Structure of InputStream : Data[size]
49 * <li>idTestOn [1] card to locate specified)
50 * </ul>
51 *
52 * @param inputFile
53 * file containing this action
54 * @throws IOException
55 * if error occurred during the reading process from the specified
56 * input stream
57 */
58 public Position(InputStream inputFile) throws IOException {
59 super();
60 on = TestOn.deserialize(inputFile);
61 }
62
63 @Override
64 public int getValue(Ability ability, Targetable tested,
65 ContextEventListener context) {
66 return on.getCard(ability, tested).getContainer().getRealIndexOf(
67 on.getCard(ability, tested)).key;
68 }
69
70 @Override
71 public void extractTriggeredEvents(List<MEventListener> res, MCard source,
72 Test globalTest) {
73 res
74 .add(new ArrangedZone(IdZones.PLAY, globalTest, source, IdConst.NO_CARE));
75 }
76
77 /***
78 * Card to locate
79 */
80 private TestOn on;
81
82 }