from __future__ import annotations from dataclasses import dataclass from game.commander.missionproposals import EscortType from game.commander.tasks.packageplanningtask import PackagePlanningTask from game.commander.theaterstate import TheaterState from game.data.doctrine import Doctrine from game.theater import NavalGroundObject from gen.flights.flight import FlightType @dataclass class PlanAntiShip(PackagePlanningTask[NavalGroundObject]): def preconditions_met(self, state: TheaterState) -> bool: if not super().preconditions_met(state): return False if self.target not in state.threatening_air_defenses: return False return self.target_area_preconditions_met(state, ignore_iads=True) def apply_effects(self, state: TheaterState) -> None: state.eliminate_ship(self.target) def propose_flights(self, doctrine: Doctrine) -> None: self.propose_flight(FlightType.ANTISHIP, 2, doctrine.mission_ranges.offensive) self.propose_flight( FlightType.ESCORT, 2, doctrine.mission_ranges.offensive, EscortType.AirToAir, )