From 8bd975949441e97e7d6e96b4ea599d7108c0d70d Mon Sep 17 00:00:00 2001 From: asvitkine Date: Fri, 9 Dec 2022 23:27:49 -0500 Subject: [PATCH] GameCopier: Handle copying of more game and player properties. --- .../java/forge/ai/simulation/GameCopier.java | 35 +++++++++++++++++++ .../main/java/forge/game/player/Player.java | 6 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java index 0ab07f2b306..871fc691419 100644 --- a/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java +++ b/forge-ai/src/main/java/forge/ai/simulation/GameCopier.java @@ -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 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)) { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 922af3691e2..6525bbf7f30 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -691,8 +691,7 @@ public class Player extends GameEntity implements Comparable { && !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 { 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()) {