mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
- Moved logic from TGO to TheaterGroup and Unit, cleanup - Fixed an issue with wrong radar threat zone calculation - Correctly handle dead and alive units in threat calculation (dead units are no more threats...) - Fixed wrong air_defenses threat zone used for planning (now uses aa-capable tgos instead of all tgos for the CP) - Remove the might_have_aa property from TGOs and actually check if there is any aa-capable unit present (this is needed as with the recent tgo refactor all type of TGOs can also have anti air units if they have some defined in the layout)
57 lines
1.7 KiB
Python
57 lines
1.7 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel
|
|
|
|
from game.server.leaflet import LeafletPoint
|
|
|
|
if TYPE_CHECKING:
|
|
from game import Game
|
|
from game.theater import TheaterGroundObject
|
|
|
|
|
|
class TgoJs(BaseModel):
|
|
id: UUID
|
|
name: str
|
|
control_point_name: str
|
|
category: str
|
|
blue: bool
|
|
position: LeafletPoint
|
|
units: list[str] # TODO: Event stream
|
|
threat_ranges: list[float] # TODO: Event stream
|
|
detection_ranges: list[float] # TODO: Event stream
|
|
dead: bool # TODO: Event stream
|
|
sidc: str # TODO: Event stream
|
|
|
|
class Config:
|
|
title = "Tgo"
|
|
|
|
@staticmethod
|
|
def for_tgo(tgo: TheaterGroundObject) -> TgoJs:
|
|
threat_ranges = [group.max_threat_range().meters for group in tgo.groups]
|
|
detection_ranges = [group.max_detection_range().meters for group in tgo.groups]
|
|
return TgoJs(
|
|
id=tgo.id,
|
|
name=tgo.name,
|
|
control_point_name=tgo.control_point.name,
|
|
category=tgo.category,
|
|
blue=tgo.control_point.captured,
|
|
position=tgo.position.latlng(),
|
|
units=[unit.display_name for unit in tgo.units],
|
|
threat_ranges=threat_ranges,
|
|
detection_ranges=detection_ranges,
|
|
dead=tgo.is_dead,
|
|
sidc=str(tgo.sidc()),
|
|
)
|
|
|
|
@staticmethod
|
|
def all_in_game(game: Game) -> list[TgoJs]:
|
|
tgos = []
|
|
for control_point in game.theater.controlpoints:
|
|
for tgo in control_point.connected_objectives:
|
|
if not tgo.is_control_point:
|
|
tgos.append(TgoJs.for_tgo(tgo))
|
|
return tgos
|