mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
This doesn't do anything yet, but sets up the data model handling for frozen combat. The next step is to show combat in the map view, since that will be helpful when debugging the step after that one: resolving frozen combat. This would benefit from caching the Shapely data for SAM threat zones. Right now it's generating them once per tick and the stuttering is visible at max speed. https://github.com/dcs-liberation/dcs_liberation/issues/1680
33 lines
816 B
Python
33 lines
816 B
Python
from __future__ import annotations
|
|
|
|
from abc import ABC, abstractmethod
|
|
from collections.abc import Iterator
|
|
from typing import TYPE_CHECKING
|
|
|
|
from game.ato.flightstate import InCombat, InFlight
|
|
|
|
if TYPE_CHECKING:
|
|
from game.ato import Flight
|
|
|
|
|
|
class FrozenCombat(ABC):
|
|
@abstractmethod
|
|
def because(self) -> str:
|
|
...
|
|
|
|
@abstractmethod
|
|
def describe(self) -> str:
|
|
...
|
|
|
|
@abstractmethod
|
|
def iter_flights(self) -> Iterator[Flight]:
|
|
...
|
|
|
|
def update_flight_states(self) -> None:
|
|
for flight in self.iter_flights():
|
|
if not isinstance(flight.state, InFlight):
|
|
raise RuntimeError(
|
|
f"Found non in-flight aircraft engaged in combat: {flight}"
|
|
)
|
|
flight.set_state(InCombat(flight.state, self))
|