2021-07-13 15:20:42 -07:00

47 lines
1.5 KiB
Python

from __future__ import annotations
from dataclasses import dataclass
from typing import TYPE_CHECKING
from game.commander.missionproposals import ProposedMission, ProposedFlight
from game.commander.tasks.theatercommandertask import TheaterCommanderTask
from game.commander.theaterstate import TheaterState
from game.profiling import MultiEventTracer
from game.theater import ControlPoint
from gen.flights.flight import FlightType
if TYPE_CHECKING:
from gen.flights.ai_flight_planner import CoalitionMissionPlanner
@dataclass
class PlanBarcap(TheaterCommanderTask):
target: ControlPoint
rounds: int
def preconditions_met(self, state: TheaterState) -> bool:
if state.player and not state.ato_automation_enabled:
return False
return self.target in state.vulnerable_control_points
def apply_effects(self, state: TheaterState) -> None:
state.vulnerable_control_points.remove(self.target)
def execute(
self, mission_planner: CoalitionMissionPlanner, tracer: MultiEventTracer
) -> None:
for _ in range(self.rounds):
mission_planner.plan_mission(
ProposedMission(
self.target,
[
ProposedFlight(
FlightType.BARCAP,
2,
mission_planner.doctrine.mission_ranges.cap,
),
],
),
tracer,
)