mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
refactor to enum typing and many other fixes fix tests attempt to fix some typescript more typescript fixes more typescript test fixes revert all API changes update to pydcs mypy fixes Use properties to check if player is blue/red/neutral update requirements.txt black -_- bump pydcs and fix mypy add opponent property bump pydcs
37 lines
1.5 KiB
Python
37 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from game.ato.flighttype import FlightType
|
|
from game.commander.missionproposals import EscortType
|
|
from game.commander.tasks.packageplanningtask import PackagePlanningTask
|
|
from game.commander.theaterstate import TheaterState
|
|
from game.theater import FrontLine, Player
|
|
|
|
|
|
@dataclass
|
|
class PlanCas(PackagePlanningTask[FrontLine]):
|
|
def preconditions_met(self, state: TheaterState) -> bool:
|
|
if self.target not in state.vulnerable_front_lines:
|
|
return False
|
|
|
|
# Do not bother planning CAS when there are no enemy ground units at the front.
|
|
# An exception is made for turn zero since that's not being truly planned, but
|
|
# just to determine what missions should be planned on turn 1 (when there *will*
|
|
# be ground units) and what aircraft should be ordered.
|
|
player = state.context.coalition.player.opponent
|
|
enemy_cp = self.target.control_point_friendly_to(player)
|
|
if enemy_cp.deployable_front_line_units == 0 and state.context.turn > 0:
|
|
return False
|
|
return super().preconditions_met(state)
|
|
|
|
def apply_effects(self, state: TheaterState) -> None:
|
|
state.vulnerable_front_lines.remove(self.target)
|
|
super().apply_effects(state)
|
|
|
|
def propose_flights(self) -> None:
|
|
size = self.get_flight_size()
|
|
self.propose_flight(FlightType.CAS, size)
|
|
self.propose_flight(FlightType.TARCAP, 2, EscortType.AirToAir)
|
|
self.propose_flight(FlightType.SEAD_SWEEP, 2)
|