diff --git a/game/ato/flightwaypoint.py b/game/ato/flightwaypoint.py index c863b102..0efa17c1 100644 --- a/game/ato/flightwaypoint.py +++ b/game/ato/flightwaypoint.py @@ -1,6 +1,5 @@ from __future__ import annotations -from collections.abc import Sequence from dataclasses import dataclass, field from datetime import timedelta from typing import Literal, TYPE_CHECKING @@ -12,8 +11,7 @@ from game.theater.theatergroup import TheaterUnit from game.utils import Distance, meters if TYPE_CHECKING: - from game.theater import ControlPoint, MissionTarget - + from game.theater import ControlPoint AltitudeReference = Literal["BARO", "RADIO"] @@ -32,7 +30,7 @@ class FlightWaypoint: # having three names. A short and long form is enough. description: str = "" - targets: Sequence[MissionTarget | TheaterUnit] = field(default_factory=list) + targets: list[TheaterUnit] = field(default_factory=list) obj_name: str = "" pretty_name: str = "" only_for_player: bool = False diff --git a/game/missiongenerator/aircraft/waypoints/strikeingress.py b/game/missiongenerator/aircraft/waypoints/strikeingress.py index e6bbb5a5..89daa74f 100644 --- a/game/missiongenerator/aircraft/waypoints/strikeingress.py +++ b/game/missiongenerator/aircraft/waypoints/strikeingress.py @@ -1,8 +1,9 @@ import copy +from dcs import Point from dcs.planes import B_17G, B_52H, Tu_22M3 from dcs.point import MovingPoint -from dcs.task import Bombing, OptFormation, WeaponType, Expend +from dcs.task import Bombing, Expend, OptFormation, WeaponType from .pydcswaypointbuilder import PydcsWaypointBuilder @@ -21,7 +22,7 @@ class StrikeIngressBuilder(PydcsWaypointBuilder): if not targets: return - center = copy.copy(targets[0].position) + center: Point = copy.copy(targets[0].position) for target in targets[1:]: center += target.position center /= len(targets) diff --git a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py index 0975c476..8b3a2b65 100644 --- a/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py +++ b/qt_ui/widgets/combos/QPredefinedWaypointSelectionComboBox.py @@ -7,7 +7,6 @@ from game.missiongenerator.frontlineconflictdescription import ( FrontLineConflictDescription, ) from game.theater.controlpoint import ControlPointType -from game.theater.theatergroundobject import BuildingGroundObject, IadsGroundObject from game.utils import Distance from qt_ui.widgets.combos.QFilteredComboBox import QFilteredComboBox @@ -81,66 +80,25 @@ class QPredefinedWaypointSelectionComboBox(QFilteredComboBox): wpt.description = "Frontline" i = add_model_item(i, model, wpt.pretty_name, wpt) - if self.include_targets: - for cp in self.game.theater.controlpoints: - if (self.include_enemy and not cp.captured) or ( - self.include_friendly and cp.captured - ): - for ground_object in cp.ground_objects: - if not ground_object.is_dead and isinstance( - ground_object, BuildingGroundObject - ): - wpt = FlightWaypoint( - ground_object.waypoint_name, - FlightWaypointType.CUSTOM, - ground_object.position, - Distance.from_meters(0), - ) - wpt.alt_type = "RADIO" - wpt.pretty_name = wpt.name - wpt.obj_name = ground_object.obj_name - wpt.targets.append(ground_object) - if cp.captured: - wpt.description = "Friendly Building" - else: - wpt.description = "Enemy Building" - i = add_model_item(i, model, wpt.pretty_name, wpt) - - if self.include_units: - for cp in self.game.theater.controlpoints: - if (self.include_enemy and not cp.captured) or ( - self.include_friendly and cp.captured - ): - for ground_object in cp.ground_objects: - if not ground_object.is_dead and ( - isinstance(ground_object, IadsGroundObject) - ): - for g in ground_object.groups: - for j, u in enumerate(g.units): - wptname = ( - "[" - + str(ground_object.obj_name) - + "] : " - + u.name - + " #" - + str(j) - ) - 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 - if cp.captured: - wpt.description = "Friendly unit: " + u.name - else: - wpt.description = "Enemy unit: " + u.name - i = add_model_item(i, model, wpt.pretty_name, wpt) + for tgo in self.game.theater.ground_objects: + for target_idx, target in enumerate(tgo.strike_targets): + wptname = f"[{tgo.obj_name}] : {target.name} #{target_idx}" + wpt = FlightWaypoint( + wptname, + FlightWaypointType.CUSTOM, + target.position, + Distance.from_meters(0), + ) + wpt.alt_type = "RADIO" + wpt.pretty_name = wptname + wpt.targets.append(target) + wpt.obj_name = tgo.obj_name + wpt.waypoint_type = FlightWaypointType.CUSTOM + if tgo.is_friendly(to_player=True): + wpt.description = f"Friendly unit: {target.name}" + else: + wpt.description = f"Enemy unit: {target.name}" + i = add_model_item(i, model, wpt.pretty_name, wpt) if self.include_airbases: for cp in self.game.theater.controlpoints: