mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
IADS that are in detection range (but not attack range) of missions will be targeted at very low priority. These will typically only be planned when no other targets are in range.
25 lines
967 B
Python
25 lines
967 B
Python
from collections import Iterator
|
|
from typing import Union
|
|
|
|
from game.commander.tasks.primitive.antiship import PlanAntiShip
|
|
from game.commander.tasks.primitive.dead import PlanDead
|
|
from game.commander.theaterstate import TheaterState
|
|
from game.htn import CompoundTask, Method
|
|
from game.theater.theatergroundobject import IadsGroundObject, NavalGroundObject
|
|
|
|
|
|
class DegradeIads(CompoundTask[TheaterState]):
|
|
def each_valid_method(self, state: TheaterState) -> Iterator[Method[TheaterState]]:
|
|
for air_defense in state.threatening_air_defenses:
|
|
yield [self.plan_against(air_defense)]
|
|
for detector in state.detecting_air_defenses:
|
|
yield [self.plan_against(detector)]
|
|
|
|
@staticmethod
|
|
def plan_against(
|
|
target: Union[IadsGroundObject, NavalGroundObject]
|
|
) -> Union[PlanDead, PlanAntiShip]:
|
|
if isinstance(target, IadsGroundObject):
|
|
return PlanDead(target)
|
|
return PlanAntiShip(target)
|