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
*/
public boolean isValid(final String[] restrictions, final Player sourceController, final Card source) {
for (final String restriction : restrictions) {
if (this.isValid(restriction, sourceController, source)) {
return true;
}
}
return false;
} // isValid
}
/**
* 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} */
@Override
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
newCol = new CardCollection(viewWithCards);
newCol.addAll(v);
viewWithCards = newCol;
}
else {

View File

@@ -70,41 +70,41 @@ public class TriggerHandler {
}
public final boolean hasDelayedTriggers() {
return !this.delayedTriggers.isEmpty();
return !delayedTriggers.isEmpty();
}
public final void registerDelayedTrigger(final Trigger trig) {
this.delayedTriggers.add(trig);
delayedTriggers.add(trig);
}
public final void clearDelayedTrigger() {
this.delayedTriggers.clear();
delayedTriggers.clear();
}
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) {
if (trigger.getHostCard().equals(card)) {
this.delayedTriggers.remove(trigger);
delayedTriggers.remove(trigger);
}
}
}
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) {
this.delayedTriggers.addAll(this.playerDefinedDelayedTriggers.removeAll(player));
delayedTriggers.addAll(playerDefinedDelayedTriggers.removeAll(player));
}
public final void suppressMode(final TriggerType mode) {
this.suppressedModes.add(mode);
suppressedModes.add(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) {
@@ -166,7 +166,7 @@ public class TriggerHandler {
public final void resetActiveTriggers() {
activeTriggers.clear();
CardCollection allCards = new CardCollection();
for(Player p : game.getPlayers()) {
for (Player p : game.getPlayers()) {
allCards.addAll(p.getAllCards());
}
@@ -191,13 +191,13 @@ public class TriggerHandler {
}
}
for(Trigger removed : toBeRemoved) {
for (Trigger removed : toBeRemoved) {
activeTriggers.remove(removed);
}
}
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 (isTriggerActive(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) {
if (this.suppressedModes.contains(mode)) {
if (suppressedModes.contains(mode)) {
return;
}
@@ -226,9 +226,9 @@ public class TriggerHandler {
boolean checkStatics = false;
// 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)) {
this.runSingleTrigger(t, runParams);
runSingleTrigger(t, runParams);
checkStatics = true;
}
}
@@ -261,14 +261,14 @@ public class TriggerHandler {
}
// 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;
// Static triggers
for (final Trigger t : this.activeTriggers) {
for (final Trigger t : activeTriggers) {
if (t.isStatic() && canRunTrigger(t, mode, runParams)) {
this.runSingleTrigger(t, runParams);
runSingleTrigger(t, runParams);
checkStatics = true;
}
}
@@ -297,7 +297,7 @@ public class TriggerHandler {
boolean checkStatics = false;
Card card = null;
for (final Trigger t : this.activeTriggers) {
for (final Trigger t : activeTriggers) {
if (!t.isStatic() && t.getHostCard().getController().equals(player)
&& canRunTrigger(t, mode, runParams)) {
@@ -311,16 +311,16 @@ public class TriggerHandler {
}
}
this.runSingleTrigger(t, runParams);
runSingleTrigger(t, runParams);
checkStatics = true;
}
}
for (Trigger deltrig : delayedTriggersWorkingCopy) {
if (deltrig.getHostCard().getController().equals(player)) {
if (this.isTriggerActive(deltrig) && this.canRunTrigger(deltrig, mode, runParams)) {
this.runSingleTrigger(deltrig, runParams);
this.delayedTriggers.remove(deltrig);
if (isTriggerActive(deltrig) && canRunTrigger(deltrig, mode, runParams)) {
runSingleTrigger(deltrig, runParams);
delayedTriggers.remove(deltrig);
}
}
}

View File

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