mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-17 11:18:01 +00:00
- Fix cleanup crash with planeswalkers in play
This commit is contained in:
@@ -58,7 +58,7 @@ public class Combat {
|
|||||||
|
|
||||||
// Defenders are the Defending Player + Each controlled Planeswalker
|
// Defenders are the Defending Player + Each controlled Planeswalker
|
||||||
private List<GameEntity> defenders = new ArrayList<GameEntity>();
|
private List<GameEntity> defenders = new ArrayList<GameEntity>();
|
||||||
private Map<GameEntity, CardList> defenderMap = new TreeMap<GameEntity, CardList>();
|
private Map<GameEntity, CardList> defenderMap = new HashMap<GameEntity, CardList>();
|
||||||
private int currentDefender = 0;
|
private int currentDefender = 0;
|
||||||
private int nextDefender = 0;
|
private int nextDefender = 0;
|
||||||
|
|
||||||
@@ -108,13 +108,13 @@ public class Combat {
|
|||||||
public final void initiatePossibleDefenders(final Player defender) {
|
public final void initiatePossibleDefenders(final Player defender) {
|
||||||
this.defenders.clear();
|
this.defenders.clear();
|
||||||
this.defenderMap.clear();
|
this.defenderMap.clear();
|
||||||
this.defenders.add((GameEntity)defender);
|
this.defenders.add((GameEntity) defender);
|
||||||
this.defenderMap.put((GameEntity)defender, new CardList());
|
this.defenderMap.put((GameEntity) defender, new CardList());
|
||||||
CardList planeswalkers = defender.getCardsIn(ZoneType.Battlefield);
|
CardList planeswalkers = defender.getCardsIn(ZoneType.Battlefield);
|
||||||
planeswalkers = planeswalkers.getType("Planeswalker");
|
planeswalkers = planeswalkers.getType("Planeswalker");
|
||||||
for (final Card pw : planeswalkers) {
|
for (final Card pw : planeswalkers) {
|
||||||
this.defenders.add((GameEntity)pw);
|
this.defenders.add((GameEntity) pw);
|
||||||
this.defenderMap.put((GameEntity)pw, new CardList());
|
this.defenderMap.put((GameEntity) pw, new CardList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -202,7 +202,7 @@ public class Combat {
|
|||||||
*/
|
*/
|
||||||
public final void setDefenders(final List<GameEntity> newDef) {
|
public final void setDefenders(final List<GameEntity> newDef) {
|
||||||
this.defenders = newDef;
|
this.defenders = newDef;
|
||||||
for(GameEntity entity : this.defenders) {
|
for (GameEntity entity : this.defenders) {
|
||||||
this.defenderMap.put(entity, new CardList());
|
this.defenderMap.put(entity, new CardList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -406,7 +406,7 @@ public class Combat {
|
|||||||
return defender;
|
return defender;
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println("Attacker " + c + " missing defender " + defender);
|
System.out.println("Attacker " + c + " missing defender " + defender);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -545,7 +545,8 @@ public class Combat {
|
|||||||
*
|
*
|
||||||
* @param attacker
|
* @param attacker
|
||||||
* a {@link forge.Card} object.
|
* a {@link forge.Card} object.
|
||||||
* @return a {@link forge.CardList} object.
|
* @param blockers
|
||||||
|
* a {@link forge.CardList} object.
|
||||||
*/
|
*/
|
||||||
public void setBlockerList(final Card attacker, final CardList blockers) {
|
public void setBlockerList(final Card attacker, final CardList blockers) {
|
||||||
this.attackerMap.put(attacker, blockers);
|
this.attackerMap.put(attacker, blockers);
|
||||||
@@ -570,7 +571,7 @@ public class Combat {
|
|||||||
// Keep track of all of the different maps
|
// Keep track of all of the different maps
|
||||||
CardList blockers = this.attackerMap.get(c);
|
CardList blockers = this.attackerMap.get(c);
|
||||||
this.attackerMap.remove(c);
|
this.attackerMap.remove(c);
|
||||||
for(Card b : blockers) {
|
for (Card b : blockers) {
|
||||||
this.blockerMap.get(b).remove(c);
|
this.blockerMap.get(b).remove(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -578,12 +579,12 @@ public class Combat {
|
|||||||
GameEntity entity = this.attackerToDefender.get(c);
|
GameEntity entity = this.attackerToDefender.get(c);
|
||||||
this.attackerToDefender.remove(c);
|
this.attackerToDefender.remove(c);
|
||||||
this.defenderMap.get(entity).remove(c);
|
this.defenderMap.get(entity).remove(c);
|
||||||
} else if (this.blockerMap.containsKey(c)){ // card is a blocker
|
} else if (this.blockerMap.containsKey(c)) { // card is a blocker
|
||||||
CardList attackers = this.blockerMap.get(c);
|
CardList attackers = this.blockerMap.get(c);
|
||||||
|
|
||||||
boolean stillDeclaring = Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS);
|
boolean stillDeclaring = Singletons.getModel().getGameState().getPhaseHandler().is(PhaseType.COMBAT_DECLARE_BLOCKERS);
|
||||||
this.blockerMap.remove(c);
|
this.blockerMap.remove(c);
|
||||||
for(Card a : attackers) {
|
for (Card a : attackers) {
|
||||||
this.attackerMap.get(a).remove(c);
|
this.attackerMap.get(a).remove(c);
|
||||||
if (stillDeclaring && this.attackerMap.get(a).size() == 0) {
|
if (stillDeclaring && this.attackerMap.get(a).size() == 0) {
|
||||||
this.blocked.remove(a);
|
this.blocked.remove(a);
|
||||||
@@ -684,8 +685,8 @@ public class Combat {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private final boolean assignDamageAsIfNotBlocked(Card attacker) {
|
private final boolean assignDamageAsIfNotBlocked(Card attacker) {
|
||||||
return attacker.hasKeyword("CARDNAME assigns its combat damage as though it weren't blocked.") ||
|
return attacker.hasKeyword("CARDNAME assigns its combat damage as though it weren't blocked.")
|
||||||
(attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|
|| (attacker.hasKeyword("You may have CARDNAME assign its combat damage as though it weren't blocked.")
|
||||||
&& GameActionUtil.showYesNoDialog(attacker, "Do you want to assign its combat damage as though it weren't blocked?"));
|
&& GameActionUtil.showYesNoDialog(attacker, "Do you want to assign its combat damage as though it weren't blocked?"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -694,7 +695,7 @@ public class Combat {
|
|||||||
CardList blockers = null;
|
CardList blockers = null;
|
||||||
final CardList attackers = this.getAttackerList();
|
final CardList attackers = this.getAttackerList();
|
||||||
boolean assignedDamage = false;
|
boolean assignedDamage = false;
|
||||||
for(final Card attacker : attackers) {
|
for (final Card attacker : attackers) {
|
||||||
// If attacker isn't in the right first/regular strike section, continue along
|
// If attacker isn't in the right first/regular strike section, continue along
|
||||||
if (!(attacker.hasDoubleStrike() || attacker.hasFirstStrike() == firstStrikeDamage)) {
|
if (!(attacker.hasDoubleStrike() || attacker.hasFirstStrike() == firstStrikeDamage)) {
|
||||||
continue;
|
continue;
|
||||||
@@ -740,7 +741,6 @@ public class Combat {
|
|||||||
return assignedDamage;
|
return assignedDamage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>
|
* <p>
|
||||||
* distributeAIDamage.
|
* distributeAIDamage.
|
||||||
|
|||||||
Reference in New Issue
Block a user