package games.strategy.triplea.ai.proAI; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import games.strategy.engine.data.GameData; import games.strategy.engine.data.PlayerID; import games.strategy.engine.data.Territory; import games.strategy.engine.data.Unit; import games.strategy.engine.data.UnitType; import games.strategy.triplea.Properties; import games.strategy.triplea.ai.proAI.data.ProPurchaseOption; import games.strategy.triplea.ai.proAI.data.ProPurchaseOptionMap; import games.strategy.triplea.ai.proAI.util.ProUtils; import games.strategy.triplea.attachments.TerritoryAttachment; import games.strategy.triplea.delegate.BattleCalculator; import games.strategy.triplea.delegate.Matches; import games.strategy.util.IntegerMap; import games.strategy.util.Match; /** * Pro AI data. */ public class ProData { private static ProAI proAI; private static GameData data; private static PlayerID player; // Default values public static boolean isSimulation = false; public static double winPercentage = 95; public static double minWinPercentage = 75; public static boolean areNeutralsPassableByAir = false; public static Territory myCapital = null; public static List<Territory> myUnitTerritories = new ArrayList<>(); public static Map<Unit, Territory> unitTerritoryMap = new HashMap<>(); public static IntegerMap<UnitType> unitValueMap = new IntegerMap<>(); public static ProPurchaseOptionMap purchaseOptions = null; public static double minCostPerHitPoint = Double.MAX_VALUE; public static void initialize(final ProAI proAI) { hiddenInitialize(proAI, proAI.getGameData(), proAI.getPlayerID(), false); } public static void initializeSimulation(final ProAI proAI, final GameData data, final PlayerID player) { hiddenInitialize(proAI, data, player, true); } private static void hiddenInitialize(final ProAI proAI, final GameData data, final PlayerID player, final boolean isSimulation) { ProData.proAI = proAI; ProData.data = data; ProData.player = player; ProData.isSimulation = isSimulation; if (!games.strategy.triplea.Properties.getLow_Luck(data)) { winPercentage = 90; minWinPercentage = 65; } areNeutralsPassableByAir = (Properties.getNeutralFlyoverAllowed(data) && !Properties.getNeutralsImpassable(data)); myCapital = TerritoryAttachment.getFirstOwnedCapitalOrFirstUnownedCapital(player, data); myUnitTerritories = Match.getMatches(data.getMap().getTerritories(), Matches.territoryHasUnitsOwnedBy(player)); unitTerritoryMap = ProUtils.createUnitTerritoryMap(); unitValueMap = BattleCalculator.getCostsForTUV(player, data); purchaseOptions = new ProPurchaseOptionMap(player, data); minCostPerHitPoint = getMinCostPerHitPoint(purchaseOptions.getLandOptions()); } public static ProAI getProAI() { return proAI; } public static GameData getData() { return data; } public static PlayerID getPlayer() { return player; } private static double getMinCostPerHitPoint(final List<ProPurchaseOption> landPurchaseOptions) { double minCostPerHitPoint = Double.MAX_VALUE; for (final ProPurchaseOption ppo : landPurchaseOptions) { if (ppo.getCostPerHitPoint() < minCostPerHitPoint) { minCostPerHitPoint = ppo.getCostPerHitPoint(); } } return minCostPerHitPoint; } }