From be67d6dbc68bb015bfc6fe2e47e65f955cadd3cf Mon Sep 17 00:00:00 2001 From: Benjamin Fischer Date: Fri, 18 Mar 2022 08:06:41 +0100 Subject: [PATCH] Fix custom waypoint addition/removal. Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2063. --- .../QPredefinedWaypointSelectionComboBox.py | 30 +++++++++++-------- .../flight/waypoints/QFlightWaypointTab.py | 16 +++++----- 2 files changed, 25 insertions(+), 21 deletions(-) diff --git a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py index 2726e836..0975c476 100644 --- a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py +++ b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py @@ -71,10 +71,11 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): pos = FrontLineConflictDescription.frontline_position( front_line, self.game.theater )[0] + wptname = f"Frontline {front_line.name} [CAS]" wpt = FlightWaypoint( - FlightWaypointType.CUSTOM, pos, Distance.from_meters(800) + wptname, FlightWaypointType.CUSTOM, pos, Distance.from_meters(800) ) - wpt.name = f"Frontline {front_line.name} [CAS]" + wpt.alt_type = "RADIO" wpt.pretty_name = wpt.name wpt.description = "Frontline" @@ -90,12 +91,12 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): ground_object, BuildingGroundObject ): wpt = FlightWaypoint( + ground_object.waypoint_name, FlightWaypointType.CUSTOM, ground_object.position, Distance.from_meters(0), ) wpt.alt_type = "RADIO" - wpt.name = ground_object.waypoint_name wpt.pretty_name = wpt.name wpt.obj_name = ground_object.obj_name wpt.targets.append(ground_object) @@ -116,13 +117,7 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): ): for g in ground_object.groups: for j, u in enumerate(g.units): - wpt = FlightWaypoint( - FlightWaypointType.CUSTOM, - u.position, - Distance.from_meters(0), - ) - wpt.alt_type = "RADIO" - wpt.name = wpt.name = ( + wptname = ( "[" + str(ground_object.obj_name) + "] : " @@ -130,7 +125,14 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): + " #" + str(j) ) - wpt.pretty_name = wpt.name + wpt = FlightWaypoint( + wptname, + FlightWaypointType.CUSTOM, + u.position, + Distance.from_meters(0), + ) + wpt.alt_type = "RADIO" + wpt.pretty_name = wptname wpt.targets.append(u) wpt.obj_name = ground_object.obj_name wpt.waypoint_type = FlightWaypointType.CUSTOM @@ -146,10 +148,12 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): self.include_friendly and cp.captured ): wpt = FlightWaypoint( - FlightWaypointType.CUSTOM, cp.position, Distance.from_meters(0) + cp.name, + FlightWaypointType.CUSTOM, + cp.position, + Distance.from_meters(0), ) wpt.alt_type = "RADIO" - wpt.name = cp.name if cp.captured: wpt.description = ( "Position of " + cp.name + " [Friendly Airbase]" diff --git a/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py index 36646445..e368c098 100644 --- a/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py +++ b/qt_ui/windows/mission/flight/waypoints/QFlightWaypointTab.py @@ -1,5 +1,5 @@ import logging -from typing import Iterable, List, Optional +from typing import Iterable, List, Optional, Any from PySide2.QtCore import Signal from PySide2.QtWidgets import ( @@ -13,7 +13,8 @@ from PySide2.QtWidgets import ( from game import Game from game.ato.flight import Flight -from game.ato.flightplans.custom import CustomFlightPlan +from game.ato.flightplans.custom import CustomFlightPlan, CustomLayout +from game.ato.flightplans.flightplan import FlightPlan from game.ato.flightplans.flightplanbuilder import FlightPlanBuilder from game.ato.flightplans.formationattack import FormationAttackFlightPlan from game.ato.flightplans.planningerror import PlanningError @@ -113,7 +114,7 @@ class QFlightWaypointTab(QFrame): self.degrade_to_custom_flight_plan() assert isinstance(self.flight.flight_plan, CustomFlightPlan) - self.flight.flight_plan.custom_waypoints.remove(waypoint) + self.flight.flight_plan.layout.custom_waypoints.remove(waypoint) def on_fast_waypoint(self): self.subwindow = QPredefinedWaypointSelectionWindow( @@ -127,7 +128,7 @@ class QFlightWaypointTab(QFrame): return self.degrade_to_custom_flight_plan() assert isinstance(self.flight.flight_plan, CustomFlightPlan) - self.flight.flight_plan.custom_waypoints.extend(waypoints) + self.flight.flight_plan.layout.custom_waypoints.extend(waypoints) self.flight_waypoint_list.update_list() self.on_change() @@ -135,15 +136,14 @@ class QFlightWaypointTab(QFrame): rtb = self.planner.generate_rtb_waypoint(self.flight, self.flight.from_cp) self.degrade_to_custom_flight_plan() assert isinstance(self.flight.flight_plan, CustomFlightPlan) - self.flight.flight_plan.custom_waypoints.append(rtb) + self.flight.flight_plan.layout.custom_waypoints.append(rtb) self.flight_waypoint_list.update_list() self.on_change() def degrade_to_custom_flight_plan(self) -> None: if not isinstance(self.flight.flight_plan, CustomFlightPlan): - self.flight.flight_plan = CustomFlightPlan( - flight=self.flight, - waypoints=self.flight.flight_plan.waypoints, + self.flight.flight_plan: FlightPlan[Any] = CustomFlightPlan( + self, CustomLayout(custom_waypoints=self.flight.flight_plan.waypoints) ) def confirm_recreate(self, task: FlightType) -> None: