GameCopier: Handle copying of more game and player properties.

This commit is contained in:
asvitkine
2022-12-09 23:27:49 -05:00
parent c6ec2c80d3
commit 8bd9759494
2 changed files with 39 additions and 2 deletions

View File

@@ -91,6 +91,15 @@ public class GameCopier {
newPlayer.setLifeLostLastTurn(origPlayer.getLifeLostLastTurn());
newPlayer.setLifeLostThisTurn(origPlayer.getLifeLostThisTurn());
newPlayer.setLifeGainedThisTurn(origPlayer.getLifeGainedThisTurn());
newPlayer.setBlessing(origPlayer.hasBlessing());
newPlayer.setRevolt(origPlayer.hasRevolt());
newPlayer.setLibrarySearched(origPlayer.getLibrarySearched());
newPlayer.setSpellsCastLastTurn(origPlayer.getSpellsCastLastTurn());
for (int j = 0; j < origPlayer.getSpellsCastThisTurn(); j++) {
newPlayer.addSpellCastThisTurn();
}
newPlayer.setMaxHandSize(origPlayer.getMaxHandSize());
newPlayer.setUnlimitedHandSize(origPlayer.isUnlimitedHandSize());
// TODO creatureAttackedThisTurn
for (Mana m : origPlayer.getManaPool()) {
newPlayer.getManaPool().addMana(m, false);
@@ -117,6 +126,20 @@ public class GameCopier {
p.setCommanders(commanders);
((PlayerZoneBattlefield) p.getZone(ZoneType.Battlefield)).setTriggers(true);
}
for (Player origPlayer : playerMap.keySet()) {
Player newPlayer = playerMap.get(origPlayer);
for (final Card c : origPlayer.getCommanders()) {
Card newCommander = gameObjectMap.map(c);
int castTimes = origPlayer.getCommanderCast(c);
for (int i = 0; i < castTimes; i++) {
newPlayer.incCommanderCast(newCommander);
}
}
for (Map.Entry<Card, Integer> entry : origPlayer.getCommanderDamage()) {
Card newCommander = gameObjectMap.map(entry.getKey());
newPlayer.addCommanderDamage(newCommander, entry.getValue());
}
}
newGame.getTriggerHandler().clearSuppression(TriggerType.ChangesZone);
for (Card c : newGame.getCardsInGame()) {
@@ -211,9 +234,21 @@ public class GameCopier {
// TODO countersAddedThisTurn
if (origGame.getStartingPlayer() != null) {
newGame.setStartingPlayer(origGame.getStartingPlayer());
}
if (origGame.getMonarch() != null) {
newGame.setMonarch(playerMap.get(origGame.getMonarch()));
}
if (origGame.getMonarchBeginTurn() != null) {
newGame.setMonarchBeginTurn(playerMap.get(origGame.getMonarchBeginTurn()));
}
if (origGame.getHasInitiative() != null) {
newGame.setHasInitiative(playerMap.get(origGame.getHasInitiative()));
}
if (origGame.getDayTime() != null) {
newGame.setDayTime(origGame.getDayTime());
}
for (ZoneType zone : ZONES) {
for (Card card : origGame.getCardsIn(zone)) {

View File

@@ -691,8 +691,7 @@ public class Player extends GameEntity implements Comparable<Player> {
&& !this.getGame().getRules().hasAppliedVariant(GameType.Brawl)) {
// In case that commander is merged permanent, get the real commander card
final Card realCommander = source.getRealCommander();
int damage = getCommanderDamage(realCommander) + amount;
commanderDamage.put(realCommander, damage);
addCommanderDamage(realCommander, amount);
view.updateCommanderDamage(this);
if (realCommander != source) {
view.updateMergedCommanderDamage(source, realCommander);
@@ -2675,6 +2674,9 @@ public class Player extends GameEntity implements Comparable<Player> {
Integer damage = commanderDamage.get(commander);
return damage == null ? 0 : damage.intValue();
}
public void addCommanderDamage(Card commander, int damage) {
commanderDamage.merge(commander, damage, Integer::sum);
}
public ColorSet getCommanderColorID() {
if (commanders.isEmpty()) {