use of games.strategy.engine.data.Change in project triplea by triplea-game.
the class ProSimulateTurnUtils method simulateBattles.
public static void simulateBattles(final GameData data, final PlayerID player, final IDelegateBridge delegateBridge, final ProOddsCalculator calc) {
ProLogger.info("Starting battle simulation phase");
final BattleDelegate battleDelegate = DelegateFinder.battleDelegate(data);
final Map<BattleType, Collection<Territory>> battleTerritories = battleDelegate.getBattles().getBattles();
for (final Entry<BattleType, Collection<Territory>> entry : battleTerritories.entrySet()) {
for (final Territory t : entry.getValue()) {
final IBattle battle = battleDelegate.getBattleTracker().getPendingBattle(t, entry.getKey().isBombingRun(), entry.getKey());
final List<Unit> attackers = (List<Unit>) battle.getAttackingUnits();
attackers.retainAll(t.getUnits().getUnits());
final List<Unit> defenders = (List<Unit>) battle.getDefendingUnits();
defenders.retainAll(t.getUnits().getUnits());
final Set<Unit> bombardingUnits = new HashSet<>(battle.getBombardingUnits());
ProLogger.debug("---" + t);
ProLogger.debug("attackers=" + attackers);
ProLogger.debug("defenders=" + defenders);
ProLogger.debug("bombardingUnits=" + bombardingUnits);
final ProBattleResult result = calc.callBattleCalculator(t, attackers, defenders, bombardingUnits);
final List<Unit> remainingUnits = result.getAverageAttackersRemaining();
ProLogger.debug("remainingUnits=" + remainingUnits);
// Make updates to data
final List<Unit> attackersToRemove = new ArrayList<>(attackers);
attackersToRemove.removeAll(remainingUnits);
final List<Unit> defendersToRemove = CollectionUtils.getMatches(defenders, Matches.unitIsInfrastructure().negate());
final List<Unit> infrastructureToChangeOwner = CollectionUtils.getMatches(defenders, Matches.unitIsInfrastructure());
ProLogger.debug("attackersToRemove=" + attackersToRemove);
ProLogger.debug("defendersToRemove=" + defendersToRemove);
ProLogger.debug("infrastructureToChangeOwner=" + infrastructureToChangeOwner);
final Change attackerskilledChange = ChangeFactory.removeUnits(t, attackersToRemove);
delegateBridge.addChange(attackerskilledChange);
final Change defenderskilledChange = ChangeFactory.removeUnits(t, defendersToRemove);
delegateBridge.addChange(defenderskilledChange);
BattleTracker.captureOrDestroyUnits(t, player, player, delegateBridge, null);
if (!checkIfCapturedTerritoryIsAlliedCapital(t, data, player, delegateBridge)) {
delegateBridge.addChange(ChangeFactory.changeOwner(t, player));
}
battleDelegate.getBattleTracker().getConquered().add(t);
battleDelegate.getBattleTracker().removeBattle(battle);
final Territory updatedTerritory = data.getMap().getTerritory(t.getName());
ProLogger.debug("after changes owner=" + updatedTerritory.getOwner() + ", units=" + updatedTerritory.getUnits().getUnits());
}
}
}
use of games.strategy.engine.data.Change in project triplea by triplea-game.
the class AirThatCantLandUtilTest method testSpareNextToFactory.
@Test
public void testSpareNextToFactory() {
final PlayerID player = americansPlayer;
final ITestDelegateBridge bridge = getDelegateBridge(player);
final Territory sz55 = gameData.getMap().getTerritory("55 Sea Zone");
final Change addAir = ChangeFactory.addUnits(sz55, fighterType.create(2, player));
gameData.performChange(addAir);
final AirThatCantLandUtil airThatCantLandUtil = new AirThatCantLandUtil(bridge);
airThatCantLandUtil.removeAirThatCantLand(player, true);
assertEquals(2, sz55.getUnits().getMatches(Matches.unitIsAir()).size());
}
use of games.strategy.engine.data.Change in project triplea by triplea-game.
the class AirThatCantLandUtilTest method testCantLandEnemyTerritory.
@Test
public void testCantLandEnemyTerritory() {
final PlayerID player = americansPlayer;
final ITestDelegateBridge bridge = getDelegateBridge(player);
final Territory balkans = gameData.getMap().getTerritory("Balkans");
final Change addAir = ChangeFactory.addUnits(balkans, fighterType.create(2, player));
gameData.performChange(addAir);
final AirThatCantLandUtil airThatCantLandUtil = new AirThatCantLandUtil(bridge);
final Collection<Territory> cantLand = airThatCantLandUtil.getTerritoriesWhereAirCantLand(player);
assertEquals(1, cantLand.size());
assertEquals(balkans, cantLand.iterator().next());
airThatCantLandUtil.removeAirThatCantLand(player, false);
// jsut the original german fighter
assertEquals(1, balkans.getUnits().getMatches(Matches.unitIsAir()).size());
}
use of games.strategy.engine.data.Change in project triplea by triplea-game.
the class WW2V3Year41Test method testParatroopersFlyOverBlitzedTerritory.
@Test
public void testParatroopersFlyOverBlitzedTerritory() {
// We should be able to blitz a territory, then fly over it with paratroops to battle.
final PlayerID germans = germans(gameData);
final Territory germany = territory("Germany", gameData);
final Territory poland = territory("Poland", gameData);
final Territory eastPoland = territory("East Poland", gameData);
final Territory beloRussia = territory("Belorussia", gameData);
// Clear East Poland
removeFrom(eastPoland, eastPoland.getUnits().getUnits());
// Set up test
final ITestDelegateBridge bridge = getDelegateBridge(germans);
bridge.setStepName("CombatMove");
moveDelegate(gameData).setDelegateBridgeAndPlayer(bridge);
moveDelegate(gameData).start();
TechAttachment.get(germans).setParatroopers("true");
List<Unit> paratrooper = germany.getUnits().getMatches(Matches.unitIsAirTransportable());
paratrooper = paratrooper.subList(0, 1);
final List<Unit> bomberAndParatroop = new ArrayList<>(paratrooper);
bomberAndParatroop.addAll(germany.getUnits().getMatches(Matches.unitIsAirTransport()));
final List<Unit> tanks = poland.getUnits().getMatches(Matches.unitCanBlitz());
move(tanks, new Route(poland, eastPoland, beloRussia));
final List<Unit> airTransports = CollectionUtils.getMatches(bomberAndParatroop, Matches.unitIsAirTransport());
for (final Unit airTransport : airTransports) {
for (final Unit unit : paratrooper) {
final Change change = TransportTracker.loadTransportChange((TripleAUnit) airTransport, unit);
bridge.addChange(change);
}
}
// Verify paratroops can overfly blitzed territory
final String error = moveDelegate(gameData).move(bomberAndParatroop, new Route(germany, poland, eastPoland, beloRussia));
assertValid(error);
}
use of games.strategy.engine.data.Change in project triplea by triplea-game.
the class WW2V3Year41Test method testParatroopersMoveTwice.
@Test
public void testParatroopersMoveTwice() {
// After a battle move to put a bomber + infantry (paratroop) in a first enemy
// territory, you can make a new move (in the same battle move round) to put
// bomber+ infantry in a more internal enemy territory.
final PlayerID germans = germans(gameData);
final Territory germany = territory("Germany", gameData);
final Territory poland = territory("Poland", gameData);
final Territory eastPoland = territory("East Poland", gameData);
final Territory beloRussia = territory("Belorussia", gameData);
final ITestDelegateBridge bridge = getDelegateBridge(germans);
bridge.setStepName("CombatMove");
moveDelegate(gameData).setDelegateBridgeAndPlayer(bridge);
moveDelegate(gameData).start();
TechAttachment.get(germans).setParatroopers("true");
List<Unit> paratroopers = germany.getUnits().getMatches(Matches.unitIsAirTransportable());
paratroopers = paratroopers.subList(0, 1);
final List<Unit> bomberAndParatroop = new ArrayList<>(paratroopers);
bomberAndParatroop.addAll(germany.getUnits().getMatches(Matches.unitIsAirTransport()));
final Route route = new Route(germany, poland, eastPoland);
final List<Unit> airTransports = germany.getUnits().getMatches(Matches.unitIsAirTransport());
for (final Unit airTransport : airTransports) {
for (final Unit unit : paratroopers) {
final Change change = TransportTracker.loadTransportChange((TripleAUnit) airTransport, unit);
bridge.addChange(change);
}
}
// move the units to east poland
// airTransports
String error = moveDelegate(gameData).move(bomberAndParatroop, route);
assertValid(error);
// try to move them further, this should fail
error = moveDelegate(gameData).move(bomberAndParatroop, new Route(eastPoland, beloRussia));
assertError(error);
}
Aggregations