mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Follow-up on flight TOT offset
This commit is contained in:
parent
529eea0c01
commit
c559d6e2be
@ -44,7 +44,7 @@ class CustomFlightPlan(FlightPlan[CustomLayout]):
|
||||
|
||||
def tot_for_waypoint(self, waypoint: FlightWaypoint) -> timedelta | None:
|
||||
if waypoint == self.tot_waypoint:
|
||||
return self.package.time_over_target
|
||||
return self.package.time_over_target + self.tot_offset
|
||||
return None
|
||||
|
||||
def depart_time_for_waypoint(self, waypoint: FlightWaypoint) -> timedelta | None:
|
||||
|
||||
@ -21,7 +21,6 @@ from .planningerror import PlanningError
|
||||
from ..flightwaypointtype import FlightWaypointType
|
||||
from ..starttype import StartType
|
||||
from ..traveltime import GroundSpeed, TravelTime
|
||||
from ...savecompat import has_save_compat_for
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from game.dcs.aircrafttype import FuelConsumption
|
||||
@ -68,7 +67,6 @@ class FlightPlan(ABC, Generic[LayoutT]):
|
||||
self.layout = layout
|
||||
self.tot_offset = self.default_tot_offset()
|
||||
|
||||
@has_save_compat_for(7)
|
||||
def __setstate__(self, state: dict[str, Any]) -> None:
|
||||
if "tot_offset" not in state:
|
||||
state["tot_offset"] = self.default_tot_offset()
|
||||
|
||||
@ -97,9 +97,9 @@ class FormationFlightPlan(LoiterFlightPlan, ABC):
|
||||
|
||||
def tot_for_waypoint(self, waypoint: FlightWaypoint) -> timedelta | None:
|
||||
if waypoint == self.layout.join:
|
||||
return self.join_time
|
||||
return self.join_time + self.tot_offset
|
||||
elif waypoint == self.layout.split:
|
||||
return self.split_time
|
||||
return self.split_time + self.tot_offset
|
||||
return None
|
||||
|
||||
@property
|
||||
|
||||
@ -30,7 +30,7 @@ class LoiterFlightPlan(StandardFlightPlan[Any], ABC):
|
||||
|
||||
def depart_time_for_waypoint(self, waypoint: FlightWaypoint) -> timedelta | None:
|
||||
if waypoint == self.layout.hold:
|
||||
return self.push_time
|
||||
return self.push_time + self.tot_offset
|
||||
return None
|
||||
|
||||
def travel_time_between_waypoints(
|
||||
|
||||
@ -73,7 +73,7 @@ class PatrollingFlightPlan(StandardFlightPlan[LayoutT], UiZoneDisplay, ABC):
|
||||
|
||||
@property
|
||||
def patrol_start_time(self) -> timedelta:
|
||||
return self.package.time_over_target
|
||||
return self.package.time_over_target + self.tot_offset
|
||||
|
||||
@property
|
||||
def patrol_end_time(self) -> timedelta:
|
||||
|
||||
@ -66,14 +66,14 @@ class SweepFlightPlan(LoiterFlightPlan):
|
||||
|
||||
def tot_for_waypoint(self, waypoint: FlightWaypoint) -> timedelta | None:
|
||||
if waypoint == self.layout.sweep_start:
|
||||
return self.sweep_start_time
|
||||
return self.sweep_start_time + self.tot_offset
|
||||
if waypoint == self.layout.sweep_end:
|
||||
return self.sweep_end_time
|
||||
return self.sweep_end_time + self.tot_offset
|
||||
return None
|
||||
|
||||
def depart_time_for_waypoint(self, waypoint: FlightWaypoint) -> timedelta | None:
|
||||
if waypoint == self.layout.hold:
|
||||
return self.push_time
|
||||
return self.push_time + self.tot_offset
|
||||
return None
|
||||
|
||||
@property
|
||||
|
||||
@ -13,9 +13,12 @@ class QFlightPlanner(QTabWidget):
|
||||
def __init__(self, package_model: PackageModel, flight: Flight, gm: GameModel):
|
||||
super().__init__()
|
||||
|
||||
self.general_settings_tab = QGeneralFlightSettingsTab(gm, package_model, flight)
|
||||
self.payload_tab = QFlightPayloadTab(flight, gm.game)
|
||||
self.waypoint_tab = QFlightWaypointTab(gm.game, package_model.package, flight)
|
||||
|
||||
self.general_settings_tab = QGeneralFlightSettingsTab(
|
||||
gm, package_model, flight, self.waypoint_tab.flight_waypoint_list
|
||||
)
|
||||
self.waypoint_tab.loadout_changed.connect(self.payload_tab.reload_from_flight)
|
||||
self.addTab(self.general_settings_tab, "General Flight settings")
|
||||
self.addTab(self.payload_tab, "Payload")
|
||||
|
||||
@ -18,14 +18,24 @@ from game.ato.flightplans.planningerror import PlanningError
|
||||
from qt_ui.models import PackageModel
|
||||
from qt_ui.widgets.QLabeledWidget import QLabeledWidget
|
||||
from qt_ui.widgets.combos.QArrivalAirfieldSelector import QArrivalAirfieldSelector
|
||||
from qt_ui.windows.mission.flight.waypoints.QFlightWaypointList import (
|
||||
QFlightWaypointList,
|
||||
)
|
||||
|
||||
|
||||
class FlightPlanPropertiesGroup(QGroupBox):
|
||||
def __init__(self, game: Game, package_model: PackageModel, flight: Flight) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
game: Game,
|
||||
package_model: PackageModel,
|
||||
flight: Flight,
|
||||
flight_wpt_list: QFlightWaypointList,
|
||||
) -> None:
|
||||
super().__init__("Flight plan properties")
|
||||
self.game = game
|
||||
self.package_model = package_model
|
||||
self.flight = flight
|
||||
self.flight_wpt_list = flight_wpt_list
|
||||
|
||||
layout = QVBoxLayout()
|
||||
|
||||
@ -51,10 +61,10 @@ class FlightPlanPropertiesGroup(QGroupBox):
|
||||
|
||||
tot_offset_layout.addWidget(QLabel("TOT Offset (minutes:seconds)"))
|
||||
tot_offset_layout.addStretch()
|
||||
negative_offset_checkbox = QCheckBox("Ahead of package")
|
||||
negative_offset_checkbox.setChecked(negative)
|
||||
negative_offset_checkbox.toggled.connect(self.toggle_negative_offset)
|
||||
tot_offset_layout.addWidget(negative_offset_checkbox)
|
||||
self.negative_offset_checkbox = QCheckBox("Ahead of package")
|
||||
self.negative_offset_checkbox.setChecked(negative)
|
||||
self.negative_offset_checkbox.toggled.connect(self.toggle_negative_offset)
|
||||
tot_offset_layout.addWidget(self.negative_offset_checkbox)
|
||||
|
||||
self.tot_offset_spinner = QTimeEdit(QTime(hours, minutes, seconds))
|
||||
self.tot_offset_spinner.setMaximumTime(QTime(59, 0))
|
||||
@ -93,6 +103,7 @@ class FlightPlanPropertiesGroup(QGroupBox):
|
||||
# is an invalid state for calling anything in TotEstimator.
|
||||
return
|
||||
self.departure_time.setText(f"At T+{self.flight.flight_plan.startup_time()}")
|
||||
self.flight_wpt_list.update_list()
|
||||
|
||||
def set_divert(self, index: int) -> None:
|
||||
old_divert = self.flight.divert
|
||||
@ -114,6 +125,8 @@ class FlightPlanPropertiesGroup(QGroupBox):
|
||||
self.flight.flight_plan.tot_offset = timedelta(
|
||||
hours=offset.hour(), minutes=offset.minute(), seconds=offset.second()
|
||||
)
|
||||
if self.negative_offset_checkbox.isChecked():
|
||||
return self.toggle_negative_offset()
|
||||
self.update_departure_time()
|
||||
|
||||
def toggle_negative_offset(self) -> None:
|
||||
|
||||
@ -13,18 +13,29 @@ from qt_ui.windows.mission.flight.settings.QFlightStartType import QFlightStartT
|
||||
from qt_ui.windows.mission.flight.settings.QFlightTypeTaskInfo import (
|
||||
QFlightTypeTaskInfo,
|
||||
)
|
||||
from qt_ui.windows.mission.flight.waypoints.QFlightWaypointList import (
|
||||
QFlightWaypointList,
|
||||
)
|
||||
|
||||
|
||||
class QGeneralFlightSettingsTab(QFrame):
|
||||
on_flight_settings_changed = Signal()
|
||||
|
||||
def __init__(self, game: GameModel, package_model: PackageModel, flight: Flight):
|
||||
def __init__(
|
||||
self,
|
||||
game: GameModel,
|
||||
package_model: PackageModel,
|
||||
flight: Flight,
|
||||
flight_wpt_list: QFlightWaypointList,
|
||||
):
|
||||
super().__init__()
|
||||
|
||||
widgets = [
|
||||
QFlightTypeTaskInfo(flight),
|
||||
QCommsEditor(flight, game),
|
||||
FlightPlanPropertiesGroup(game.game, package_model, flight),
|
||||
FlightPlanPropertiesGroup(
|
||||
game.game, package_model, flight, flight_wpt_list
|
||||
),
|
||||
QFlightSlotEditor(package_model, flight, game.game),
|
||||
QFlightStartType(package_model, flight),
|
||||
QFlightCustomName(flight),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user