Don't create squadrons for removed bases.

This commit is contained in:
Dan Albert 2021-09-03 15:24:55 -07:00
parent a192e4c872
commit 94fb0d8c66
2 changed files with 22 additions and 15 deletions

View File

@ -35,10 +35,10 @@ class DefaultSquadronAssigner:
pass pass
def assign(self) -> None: def assign(self) -> None:
for control_point, squadron_configs in self.config.by_location.items(): for control_point in self.game.theater.control_points_for(
if not control_point.is_friendly(self.coalition.player): self.coalition.player
continue ):
for squadron_config in squadron_configs: for squadron_config in self.config.by_location[control_point]:
squadron_def = self.find_squadron_for(squadron_config, control_point) squadron_def = self.find_squadron_for(squadron_config, control_point)
if squadron_def is None: if squadron_def is None:
logging.info( logging.info(

View File

@ -12,7 +12,7 @@ from dcs.mapping import Point
from game import Game from game import Game
from game.factions.faction import Faction from game.factions.faction import Faction
from game.scenery_group import SceneryGroup from game.scenery_group import SceneryGroup
from game.theater import Carrier, Lha, PointWithHeading from game.theater import PointWithHeading
from game.theater.theatergroundobject import ( from game.theater.theatergroundobject import (
BuildingGroundObject, BuildingGroundObject,
CarrierGroundObject, CarrierGroundObject,
@ -88,13 +88,12 @@ class GameGenerator:
generator_settings: GeneratorSettings, generator_settings: GeneratorSettings,
mod_settings: ModSettings, mod_settings: ModSettings,
) -> None: ) -> None:
self.player = player self.player = player.apply_mod_settings(mod_settings)
self.enemy = enemy self.enemy = enemy.apply_mod_settings(mod_settings)
self.theater = theater self.theater = theater
self.air_wing_config = air_wing_config self.air_wing_config = air_wing_config
self.settings = settings self.settings = settings
self.generator_settings = generator_settings self.generator_settings = generator_settings
self.mod_settings = mod_settings
def generate(self) -> Game: def generate(self) -> Game:
with logged_duration("TGO population"): with logged_duration("TGO population"):
@ -102,8 +101,8 @@ class GameGenerator:
namegen.reset() namegen.reset()
self.prepare_theater() self.prepare_theater()
game = Game( game = Game(
player_faction=self.player.apply_mod_settings(self.mod_settings), player_faction=self.player,
enemy_faction=self.enemy.apply_mod_settings(self.mod_settings), enemy_faction=self.enemy,
theater=self.theater, theater=self.theater,
air_wing_config=self.air_wing_config, air_wing_config=self.air_wing_config,
start_date=self.generator_settings.start_date, start_date=self.generator_settings.start_date,
@ -116,19 +115,27 @@ class GameGenerator:
game.settings.version = VERSION game.settings.version = VERSION
return game return game
def should_remove_carrier(self, player: bool) -> bool:
faction = self.player if player else self.enemy
return self.generator_settings.no_carrier or not faction.carrier_names
def should_remove_lha(self, player: bool) -> bool:
faction = self.player if player else self.enemy
return self.generator_settings.no_lha or not faction.helicopter_carrier_names
def prepare_theater(self) -> None: def prepare_theater(self) -> None:
to_remove: List[ControlPoint] = [] to_remove: List[ControlPoint] = []
# Remove carrier and lha, invert situation if needed # Remove carrier and lha, invert situation if needed
for cp in self.theater.controlpoints: for cp in self.theater.controlpoints:
if isinstance(cp, Carrier) and self.generator_settings.no_carrier:
to_remove.append(cp)
elif isinstance(cp, Lha) and self.generator_settings.no_lha:
to_remove.append(cp)
if self.generator_settings.inverted: if self.generator_settings.inverted:
cp.starts_blue = cp.captured_invert cp.starts_blue = cp.captured_invert
if cp.is_carrier and self.should_remove_carrier(cp.starts_blue):
to_remove.append(cp)
elif cp.is_lha and self.should_remove_lha(cp.starts_blue):
to_remove.append(cp)
# do remove # do remove
for cp in to_remove: for cp in to_remove:
self.theater.controlpoints.remove(cp) self.theater.controlpoints.remove(cp)