Fix so Enters the Battlefield triggers work

This commit is contained in:
drdev
2014-10-12 15:43:31 +00:00
parent f172e72604
commit c7b8a070f8
5 changed files with 28 additions and 42 deletions

View File

@@ -22,15 +22,13 @@ public abstract class GameObject {
* @return true, if is valid * @return true, if is valid
*/ */
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source) { public boolean isValid(final String[] restrictions, final Player sourceController, final Card source) {
for (final String restriction : restrictions) { for (final String restriction : restrictions) {
if (this.isValid(restriction, sourceController, source)) { if (this.isValid(restriction, sourceController, source)) {
return true; return true;
} }
} }
return false; return false;
}
} // isValid
/** /**
* Checks if is valid. * Checks if is valid.

View File

@@ -3074,18 +3074,6 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
} }
} }
/** {@inheritDoc} */
@Override
public final boolean equals(final Object o) {
if (o instanceof Card) {
final Card c = (Card) o;
final int a = id;
final int b = c.id;
return (a == b);
}
return false;
}
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override
public final int hashCode() { public final int hashCode() {

View File

@@ -34,6 +34,7 @@ public class CardCollection extends FCollection<Card> implements CardCollectionV
} }
else if (newCol == null) { //if multiple views have cards, we need to create a new collection else if (newCol == null) { //if multiple views have cards, we need to create a new collection
newCol = new CardCollection(viewWithCards); newCol = new CardCollection(viewWithCards);
newCol.addAll(v);
viewWithCards = newCol; viewWithCards = newCol;
} }
else { else {

View File

@@ -70,41 +70,41 @@ public class TriggerHandler {
} }
public final boolean hasDelayedTriggers() { public final boolean hasDelayedTriggers() {
return !this.delayedTriggers.isEmpty(); return !delayedTriggers.isEmpty();
} }
public final void registerDelayedTrigger(final Trigger trig) { public final void registerDelayedTrigger(final Trigger trig) {
this.delayedTriggers.add(trig); delayedTriggers.add(trig);
} }
public final void clearDelayedTrigger() { public final void clearDelayedTrigger() {
this.delayedTriggers.clear(); delayedTriggers.clear();
} }
public final void clearDelayedTrigger(Card card) { public final void clearDelayedTrigger(Card card) {
ArrayList<Trigger> deltrigs = new ArrayList<Trigger>(this.delayedTriggers); ArrayList<Trigger> deltrigs = new ArrayList<Trigger>(delayedTriggers);
for (Trigger trigger : deltrigs) { for (Trigger trigger : deltrigs) {
if (trigger.getHostCard().equals(card)) { if (trigger.getHostCard().equals(card)) {
this.delayedTriggers.remove(trigger); delayedTriggers.remove(trigger);
} }
} }
} }
public final void registerPlayerDefinedDelayedTrigger(final Player player, final Trigger trig) { public final void registerPlayerDefinedDelayedTrigger(final Player player, final Trigger trig) {
this.playerDefinedDelayedTriggers.put(player, trig); playerDefinedDelayedTriggers.put(player, trig);
} }
public final void handlePlayerDefinedDelTriggers(final Player player) { public final void handlePlayerDefinedDelTriggers(final Player player) {
this.delayedTriggers.addAll(this.playerDefinedDelayedTriggers.removeAll(player)); delayedTriggers.addAll(playerDefinedDelayedTriggers.removeAll(player));
} }
public final void suppressMode(final TriggerType mode) { public final void suppressMode(final TriggerType mode) {
this.suppressedModes.add(mode); suppressedModes.add(mode);
} }
public final void clearSuppression(final TriggerType mode) { public final void clearSuppression(final TriggerType mode) {
this.suppressedModes.remove(mode); suppressedModes.remove(mode);
} }
public static Trigger parseTrigger(final String trigParse, final Card host, final boolean intrinsic) { public static Trigger parseTrigger(final String trigParse, final Card host, final boolean intrinsic) {
@@ -166,7 +166,7 @@ public class TriggerHandler {
public final void resetActiveTriggers() { public final void resetActiveTriggers() {
activeTriggers.clear(); activeTriggers.clear();
CardCollection allCards = new CardCollection(); CardCollection allCards = new CardCollection();
for(Player p : game.getPlayers()) { for (Player p : game.getPlayers()) {
allCards.addAll(p.getAllCards()); allCards.addAll(p.getAllCards());
} }
@@ -191,13 +191,13 @@ public class TriggerHandler {
} }
} }
for(Trigger removed : toBeRemoved) { for (Trigger removed : toBeRemoved) {
activeTriggers.remove(removed); activeTriggers.remove(removed);
} }
} }
public final void registerActiveTrigger(Card c, boolean onlyExtrinsic) { public final void registerActiveTrigger(Card c, boolean onlyExtrinsic) {
for(final Trigger t: c.getTriggers()) { for (final Trigger t: c.getTriggers()) {
if (!onlyExtrinsic || c.isCloned() || !t.isIntrinsic() || t instanceof TriggerAlways) { if (!onlyExtrinsic || c.isCloned() || !t.isIntrinsic() || t instanceof TriggerAlways) {
if (isTriggerActive(t)) { if (isTriggerActive(t)) {
activeTriggers.add(t); activeTriggers.add(t);
@@ -207,7 +207,7 @@ public class TriggerHandler {
} }
public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) { public final void runTrigger(final TriggerType mode, final Map<String, Object> runParams, boolean holdTrigger) {
if (this.suppressedModes.contains(mode)) { if (suppressedModes.contains(mode)) {
return; return;
} }
@@ -226,9 +226,9 @@ public class TriggerHandler {
boolean checkStatics = false; boolean checkStatics = false;
// only cards in play can run state triggers // only cards in play can run state triggers
for(final Trigger t: this.activeTriggers) { for (final Trigger t: activeTriggers) {
if (canRunTrigger(t, TriggerType.Always, runParams)) { if (canRunTrigger(t, TriggerType.Always, runParams)) {
this.runSingleTrigger(t, runParams); runSingleTrigger(t, runParams);
checkStatics = true; checkStatics = true;
} }
} }
@@ -261,14 +261,14 @@ public class TriggerHandler {
} }
// Copy triggers here, so things can be modified just in case // Copy triggers here, so things can be modified just in case
final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(this.delayedTriggers); final ArrayList<Trigger> delayedTriggersWorkingCopy = new ArrayList<Trigger>(delayedTriggers);
boolean checkStatics = false; boolean checkStatics = false;
// Static triggers // Static triggers
for (final Trigger t : this.activeTriggers) { for (final Trigger t : activeTriggers) {
if (t.isStatic() && canRunTrigger(t, mode, runParams)) { if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
this.runSingleTrigger(t, runParams); runSingleTrigger(t, runParams);
checkStatics = true; checkStatics = true;
} }
} }
@@ -297,7 +297,7 @@ public class TriggerHandler {
boolean checkStatics = false; boolean checkStatics = false;
Card card = null; Card card = null;
for (final Trigger t : this.activeTriggers) { for (final Trigger t : activeTriggers) {
if (!t.isStatic() && t.getHostCard().getController().equals(player) if (!t.isStatic() && t.getHostCard().getController().equals(player)
&& canRunTrigger(t, mode, runParams)) { && canRunTrigger(t, mode, runParams)) {
@@ -311,16 +311,16 @@ public class TriggerHandler {
} }
} }
this.runSingleTrigger(t, runParams); runSingleTrigger(t, runParams);
checkStatics = true; checkStatics = true;
} }
} }
for (Trigger deltrig : delayedTriggersWorkingCopy) { for (Trigger deltrig : delayedTriggersWorkingCopy) {
if (deltrig.getHostCard().getController().equals(player)) { if (deltrig.getHostCard().getController().equals(player)) {
if (this.isTriggerActive(deltrig) && this.canRunTrigger(deltrig, mode, runParams)) { if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
this.runSingleTrigger(deltrig, runParams); runSingleTrigger(deltrig, runParams);
this.delayedTriggers.remove(deltrig); delayedTriggers.remove(deltrig);
} }
} }
} }

View File

@@ -57,7 +57,8 @@ public class PlayerZoneBattlefield extends PlayerZone {
// it enters the battlefield this way, and should not fire // it enters the battlefield this way, and should not fire
// triggers // triggers
c.setTapped(true); c.setTapped(true);
} else { }
else {
// ETBTapped static abilities // ETBTapped static abilities
for (final Card ca : game.getCardsIn(ZoneType.listValueOf("Battlefield,Command"))) { for (final Card ca : game.getCardsIn(ZoneType.listValueOf("Battlefield,Command"))) {
for (final StaticAbility stAb : ca.getStaticAbilities()) { for (final StaticAbility stAb : ca.getStaticAbilities()) {
@@ -74,10 +75,8 @@ public class PlayerZoneBattlefield extends PlayerZone {
if (trigger) { if (trigger) {
c.setSickness(true); // summoning sickness c.setSickness(true); // summoning sickness
c.executeTrigger(ZCTrigger.ENTERFIELD); c.executeTrigger(ZCTrigger.ENTERFIELD);
} }
}
} // end add()
/** {@inheritDoc} */ /** {@inheritDoc} */
@Override @Override