mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
An HTN (https://en.wikipedia.org/wiki/Hierarchical_task_network) is similar to a decision tree, but it is able to reset to an earlier stage if a subtask fails and tasks are able to account for the changes in world state caused by earlier tasks. Currently this just uses exactly the same strategy as before so we can prove the system, but it should make it simpler to improve on task planning.
24 lines
857 B
Python
24 lines
857 B
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
from typing import Any
|
|
|
|
from game.commander.tasks.packageplanningtask import PackagePlanningTask
|
|
from game.commander.theaterstate import TheaterState
|
|
from game.data.doctrine import Doctrine
|
|
from game.theater.theatergroundobject import TheaterGroundObject
|
|
from gen.flights.flight import FlightType
|
|
|
|
|
|
@dataclass
|
|
class PlanStrike(PackagePlanningTask[TheaterGroundObject[Any]]):
|
|
def preconditions_met(self, state: TheaterState) -> bool:
|
|
return self.target in state.strike_targets
|
|
|
|
def apply_effects(self, state: TheaterState) -> None:
|
|
state.strike_targets.remove(self.target)
|
|
|
|
def propose_flights(self, doctrine: Doctrine) -> None:
|
|
self.propose_flight(FlightType.STRIKE, 2, doctrine.mission_ranges.offensive)
|
|
self.propose_common_escorts(doctrine)
|