def on_load(self) -> None: LuaPluginManager.load_settings(self.settings) ObjectiveDistanceCache.set_theater(self.theater) # Save game compatibility. # TODO: Remove in 2.3. if not hasattr(self, "conditions"): self.conditions = self.generate_conditions()
def create_package_for_airlift(self) -> None: distance_cache = ObjectiveDistanceCache.get_closest_airfields( self.transfer.position ) air_wing = self.game.air_wing_for(self.for_player) for cp in distance_cache.closest_airfields: if cp.captured != self.for_player: continue inventory = self.game.aircraft_inventory.for_control_point(cp) for unit_type, available in inventory.all_aircraft: squadrons = air_wing.auto_assignable_for_task_with_type( unit_type, FlightType.TRANSPORT ) for squadron in squadrons: if self.compatible_with_mission(unit_type, cp): while ( available and squadron.has_available_pilots and self.transfer.transport is None ): flight_size = self.create_airlift_flight( squadron, inventory ) available -= flight_size if self.package.flights: self.game.ato_for(self.for_player).add_package(self.package)
def on_load(self, game_still_initializing: bool = False) -> None: if not hasattr(self, "name_generator"): self.name_generator = naming.namegen # Hack: Replace the global name generator state with the state from the save # game. # # We need to persist this state so that names generated after game load don't # conflict with those generated before exit. naming.namegen = self.name_generator LuaPluginManager.load_settings(self.settings) ObjectiveDistanceCache.set_theater(self.theater) self.compute_conflicts_position() if not game_still_initializing: self.compute_threat_zones() self.blue_faker = Faker(self.faction_for(player=True).locales) self.red_faker = Faker(self.faction_for(player=False).locales)
def closest_enemy_airbase( cls, location: ControlPoint, max_distance: Distance ) -> Optional[ControlPoint]: airfields = ObjectiveDistanceCache.get_closest_airfields(location) for airfield in airfields.airfields_within(max_distance): if airfield.captured != location.captured: return airfield return None
def best_airbases_for( self, request: AircraftProcurementRequest) -> Iterator[ControlPoint]: distance_cache = ObjectiveDistanceCache.get_closest_airfields( request.near ) for cp in distance_cache.airfields_within(request.range): if not cp.is_friendly(self.is_player): continue if not cp.runway_is_operational(): continue if cp.unclaimed_parking(self.game) < request.number: continue yield cp
def best_airbases_for( self, request: AircraftProcurementRequest) -> Iterator[ControlPoint]: distance_cache = ObjectiveDistanceCache.get_closest_airfields( request.near) threatened = [] for cp in distance_cache.operational_airfields_within(request.range): if not cp.is_friendly(self.is_player): continue if cp.unclaimed_parking(self.game) < request.number: continue if self.threat_zones.threatened(cp.position): threatened.append(cp) yield cp yield from threatened
def aircraft_retreat_destination( self, game: Game, airframe: Type[FlyingType]) -> Optional[ControlPoint]: closest = ObjectiveDistanceCache.get_closest_airfields(self) # TODO: Should be airframe dependent. max_retreat_distance = nautical_miles(200) # Skip the first airbase because that's the airbase we're retreating # from. airfields = list(closest.airfields_within(max_retreat_distance))[1:] for airbase in airfields: if not airbase.can_operate(airframe): continue if airbase.captured != self.captured: continue if airbase.unclaimed_parking(game) > 0: return airbase return None
def closest_airfields_to(location: MissionTarget) -> ClosestAirfields: """Returns the closest airfields to the given location.""" return ObjectiveDistanceCache.get_closest_airfields(location)
def on_load(self) -> None: LuaPluginManager.load_settings(self.settings) ObjectiveDistanceCache.set_theater(self.theater) self.compute_conflicts_position() self.compute_threat_zones()