mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
A lot of the dependency versions we have pinned don't have wheels for Python 3.12. Update almost all of them so we can upgrade Python. The few that weren't upgraded here are black and mypy, since those will be a bit invasive, and Pillow, which has an API change I don't want to deal with right now (I've got a commit on another machine that has already done the migration, so I'll do it later).
153 lines
5.5 KiB
Python
153 lines
5.5 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 import Game
|
|
from game.ato import Flight, Package
|
|
from game.navmesh import NavMesh
|
|
from game.sim.combat import FrozenCombat
|
|
from game.theater import ControlPoint, FrontLine, TheaterGroundObject
|
|
from game.threatzones import ThreatZones
|
|
from game.theater.iadsnetwork.iadsnetwork import IadsNetworkNode
|
|
|
|
|
|
@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: dict[bool, NavMesh] = field(default_factory=dict)
|
|
unculled_zones_updated: list[Point] = field(default_factory=list)
|
|
threat_zones_updated: dict[bool, ThreatZones] = field(default_factory=dict)
|
|
new_flights: set[Flight] = field(default_factory=set)
|
|
updated_flights: set[Flight] = field(default_factory=set)
|
|
deleted_flights: set[UUID] = field(default_factory=set)
|
|
selected_flight: UUID | None = None
|
|
deselected_flight: bool = False
|
|
updated_front_lines: set[FrontLine] = field(default_factory=set)
|
|
deleted_front_lines: set[UUID] = field(default_factory=set)
|
|
updated_tgos: set[TheaterGroundObject] = field(default_factory=set)
|
|
updated_control_points: set[ControlPoint] = field(default_factory=set)
|
|
updated_iads: set[IadsNetworkNode] = field(default_factory=set)
|
|
deleted_iads_connections: set[UUID] = field(default_factory=set)
|
|
reset_on_map_center: Point | None = None
|
|
game_unloaded: bool = False
|
|
new_turn: bool = False
|
|
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) -> GameUpdateEvents:
|
|
self.ended_combats.append(combat)
|
|
return self
|
|
|
|
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, navmesh: NavMesh) -> GameUpdateEvents:
|
|
self.navmesh_updates[player] = navmesh
|
|
return self
|
|
|
|
def update_unculled_zones(self, zones: list[Point]) -> GameUpdateEvents:
|
|
self.unculled_zones_updated = zones
|
|
return self
|
|
|
|
def update_threat_zones(self, player: bool, zones: ThreatZones) -> GameUpdateEvents:
|
|
self.threat_zones_updated[player] = zones
|
|
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)
|
|
return self
|
|
|
|
def update_flights_in_package(self, package: Package) -> GameUpdateEvents:
|
|
self.updated_flights.update({f 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 update_front_line(self, front_line: FrontLine) -> GameUpdateEvents:
|
|
self.updated_front_lines.add(front_line)
|
|
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)
|
|
return self
|
|
|
|
def update_control_point(self, control_point: ControlPoint) -> GameUpdateEvents:
|
|
self.updated_control_points.add(control_point)
|
|
return self
|
|
|
|
def update_iads_node(self, iads_node: IadsNetworkNode) -> GameUpdateEvents:
|
|
self.updated_iads.add(iads_node)
|
|
return self
|
|
|
|
def delete_iads_connection(self, connection_id: UUID) -> GameUpdateEvents:
|
|
self.deleted_iads_connections.add(connection_id)
|
|
return self
|
|
|
|
def game_loaded(self, game: Game | None) -> GameUpdateEvents:
|
|
if game is None:
|
|
self.game_unloaded = True
|
|
self.reset_on_map_center = None
|
|
else:
|
|
self.reset_on_map_center = game.theater.terrain.map_view_default.position
|
|
self.game_unloaded = False
|
|
return self
|
|
|
|
def begin_new_turn(self) -> GameUpdateEvents:
|
|
self.new_turn = True
|
|
return self
|
|
|
|
def shut_down(self) -> GameUpdateEvents:
|
|
self.shutting_down = True
|
|
return self
|