mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-16 10:48:00 +00:00
prune hidden information
This commit is contained in:
@@ -14,6 +14,8 @@ import com.google.common.collect.Table;
|
||||
import forge.LobbyPlayer;
|
||||
import forge.ai.AIOption;
|
||||
import forge.ai.LobbyPlayerAi;
|
||||
import forge.card.CardRarity;
|
||||
import forge.card.CardRules;
|
||||
import forge.game.Game;
|
||||
import forge.game.GameEntity;
|
||||
import forge.game.GameObject;
|
||||
@@ -38,6 +40,7 @@ import forge.game.staticability.StaticAbility;
|
||||
import forge.game.trigger.TriggerType;
|
||||
import forge.game.zone.PlayerZoneBattlefield;
|
||||
import forge.game.zone.ZoneType;
|
||||
import forge.item.PaperCard;
|
||||
|
||||
public class GameCopier {
|
||||
private static final ZoneType[] ZONES = new ZoneType[] {
|
||||
@@ -118,7 +121,7 @@ public class GameCopier {
|
||||
((PlayerZoneBattlefield) p.getZone(ZoneType.Battlefield)).setTriggers(false);
|
||||
}
|
||||
|
||||
copyGameState(newGame);
|
||||
copyGameState(newGame, aiPlayer);
|
||||
|
||||
for (Player p : newGame.getPlayers()) {
|
||||
List<Card> commanders = Lists.newArrayList();
|
||||
@@ -231,7 +234,7 @@ public class GameCopier {
|
||||
return clone;
|
||||
}
|
||||
|
||||
private void copyGameState(Game newGame) {
|
||||
private void copyGameState(Game newGame, Player aiPlayer) {
|
||||
newGame.setAge(origGame.getAge());
|
||||
|
||||
// TODO countersAddedThisTurn
|
||||
@@ -254,7 +257,7 @@ public class GameCopier {
|
||||
|
||||
for (ZoneType zone : ZONES) {
|
||||
for (Card card : origGame.getCardsIn(zone)) {
|
||||
addCard(newGame, zone, card);
|
||||
addCard(newGame, zone, card, aiPlayer);
|
||||
}
|
||||
// TODO CardsAddedThisTurn is now messed up
|
||||
}
|
||||
@@ -290,15 +293,24 @@ public class GameCopier {
|
||||
}
|
||||
}
|
||||
|
||||
private static PaperCard hidden_info_card = new PaperCard(CardRules.fromScript(Lists.newArrayList("Name:hidden", "Types:Artifact", "Oracle:")), "", CardRarity.Common);
|
||||
private static final boolean PRUNE_HIDDEN_INFO = false;
|
||||
private static final boolean USE_FROM_PAPER_CARD = true;
|
||||
private Card createCardCopy(Game newGame, Player newOwner, Card c) {
|
||||
private Card createCardCopy(Game newGame, Player newOwner, Card c, Player aiPlayer) {
|
||||
if (c.isToken() && !c.isImmutable()) {
|
||||
Card result = new TokenInfo(c).makeOneToken(newOwner);
|
||||
CardFactory.copyCopiableCharacteristics(c, result, null, null);
|
||||
return result;
|
||||
}
|
||||
if (USE_FROM_PAPER_CARD && !c.isImmutable() && c.getPaperCard() != null) {
|
||||
Card newCard = Card.fromPaperCard(c.getPaperCard(), newOwner);
|
||||
Card newCard;
|
||||
if (PRUNE_HIDDEN_INFO && !c.getView().canBeShownTo(aiPlayer.getView())) {
|
||||
// TODO also check REVEALED_CARDS memory
|
||||
newCard = new Card(newGame.nextCardId(), hidden_info_card, newGame);
|
||||
newCard.setOwner(newOwner);
|
||||
} else {
|
||||
newCard = Card.fromPaperCard(c.getPaperCard(), newOwner);
|
||||
}
|
||||
newCard.setCommander(c.isCommander());
|
||||
return newCard;
|
||||
}
|
||||
@@ -327,9 +339,9 @@ public class GameCopier {
|
||||
return newCard;
|
||||
}
|
||||
|
||||
private void addCard(Game newGame, ZoneType zone, Card c) {
|
||||
private void addCard(Game newGame, ZoneType zone, Card c, Player aiPlayer) {
|
||||
final Player owner = playerMap.get(c.getOwner());
|
||||
final Card newCard = createCardCopy(newGame, owner, c);
|
||||
final Card newCard = createCardCopy(newGame, owner, c, aiPlayer);
|
||||
cardMap.put(c, newCard);
|
||||
|
||||
// TODO ExiledWith
|
||||
|
||||
@@ -50,7 +50,7 @@ public class GameStateEvaluator {
|
||||
return null;
|
||||
}
|
||||
GameCopier copier = new GameCopier(evalGame);
|
||||
Game gameCopy = copier.makeCopy();
|
||||
Game gameCopy = copier.makeCopy(null, aiPlayer);
|
||||
gameCopy.getPhaseHandler().devAdvanceToPhase(PhaseType.COMBAT_DAMAGE, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -21,6 +21,7 @@ import forge.game.GameType;
|
||||
import forge.game.Match;
|
||||
import forge.game.card.Card;
|
||||
import forge.game.card.CardCollectionView;
|
||||
import forge.game.card.CardFactory;
|
||||
import forge.game.player.Player;
|
||||
import forge.game.player.RegisteredPlayer;
|
||||
import forge.game.spellability.SpellAbility;
|
||||
@@ -158,7 +159,7 @@ public class SimulationTest {
|
||||
System.out.println("Failed to find token name " + name);
|
||||
return null;
|
||||
}
|
||||
return Card.fromPaperCard(token, p, p.getGame());
|
||||
return CardFactory.getCard(token, p, p.getGame());
|
||||
}
|
||||
|
||||
protected List<Card> addTokens(String name, int amount, Player p) {
|
||||
|
||||
Reference in New Issue
Block a user