Follow-up on flight TOT offset

This commit is contained in:
Raffson 2023-06-04 01:43:48 +02:00
parent 529eea0c01
commit c559d6e2be
No known key found for this signature in database
GPG Key ID: B0402B2C9B764D99
9 changed files with 43 additions and 18 deletions

View File

@ -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:

View File

@ -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()

View File

@ -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

View File

@ -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(

View File

@ -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:

View File

@ -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

View File

@ -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")

View File

@ -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:

View File

@ -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),