mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Check for available aircraft as task precondition.
This makes it so that the mission planning effects are applied only if the package can be fulfilled. For example, breakthrough will be used only if all the BAI missions were fulfilled, not if they will *attempt* to be fulfilled.
This commit is contained in:
@@ -1,46 +1,23 @@
|
||||
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.tasks.packageplanningtask import PackagePlanningTask
|
||||
from game.commander.theaterstate import TheaterState
|
||||
from game.profiling import MultiEventTracer
|
||||
from game.data.doctrine import Doctrine
|
||||
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
|
||||
|
||||
class PlanBarcap(PackagePlanningTask[ControlPoint]):
|
||||
def preconditions_met(self, state: TheaterState) -> bool:
|
||||
if state.player and not state.ato_automation_enabled:
|
||||
if not super().preconditions_met(state):
|
||||
return False
|
||||
return self.target in state.vulnerable_control_points
|
||||
return state.barcaps_needed[self.target] > 0
|
||||
|
||||
def apply_effects(self, state: TheaterState) -> None:
|
||||
state.vulnerable_control_points.remove(self.target)
|
||||
state.barcaps_needed[self.target] -= 1
|
||||
|
||||
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,
|
||||
)
|
||||
def propose_flights(self, doctrine: Doctrine) -> None:
|
||||
self.propose_flight(FlightType.BARCAP, 2, doctrine.mission_ranges.cap)
|
||||
|
||||
Reference in New Issue
Block a user