diff --git a/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py b/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py index 17f83b0f..607a67a6 100644 --- a/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py +++ b/qt_ui/windows/mission/flight/payload/QFlightPayloadTab.py @@ -18,6 +18,7 @@ from game.ato.flightmember import FlightMember from game.ato.loadouts import Loadout from qt_ui.widgets.QLabeledWidget import QLabeledWidget from .QLoadoutEditor import QLoadoutEditor +from .ownlasercodeinfo import OwnLaserCodeInfo from .propertyeditor import PropertyEditor @@ -149,6 +150,11 @@ class QFlightPayloadTab(QFrame): scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff) layout.addWidget(scroll, stretch=1) + self.own_laser_code_info = OwnLaserCodeInfo( + game, self.member_selector.selected_member + ) + scrolling_layout.addLayout(self.own_laser_code_info) + self.property_editor = PropertyEditor( self.flight, self.member_selector.selected_member ) @@ -188,6 +194,7 @@ class QFlightPayloadTab(QFrame): self.loadout_selector.setCurrentText(member.loadout.name) self.loadout_selector.setDisabled(member.loadout.is_custom) self.payload_editor.set_flight_member(member) + self.own_laser_code_info.set_flight_member(member) if self.member_selector.value() != 0: self.loadout_selector.setDisabled( self.flight.use_same_loadout_for_all_members diff --git a/qt_ui/windows/mission/flight/payload/ownlasercodeinfo.py b/qt_ui/windows/mission/flight/payload/ownlasercodeinfo.py new file mode 100644 index 00000000..246336c9 --- /dev/null +++ b/qt_ui/windows/mission/flight/payload/ownlasercodeinfo.py @@ -0,0 +1,56 @@ +from PySide6.QtCore import Signal +from PySide6.QtWidgets import QWidget, QHBoxLayout, QLabel, QPushButton + +from game import Game +from game.ato.flightmember import FlightMember + + +class OwnLaserCodeInfo(QHBoxLayout): + assigned_laser_code_changed = Signal() + + def __init__( + self, game: Game, flight_member: FlightMember, parent: QWidget | None = None + ) -> None: + super().__init__(parent) + self.game = game + self.flight_member = flight_member + + self.addWidget(QLabel("Assigned laser code:")) + self.addStretch() + + self.code_display = QLabel() + self.addWidget(self.code_display) + + self.alloc_dealloc_button = QPushButton() + self.alloc_dealloc_button.clicked.connect(self.on_alloc_dealloc_clicked) + self.addWidget(self.alloc_dealloc_button) + + self.bind_to_selected_member() + + def set_flight_member(self, flight_member: FlightMember) -> None: + self.flight_member = flight_member + self.bind_to_selected_member() + + def bind_to_selected_member(self) -> None: + if (code := self.flight_member.tgp_laser_code) is not None: + self.alloc_dealloc_button.setEnabled(True) + self.alloc_dealloc_button.setText("Release") + self.code_display.setText(f"{code}") + elif self.flight_member.is_player: + self.alloc_dealloc_button.setText("Assign") + self.alloc_dealloc_button.setEnabled(True) + self.code_display.setText("Not assigned") + else: + self.alloc_dealloc_button.setText("Assign") + self.alloc_dealloc_button.setEnabled(False) + self.code_display.setText("AI does not use laser codes") + + def on_alloc_dealloc_clicked(self) -> None: + if self.flight_member.tgp_laser_code is not None: + self.flight_member.release_tgp_laser_code() + else: + self.flight_member.assign_tgp_laser_code( + self.game.laser_code_registry.alloc_laser_code() + ) + self.bind_to_selected_member() + self.assigned_laser_code_changed.emit()