mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
122 lines
4.1 KiB
Python
122 lines
4.1 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import TYPE_CHECKING
|
|
from uuid import UUID
|
|
|
|
from dcs import Point
|
|
|
|
if TYPE_CHECKING:
|
|
from game.ato import Flight, Package
|
|
from game.sim.combat import FrozenCombat
|
|
from game.theater import FrontLine, TheaterGroundObject
|
|
|
|
|
|
@dataclass
|
|
class GameUpdateEvents:
|
|
simulation_complete = False
|
|
new_combats: list[FrozenCombat] = field(default_factory=list)
|
|
updated_combats: list[FrozenCombat] = field(default_factory=list)
|
|
ended_combats: list[FrozenCombat] = field(default_factory=list)
|
|
updated_flight_positions: list[tuple[Flight, Point]] = field(default_factory=list)
|
|
navmesh_updates: set[bool] = field(default_factory=set)
|
|
unculled_zones_updated: bool = False
|
|
threat_zones_updated: bool = False
|
|
new_flights: set[Flight] = field(default_factory=set)
|
|
updated_flights: set[UUID] = field(default_factory=set)
|
|
deleted_flights: set[UUID] = field(default_factory=set)
|
|
selected_flight: UUID | None = None
|
|
deselected_flight: bool = False
|
|
new_front_lines: set[FrontLine] = field(default_factory=set)
|
|
updated_front_lines: set[UUID] = field(default_factory=set)
|
|
deleted_front_lines: set[UUID] = field(default_factory=set)
|
|
updated_tgos: set[UUID] = field(default_factory=set)
|
|
shutting_down: bool = False
|
|
|
|
@property
|
|
def empty(self) -> bool:
|
|
return self == GameUpdateEvents()
|
|
|
|
def complete_simulation(self) -> GameUpdateEvents:
|
|
self.simulation_complete = True
|
|
return self
|
|
|
|
def new_combat(self, combat: FrozenCombat) -> GameUpdateEvents:
|
|
self.new_combats.append(combat)
|
|
return self
|
|
|
|
def update_combat(self, combat: FrozenCombat) -> GameUpdateEvents:
|
|
self.updated_combats.append(combat)
|
|
return self
|
|
|
|
def end_combat(self, combat: FrozenCombat) -> None:
|
|
self.ended_combats.append(combat)
|
|
|
|
def update_flight_position(
|
|
self, flight: Flight, new_position: Point
|
|
) -> GameUpdateEvents:
|
|
self.updated_flight_positions.append((flight, new_position))
|
|
return self
|
|
|
|
def update_navmesh(self, player: bool) -> GameUpdateEvents:
|
|
self.navmesh_updates.add(player)
|
|
return self
|
|
|
|
def update_unculled_zones(self) -> GameUpdateEvents:
|
|
self.unculled_zones_updated = True
|
|
return self
|
|
|
|
def update_threat_zones(self) -> GameUpdateEvents:
|
|
self.threat_zones_updated = True
|
|
return self
|
|
|
|
def new_flight(self, flight: Flight) -> GameUpdateEvents:
|
|
self.new_flights.add(flight)
|
|
return self
|
|
|
|
def update_flight(self, flight: Flight) -> GameUpdateEvents:
|
|
self.updated_flights.add(flight.id)
|
|
return self
|
|
|
|
def update_flights_in_package(self, package: Package) -> GameUpdateEvents:
|
|
self.updated_flights.update({f.id for f in package.flights})
|
|
return self
|
|
|
|
def delete_flight(self, flight: Flight) -> GameUpdateEvents:
|
|
self.deleted_flights.add(flight.id)
|
|
return self
|
|
|
|
def delete_flights_in_package(self, package: Package) -> GameUpdateEvents:
|
|
self.deleted_flights.update({f.id for f in package.flights})
|
|
return self
|
|
|
|
def select_flight(self, flight: Flight) -> GameUpdateEvents:
|
|
self.selected_flight = flight.id
|
|
self.deselected_flight = False
|
|
return self
|
|
|
|
def deselect_flight(self) -> GameUpdateEvents:
|
|
self.deselected_flight = True
|
|
self.selected_flight = None
|
|
return self
|
|
|
|
def new_front_line(self, front_line: FrontLine) -> GameUpdateEvents:
|
|
self.new_front_lines.add(front_line)
|
|
return self
|
|
|
|
def update_front_line(self, front_line: FrontLine) -> GameUpdateEvents:
|
|
self.updated_front_lines.add(front_line.id)
|
|
return self
|
|
|
|
def delete_front_line(self, front_line: FrontLine) -> GameUpdateEvents:
|
|
self.deleted_front_lines.add(front_line.id)
|
|
return self
|
|
|
|
def update_tgo(self, tgo: TheaterGroundObject) -> GameUpdateEvents:
|
|
self.updated_tgos.add(tgo.id)
|
|
return self
|
|
|
|
def shut_down(self) -> GameUpdateEvents:
|
|
self.shutting_down = True
|
|
return self
|