mirror of
https://github.com/dcs-liberation/dcs_liberation.git
synced 2025-11-10 14:22:26 +00:00
BARCAP placement confuses a lot of people but this should make it more
clear.
(cherry picked from commit 208d1b82b5)
127 lines
4.7 KiB
Python
127 lines
4.7 KiB
Python
"""Visibility options for the game map."""
|
|
from dataclasses import dataclass, field
|
|
from typing import Iterator, Optional, Union
|
|
|
|
|
|
@dataclass
|
|
class DisplayRule:
|
|
name: str
|
|
_value: bool
|
|
debug_only: bool = field(default=False)
|
|
|
|
@property
|
|
def menu_text(self) -> str:
|
|
return self.name
|
|
|
|
@property
|
|
def value(self) -> bool:
|
|
return self._value
|
|
|
|
@value.setter
|
|
def value(self, value: bool) -> None:
|
|
from qt_ui.widgets.map.QLiberationMap import QLiberationMap
|
|
|
|
self._value = value
|
|
if QLiberationMap.instance is not None:
|
|
QLiberationMap.instance.reload_scene()
|
|
QLiberationMap.instance.update()
|
|
|
|
def __bool__(self) -> bool:
|
|
return self.value
|
|
|
|
|
|
class DisplayGroup:
|
|
def __init__(self, name: Optional[str], debug_only: bool = False) -> None:
|
|
self.name = name
|
|
self.debug_only = debug_only
|
|
|
|
def __iter__(self) -> Iterator[DisplayRule]:
|
|
# Python 3.6 enforces that __dict__ is order preserving by default.
|
|
for value in self.__dict__.values():
|
|
if isinstance(value, DisplayRule):
|
|
yield value
|
|
|
|
|
|
class FlightPathOptions(DisplayGroup):
|
|
def __init__(self) -> None:
|
|
super().__init__("Flight Paths")
|
|
self.hide = DisplayRule("Hide Flight Paths", False)
|
|
self.only_selected = DisplayRule("Show Selected Flight Path", False)
|
|
self.all = DisplayRule("Show All Flight Paths", True)
|
|
|
|
|
|
class ThreatZoneOptions(DisplayGroup):
|
|
def __init__(self, coalition_name: str) -> None:
|
|
super().__init__(f"{coalition_name} Threat Zones")
|
|
self.none = DisplayRule(f"Hide {coalition_name.lower()} threat zones", True)
|
|
self.all = DisplayRule(
|
|
f"Show full {coalition_name.lower()} threat zones", False
|
|
)
|
|
self.aircraft = DisplayRule(
|
|
f"Show {coalition_name.lower()} aircraft threat tones", False
|
|
)
|
|
self.air_defenses = DisplayRule(
|
|
f"Show {coalition_name.lower()} air defenses threat zones", False
|
|
)
|
|
|
|
|
|
class NavMeshOptions(DisplayGroup):
|
|
def __init__(self) -> None:
|
|
super().__init__("Navmeshes", debug_only=True)
|
|
self.hide = DisplayRule("DEBUG Hide Navmeshes", True)
|
|
self.blue_navmesh = DisplayRule("DEBUG Show blue navmesh", False)
|
|
self.red_navmesh = DisplayRule("DEBUG Show red navmesh", False)
|
|
|
|
|
|
class PathDebugFactionOptions(DisplayGroup):
|
|
def __init__(self) -> None:
|
|
super().__init__("Faction for path debugging", debug_only=True)
|
|
self.blue = DisplayRule("Debug blue paths", True)
|
|
self.red = DisplayRule("Debug red paths", False)
|
|
|
|
|
|
class PathDebugOptions(DisplayGroup):
|
|
def __init__(self) -> None:
|
|
super().__init__("Shortest paths", debug_only=True)
|
|
self.hide = DisplayRule("DEBUG Hide paths", True)
|
|
self.shortest_path = DisplayRule("DEBUG Show shortest path", False)
|
|
self.barcap = DisplayRule("DEBUG Show BARCAP plan", False)
|
|
self.cas = DisplayRule("DEBUG Show CAS plan", False)
|
|
self.sweep = DisplayRule("DEBUG Show fighter sweep plan", False)
|
|
self.strike = DisplayRule("DEBUG Show strike plan", False)
|
|
self.tarcap = DisplayRule("DEBUG Show TARCAP plan", False)
|
|
|
|
|
|
class DisplayOptions:
|
|
ground_objects = DisplayRule("Ground Objects", True)
|
|
control_points = DisplayRule("Control Points", True)
|
|
lines = DisplayRule("Lines", True)
|
|
sam_ranges = DisplayRule("Ally SAM Threat Range", False)
|
|
enemy_sam_ranges = DisplayRule("Enemy SAM Threat Range", True)
|
|
detection_range = DisplayRule("SAM Detection Range", False)
|
|
map_poly = DisplayRule("Map Polygon Debug Mode", False)
|
|
waypoint_info = DisplayRule("Waypoint Information", True)
|
|
culling = DisplayRule("Display Culling Zones", False)
|
|
actual_frontline_pos = DisplayRule("Display Actual Frontline Location", False)
|
|
barcap_commit_range = DisplayRule("Display selected BARCAP commit range", True)
|
|
flight_paths = FlightPathOptions()
|
|
blue_threat_zones = ThreatZoneOptions("Blue")
|
|
red_threat_zones = ThreatZoneOptions("Red")
|
|
navmeshes = NavMeshOptions()
|
|
path_debug_faction = PathDebugFactionOptions()
|
|
path_debug = PathDebugOptions()
|
|
|
|
@classmethod
|
|
def menu_items(cls) -> Iterator[Union[DisplayGroup, DisplayRule]]:
|
|
debug = False # Set to True to enable debug options.
|
|
# Python 3.6 enforces that __dict__ is order preserving by default.
|
|
for value in cls.__dict__.values():
|
|
if isinstance(value, DisplayRule):
|
|
if value.debug_only and not debug:
|
|
continue
|
|
yield value
|
|
elif isinstance(value, DisplayGroup):
|
|
if value.debug_only and not debug:
|
|
continue
|
|
yield value
|