From 56d7993c8f06f12d64333f86470e69f399e42f80 Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Tue, 22 Dec 2020 13:55:57 -0800 Subject: [PATCH] Improve threat zone display options. --- qt_ui/displayoptions.py | 17 +++++++++++++++-- qt_ui/widgets/map/QLiberationMap.py | 24 ++++++++++++++++-------- qt_ui/windows/QLiberationWindow.py | 11 +++++++---- 3 files changed, 38 insertions(+), 14 deletions(-) diff --git a/qt_ui/displayoptions.py b/qt_ui/displayoptions.py index 4c6ab126..7f7f0cf8 100644 --- a/qt_ui/displayoptions.py +++ b/qt_ui/displayoptions.py @@ -47,6 +47,19 @@ class FlightPathOptions(DisplayGroup): 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 DisplayOptions: ground_objects = DisplayRule("Ground Objects", True) control_points = DisplayRule("Control Points", True) @@ -59,8 +72,8 @@ class DisplayOptions: culling = DisplayRule("Display Culling Zones", False) flight_paths = FlightPathOptions() actual_frontline_pos = DisplayRule("Display Actual Frontline Location", False) - blue_threat_zone = DisplayRule("Display Blue Threat Zones", False) - red_threat_zone = DisplayRule("Display Red Threat Zones", False) + blue_threat_zones = ThreatZoneOptions("Blue") + red_threat_zones = ThreatZoneOptions("Red") @classmethod def menu_items(cls) -> Iterator[Union[DisplayGroup, DisplayRule]]: diff --git a/qt_ui/widgets/map/QLiberationMap.py b/qt_ui/widgets/map/QLiberationMap.py index 41e2d064..f882279e 100644 --- a/qt_ui/widgets/map/QLiberationMap.py +++ b/qt_ui/widgets/map/QLiberationMap.py @@ -43,7 +43,7 @@ from game.weather import TimeOfDay from gen import Conflict from gen.flights.flight import Flight, FlightWaypoint, FlightWaypointType from gen.flights.flightplan import FlightPlan -from qt_ui.displayoptions import DisplayOptions +from qt_ui.displayoptions import DisplayOptions, ThreatZoneOptions from qt_ui.models import GameModel from qt_ui.widgets.map.QFrontLine import QFrontLine from qt_ui.widgets.map.QLiberationScene import QLiberationScene @@ -298,9 +298,18 @@ class QLiberationMap(QGraphicsView): self.draw_shapely_poly(scene, poly, CONST.COLORS["transparent"], brush) def display_threat_zones(self, scene: QGraphicsScene, - player: bool) -> None: + options: ThreatZoneOptions, player: bool) -> None: """Draws the threat zones on the map.""" - threat_poly = self.game.threat_zone_for(player).all + threat_zones = self.game.threat_zone_for(player) + if options.all: + threat_poly = threat_zones.all + elif options.aircraft: + threat_poly = threat_zones.airbases + elif options.air_defenses: + threat_poly = threat_zones.air_defenses + else: + return + if isinstance(threat_poly, MultiPolygon): polys = threat_poly.geoms else: @@ -364,11 +373,10 @@ class QLiberationMap(QGraphicsView): if DisplayOptions.culling and self.game.settings.perf_culling: self.display_culling(scene) - if DisplayOptions.blue_threat_zone: - self.display_threat_zones(scene, player=True) - - if DisplayOptions.red_threat_zone: - self.display_threat_zones(scene, player=False) + self.display_threat_zones(scene, DisplayOptions.blue_threat_zones, + player=True) + self.display_threat_zones(scene, DisplayOptions.red_threat_zones, + player=False) for cp in self.game.theater.controlpoints: diff --git a/qt_ui/windows/QLiberationWindow.py b/qt_ui/windows/QLiberationWindow.py index 14a2925d..bd12559e 100644 --- a/qt_ui/windows/QLiberationWindow.py +++ b/qt_ui/windows/QLiberationWindow.py @@ -168,18 +168,21 @@ class QLiberationWindow(QMainWindow): displayMenu = self.menu.addMenu("&Display") - last_was_group = True + + last_was_group = False for item in DisplayOptions.menu_items(): if isinstance(item, DisplayRule): + if last_was_group: + displayMenu.addSeparator() + self.display_bar.addSeparator() action = self.make_display_rule_action(item) displayMenu.addAction(action) if action.icon(): self.display_bar.addAction(action) last_was_group = False elif isinstance(item, DisplayGroup): - if not last_was_group: - displayMenu.addSeparator() - self.display_bar.addSeparator() + displayMenu.addSeparator() + self.display_bar.addSeparator() group = QActionGroup(displayMenu) for display_rule in item: action = self.make_display_rule_action(display_rule, group)