Fix bug that prevented dying triggers from firing

This commit is contained in:
drdev
2014-10-14 01:54:43 +00:00
parent 3741588939
commit f7f99366fc
5 changed files with 35 additions and 57 deletions

View File

@@ -218,6 +218,17 @@ public abstract class GameEntity extends GameObject implements IIdentifiable {
return false;
}
@Override
public final boolean equals(Object o) {
if (o == null) { return false; }
return o.hashCode() == id && o.getClass().equals(getClass());
}
@Override
public final int hashCode() {
return id;
}
@Override
public String toString() {
return name;

View File

@@ -3078,11 +3078,6 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
/** {@inheritDoc} */
@Override
public final int compareTo(final Card that) {
/*
* Return a negative integer of this < that, a positive integer if this
* > that, and zero otherwise.
*/
if (that == null) {
/*
* "Here we can arbitrarily decide that all non-null Cards are
@@ -3090,20 +3085,9 @@ public class Card extends GameEntity implements Comparable<Card>, IIdentifiable
* return in this case, as long as it is consistent. I rather think
* of null as being lowly." --Braids
*/
return +1;
} else if (id > that.id) {
return +1;
} else if (id < that.id) {
return -1;
} else {
return 0;
return 1;
}
}
/** {@inheritDoc} */
@Override
public final int hashCode() {
return id;
return Integer.compare(id, that.id);
}
/** {@inheritDoc} */

View File

@@ -2005,34 +2005,12 @@ public class Player extends GameEntity implements Comparable<Player> {
mustAttackEntity = o;
}
/** {@inheritDoc} */
@Override
public final boolean equals(final Object o) {
if (o instanceof Player) {
final Player p1 = (Player) o;
return p1.getName().equals(getName());
} else {
return false;
}
}
@Override
public int compareTo(Player o) {
if (o == null) {
return +1;
return 1;
}
int subtractedHash = o.hashCode() - hashCode();
if (subtractedHash == 0) {
return 0;
}
return Math.abs(subtractedHash) / subtractedHash;
}
/** {@inheritDoc} */
@Override
public int hashCode() {
return (41 * (41 + getName().hashCode()));
return getName().compareTo(o.getName());
}
public static class Predicates {

View File

@@ -285,23 +285,21 @@ public class TriggerHandler {
// NAPs
for (Player nap : game.getPlayers()) {
if (!nap.equals(playerAP))
if (!nap.equals(playerAP)) {
checkStatics |= runNonStaticTriggersForPlayer(nap, mode, runParams, delayedTriggersWorkingCopy);
}
}
return checkStatics;
}
private boolean runNonStaticTriggersForPlayer(final Player player, final TriggerType mode,
final Map<String, Object> runParams, final ArrayList<Trigger> delayedTriggersWorkingCopy ) {
boolean checkStatics = false;
Card card = null;
for (final Trigger t : activeTriggers) {
if (!t.isStatic() && t.getHostCard().getController().equals(player)
&& canRunTrigger(t, mode, runParams)) {
boolean checkStatics = false;
for (final Trigger t : activeTriggers) {
if (!t.isStatic() && t.getHostCard().getController().equals(player) && canRunTrigger(t, mode, runParams)) {
if (runParams.containsKey("Card")) {
card = (Card) runParams.get("Card");
if (runParams.containsKey("Destination") && !ZoneType.Battlefield.name().equals(runParams.get("Destination"))) {
@@ -352,11 +350,9 @@ public class TriggerHandler {
if (!regtrig.requirementsCheck(game)) {
return false; // Conditions aren't right.
}
return true;
}
private boolean canRunTrigger(final Trigger regtrig, final TriggerType mode, final Map<String, Object> runParams) {
if (regtrig.getMode() != mode) {
return false; // Not the right mode.
@@ -395,8 +391,7 @@ public class TriggerHandler {
} // Torpor Orb check
return true;
}
// Checks if the conditions are right for a single trigger to go off, and
// runs it if so.
// Return true if the trigger went off, false otherwise.
@@ -419,7 +414,8 @@ public class TriggerHandler {
if (trigCard != null && (host.getId() == trigCard.getId())) {
host = trigCard;
} else {
}
else {
host = game.getCardState(regtrig.getHostCard());
}
@@ -431,7 +427,8 @@ public class TriggerHandler {
public void resolve() {
}
};
} else {
}
else {
sa = AbilityFactory.getAbility(host.getSVar(triggerParams.get("Execute")), host);
}
}
@@ -494,7 +491,8 @@ public class TriggerHandler {
if (regtrig.isStatic()) {
wrapperAbility.getActivatingPlayer().getController().playTrigger(host, wrapperAbility, isMandatory);
} else {
}
else {
game.getStack().addSimultaneousStackEntry(wrapperAbility);
}
regtrig.setTriggeredSA(wrapperAbility);
@@ -503,7 +501,8 @@ public class TriggerHandler {
if (regtrig.getHostCard().isImmutable()) {
Player p = regtrig.getHostCard().getController();
p.getZone(ZoneType.Command).remove(regtrig.getHostCard());
} else {
}
else {
regtrig.getHostCard().removeTrigger(regtrig);
}
}

View File

@@ -53,6 +53,12 @@ public abstract class TrackableObject implements IIdentifiable {
return id;
}
@Override
public final boolean equals(Object o) {
if (o == null) { return false; }
return o.hashCode() == id && o.getClass().equals(getClass());
}
@SuppressWarnings("unchecked")
protected <T> T get(TrackableProperty key) {
T value = (T)props.get(key);