diff --git a/game/theater/controlpoint.py b/game/theater/controlpoint.py index 0635b358..3821adf2 100644 --- a/game/theater/controlpoint.py +++ b/game/theater/controlpoint.py @@ -27,12 +27,21 @@ from dcs.ships import Forrestal, KUZNECOW, LHA_Tarawa, Stennis, Type_071 from dcs.terrain.terrain import Airport, ParkingSlot from dcs.unitgroup import ShipGroup, StaticGroup +from game.ato.closestairfields import ObjectiveDistanceCache from game.ground_forces.combat_stance import CombatStance from game.point_with_heading import PointWithHeading from game.runways import RunwayAssigner, RunwayData from game.scenery_group import SceneryGroup +from game.sidc import ( + Entity, + LandInstallationEntity, + SeaSurfaceEntity, + StandardIdentity, + Status, + SymbolIdentificationCode, + SymbolSet, +) from game.utils import Heading -from game.ato.closestairfields import ObjectiveDistanceCache from .base import Base from .missiontarget import MissionTarget from .theatergroundobject import ( @@ -342,6 +351,29 @@ class ControlPoint(MissionTarget, ABC): def captured(self) -> bool: return self.coalition.player + def sidc(self) -> SymbolIdentificationCode: + iff = ( + StandardIdentity.FRIEND if self.captured else StandardIdentity.HOSTILE_FAKER + ) + + if self.status is ControlPointStatus.Functional: + status = Status.PRESENT + elif self.status is ControlPointStatus.Damaged: + status = Status.PRESENT_DAMAGED + elif self.status is ControlPointStatus.Destroyed: + status = Status.PRESENT_DESTROYED + else: + raise ValueError(f"Unexpected ControlPointStatus: {self.status}") + + symbol_set, entity = self.symbol_set_and_entity() + return SymbolIdentificationCode( + standard_identity=iff, symbol_set=symbol_set, status=status, entity=entity + ) + + @abstractmethod + def symbol_set_and_entity(self) -> tuple[SymbolSet, Entity]: + ... + @property def ground_objects(self) -> List[TheaterGroundObject]: return list(self.connected_objectives) @@ -875,6 +907,9 @@ class Airfield(ControlPoint): self.airport = airport self._runway_status = RunwayStatus() + def symbol_set_and_entity(self) -> tuple[SymbolSet, Entity]: + return SymbolSet.LAND_INSTALLATIONS, LandInstallationEntity.AIPORT_AIR_BASE + def can_operate(self, aircraft: AircraftType) -> bool: # TODO: Allow helicopters. # Need to implement ground spawns so the helos don't use the runway. @@ -1058,6 +1093,9 @@ class Carrier(NavalControlPoint): cptype=ControlPointType.AIRCRAFT_CARRIER_GROUP, ) + def symbol_set_and_entity(self) -> tuple[SymbolSet, Entity]: + return SymbolSet.SEA_SURFACE, SeaSurfaceEntity.CARRIER + def mission_types(self, for_player: bool) -> Iterator[FlightType]: from game.ato import FlightType @@ -1099,6 +1137,9 @@ class Lha(NavalControlPoint): cptype=ControlPointType.LHA_GROUP, ) + def symbol_set_and_entity(self) -> tuple[SymbolSet, Entity]: + return SymbolSet.SEA_SURFACE, SeaSurfaceEntity.AMPHIBIOUS_ASSAULT_SHIP_GENERAL + def capture(self, game: Game, for_player: bool) -> None: raise RuntimeError("LHAs cannot be captured") @@ -1133,6 +1174,9 @@ class OffMapSpawn(ControlPoint): cptype=ControlPointType.OFF_MAP, ) + def symbol_set_and_entity(self) -> tuple[SymbolSet, Entity]: + return SymbolSet.LAND_INSTALLATIONS, LandInstallationEntity.AIPORT_AIR_BASE + def capture(self, game: Game, for_player: bool) -> None: raise RuntimeError("Off map control points cannot be captured") @@ -1195,6 +1239,9 @@ class Fob(ControlPoint): ) self.name = name + def symbol_set_and_entity(self) -> tuple[SymbolSet, Entity]: + return SymbolSet.LAND_INSTALLATIONS, LandInstallationEntity.MILITARY_BASE + def runway_is_operational(self) -> bool: return self.has_helipads diff --git a/qt_ui/widgets/map/model/controlpointjs.py b/qt_ui/widgets/map/model/controlpointjs.py index 7f505bc6..204f5d4a 100644 --- a/qt_ui/widgets/map/model/controlpointjs.py +++ b/qt_ui/widgets/map/model/controlpointjs.py @@ -7,7 +7,7 @@ from dcs import Point from dcs.mapping import LatLng from game.server.leaflet import LeafletLatLon -from game.theater import ConflictTheater, ControlPoint, ControlPointStatus +from game.theater import ConflictTheater, ControlPoint from game.utils import meters, nautical_miles from qt_ui.dialogs import Dialog from qt_ui.models import GameModel @@ -22,8 +22,7 @@ class ControlPointJs(QObject): positionChanged = Signal() mobileChanged = Signal() destinationChanged = Signal(list) - categoryChanged = Signal() - statusChanged = Signal() + sidcChanged = Signal() def __init__( self, @@ -45,20 +44,9 @@ class ControlPointJs(QObject): def blue(self) -> bool: return self.control_point.captured - @Property(str, notify=categoryChanged) - def category(self) -> str: - return self.control_point.category - - @Property(str, notify=statusChanged) - def status(self) -> str: - status = self.control_point.status - if status is ControlPointStatus.Functional: - return "alive" - elif status is ControlPointStatus.Damaged: - return "damaged" - elif status is ControlPointStatus.Destroyed: - return "destroyed" - raise ValueError(f"Unhandled ControlPointStatus: {status.name}") + @Property(str, notify=sidcChanged) + def sidc(self) -> str: + return str(self.control_point.sidc()) @Property(list, notify=positionChanged) def position(self) -> LeafletLatLon: diff --git a/resources/ui/ground_assets/airfield_blue_alive.svg b/resources/ui/ground_assets/airfield_blue_alive.svg deleted file mode 100644 index dcc9a38e..00000000 --- a/resources/ui/ground_assets/airfield_blue_alive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/airfield_blue_damaged.svg b/resources/ui/ground_assets/airfield_blue_damaged.svg deleted file mode 100644 index 107f6b62..00000000 --- a/resources/ui/ground_assets/airfield_blue_damaged.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/airfield_blue_destroyed.svg b/resources/ui/ground_assets/airfield_blue_destroyed.svg deleted file mode 100644 index 7d49ff30..00000000 --- a/resources/ui/ground_assets/airfield_blue_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/airfield_red_alive.svg b/resources/ui/ground_assets/airfield_red_alive.svg deleted file mode 100644 index 1b481dd0..00000000 --- a/resources/ui/ground_assets/airfield_red_alive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/airfield_red_damaged.svg b/resources/ui/ground_assets/airfield_red_damaged.svg deleted file mode 100644 index 39693c44..00000000 --- a/resources/ui/ground_assets/airfield_red_damaged.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/airfield_red_destroyed.svg b/resources/ui/ground_assets/airfield_red_destroyed.svg deleted file mode 100644 index 1a2303a1..00000000 --- a/resources/ui/ground_assets/airfield_red_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_blue_alive.svg b/resources/ui/ground_assets/cv_blue_alive.svg deleted file mode 100644 index b7b50fda..00000000 --- a/resources/ui/ground_assets/cv_blue_alive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_blue_damaged.svg b/resources/ui/ground_assets/cv_blue_damaged.svg deleted file mode 100644 index 81cb15af..00000000 --- a/resources/ui/ground_assets/cv_blue_damaged.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_blue_destination.svg b/resources/ui/ground_assets/cv_blue_destination.svg deleted file mode 100644 index 29f56749..00000000 --- a/resources/ui/ground_assets/cv_blue_destination.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_blue_destroyed.svg b/resources/ui/ground_assets/cv_blue_destroyed.svg deleted file mode 100644 index ca7ffb57..00000000 --- a/resources/ui/ground_assets/cv_blue_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_red_alive.svg b/resources/ui/ground_assets/cv_red_alive.svg deleted file mode 100644 index 36c385b3..00000000 --- a/resources/ui/ground_assets/cv_red_alive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_red_damaged.svg b/resources/ui/ground_assets/cv_red_damaged.svg deleted file mode 100644 index af08402c..00000000 --- a/resources/ui/ground_assets/cv_red_damaged.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_red_destination.svg b/resources/ui/ground_assets/cv_red_destination.svg deleted file mode 100644 index 32d06bc2..00000000 --- a/resources/ui/ground_assets/cv_red_destination.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/cv_red_destroyed.svg b/resources/ui/ground_assets/cv_red_destroyed.svg deleted file mode 100644 index 2c0ebb05..00000000 --- a/resources/ui/ground_assets/cv_red_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/fob_blue.png b/resources/ui/ground_assets/fob_blue.png deleted file mode 100644 index d632caa3..00000000 Binary files a/resources/ui/ground_assets/fob_blue.png and /dev/null differ diff --git a/resources/ui/ground_assets/fob_blue_alive.svg b/resources/ui/ground_assets/fob_blue_alive.svg deleted file mode 100644 index e78bbd81..00000000 --- a/resources/ui/ground_assets/fob_blue_alive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/fob_blue_damaged.svg b/resources/ui/ground_assets/fob_blue_damaged.svg deleted file mode 100644 index c93ec0e6..00000000 --- a/resources/ui/ground_assets/fob_blue_damaged.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/fob_blue_destroyed.svg b/resources/ui/ground_assets/fob_blue_destroyed.svg deleted file mode 100644 index 4cc0764f..00000000 --- a/resources/ui/ground_assets/fob_blue_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/fob_red_alive.svg b/resources/ui/ground_assets/fob_red_alive.svg deleted file mode 100644 index f6e1e238..00000000 --- a/resources/ui/ground_assets/fob_red_alive.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/fob_red_damaged.svg b/resources/ui/ground_assets/fob_red_damaged.svg deleted file mode 100644 index 72ff98f7..00000000 --- a/resources/ui/ground_assets/fob_red_damaged.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/fob_red_destroyed.svg b/resources/ui/ground_assets/fob_red_destroyed.svg deleted file mode 100644 index 0a00635a..00000000 --- a/resources/ui/ground_assets/fob_red_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_blue_alive.svg b/resources/ui/ground_assets/lha_blue_alive.svg deleted file mode 100644 index e23f553e..00000000 --- a/resources/ui/ground_assets/lha_blue_alive.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_blue_damaged.svg b/resources/ui/ground_assets/lha_blue_damaged.svg deleted file mode 100644 index 28acacdb..00000000 --- a/resources/ui/ground_assets/lha_blue_damaged.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_blue_destination.svg b/resources/ui/ground_assets/lha_blue_destination.svg deleted file mode 100644 index 36869350..00000000 --- a/resources/ui/ground_assets/lha_blue_destination.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_blue_destroyed.svg b/resources/ui/ground_assets/lha_blue_destroyed.svg deleted file mode 100644 index 57f7440a..00000000 --- a/resources/ui/ground_assets/lha_blue_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_red_alive.svg b/resources/ui/ground_assets/lha_red_alive.svg deleted file mode 100644 index 4291cd24..00000000 --- a/resources/ui/ground_assets/lha_red_alive.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_red_damaged.svg b/resources/ui/ground_assets/lha_red_damaged.svg deleted file mode 100644 index 51929837..00000000 --- a/resources/ui/ground_assets/lha_red_damaged.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_red_destination.svg b/resources/ui/ground_assets/lha_red_destination.svg deleted file mode 100644 index 9c971136..00000000 --- a/resources/ui/ground_assets/lha_red_destination.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/ground_assets/lha_red_destroyed.svg b/resources/ui/ground_assets/lha_red_destroyed.svg deleted file mode 100644 index d8da7a5e..00000000 --- a/resources/ui/ground_assets/lha_red_destroyed.svg +++ /dev/null @@ -1 +0,0 @@ -LHA \ No newline at end of file diff --git a/resources/ui/map/canvas.html b/resources/ui/map/canvas.html index 965d4454..ab270ef6 100644 --- a/resources/ui/map/canvas.html +++ b/resources/ui/map/canvas.html @@ -18,6 +18,8 @@ + +