mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Added loadout editor to mission preparation screen.
This commit is contained in:
@@ -26,9 +26,7 @@ class QChooseAirbase(QGroupBox):
|
||||
|
||||
def _on_airbase_selected(self):
|
||||
selected = self.depart_from.currentText()
|
||||
print("Airbase changed to : " + selected)
|
||||
self.selected_airbase_changed.emit(selected)
|
||||
print("Airbase changed to : " + selected)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ class QFlightPlanner(QTabWidget):
|
||||
def __init__(self, flight: Flight, game: Game):
|
||||
super(QFlightPlanner, self).__init__()
|
||||
self.general_settings_tab = QGeneralFlightSettingsTab(flight, game)
|
||||
self.payload_tab = QFlightPayloadTab(flight)
|
||||
self.payload_tab = QFlightPayloadTab(flight, game)
|
||||
self.waypoint_tab = QFlightWaypointTab(flight)
|
||||
self.addTab(self.general_settings_tab, "General Flight settings")
|
||||
self.addTab(self.payload_tab, "Payload")
|
||||
|
||||
@@ -1,16 +1,19 @@
|
||||
from PySide2.QtWidgets import QFrame, QGridLayout, QLabel
|
||||
from PySide2.QtWidgets import QFrame, QGridLayout
|
||||
|
||||
from game import Game
|
||||
from gen.flights.flight import Flight
|
||||
from qt_ui.windows.mission.flight.payload.QLoadoutEditor import QLoadoutEditor
|
||||
|
||||
|
||||
class QFlightPayloadTab(QFrame):
|
||||
|
||||
def __init__(self, flight: Flight):
|
||||
def __init__(self, flight: Flight, game: Game):
|
||||
super(QFlightPayloadTab, self).__init__()
|
||||
self.flight = flight
|
||||
self.payload_editor = QLoadoutEditor(flight, game)
|
||||
self.init_ui()
|
||||
|
||||
def init_ui(self):
|
||||
layout = QGridLayout()
|
||||
layout.addWidget(QLabel("Coming in two weeks"))
|
||||
layout.addWidget(self.payload_editor)
|
||||
self.setLayout(layout)
|
||||
|
||||
33
qt_ui/windows/mission/flight/payload/QLoadoutEditor.py
Normal file
33
qt_ui/windows/mission/flight/payload/QLoadoutEditor.py
Normal file
@@ -0,0 +1,33 @@
|
||||
import inspect
|
||||
|
||||
from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout, QVBoxLayout, QSizePolicy
|
||||
|
||||
from qt_ui.windows.mission.flight.payload.QPylonEditor import QPylonEditor
|
||||
|
||||
|
||||
class QLoadoutEditor(QGroupBox):
|
||||
|
||||
def __init__(self, flight, game):
|
||||
super(QLoadoutEditor, self).__init__("Use custom loadout")
|
||||
self.flight = flight
|
||||
self.game = game
|
||||
self.setCheckable(True)
|
||||
self.setChecked(flight.use_custom_loadout)
|
||||
|
||||
self.toggled.connect(self.on_toggle)
|
||||
|
||||
layout = QGridLayout()
|
||||
|
||||
pylons = [v for v in self.flight.unit_type.__dict__.values() if inspect.isclass(v) and v.__name__.startswith("Pylon")]
|
||||
for i, pylon in enumerate(pylons):
|
||||
label = QLabel("<b>{}</b>".format(pylon.__name__[len("Pylon"):]))
|
||||
label.setSizePolicy(QSizePolicy(QSizePolicy.Fixed,QSizePolicy.Fixed))
|
||||
layout.addWidget(label, i, 0)
|
||||
layout.addWidget(QPylonEditor(flight, pylon, i+1), i, 1)
|
||||
|
||||
self.setLayout(layout)
|
||||
|
||||
def on_toggle(self):
|
||||
self.flight.use_custom_loadout = self.isChecked()
|
||||
|
||||
|
||||
35
qt_ui/windows/mission/flight/payload/QPylonEditor.py
Normal file
35
qt_ui/windows/mission/flight/payload/QPylonEditor.py
Normal file
@@ -0,0 +1,35 @@
|
||||
import logging
|
||||
|
||||
from PySide2.QtWidgets import QWidget, QSpinBox, QComboBox
|
||||
|
||||
|
||||
class QPylonEditor(QComboBox):
|
||||
|
||||
def __init__(self, flight, pylon, pylon_number):
|
||||
super(QPylonEditor, self).__init__()
|
||||
self.pylon = pylon
|
||||
self.pylon_number = pylon_number
|
||||
self.flight = flight
|
||||
|
||||
possible_loadout = [i for i in self.pylon.__dict__.keys() if i[:1] != '_']
|
||||
|
||||
if not str(self.pylon_number) in self.flight.loadout.keys():
|
||||
self.flight.loadout[str(self.pylon_number)] = ""
|
||||
|
||||
self.addItem("None")
|
||||
for i,k in enumerate(possible_loadout):
|
||||
self.addItem(str(k))
|
||||
if self.flight.loadout[str(self.pylon_number)] == str(k):
|
||||
self.setCurrentIndex(i + 1)
|
||||
|
||||
self.currentTextChanged.connect(self.on_pylon_change)
|
||||
|
||||
def on_pylon_change(self):
|
||||
selected = self.currentText()
|
||||
if selected == "None":
|
||||
logging.info("Pylon " + str(self.pylon_number) + " emptied")
|
||||
self.flight.loadout[str(self.pylon_number)] = ""
|
||||
else:
|
||||
logging.info("Pylon " + str(self.pylon_number) + " changed to " + selected)
|
||||
self.flight.loadout[str(self.pylon_number)] = selected
|
||||
|
||||
@@ -2,11 +2,12 @@ from typing import List
|
||||
|
||||
from PySide2.QtGui import QStandardItem
|
||||
|
||||
from gen.flights.flight import FlightWaypoint
|
||||
|
||||
|
||||
class QWaypointItem(QStandardItem):
|
||||
|
||||
def __init__(self, point: List[int]):
|
||||
def __init__(self, point: FlightWaypoint):
|
||||
super(QWaypointItem, self).__init__()
|
||||
|
||||
self.setText("X: " + str(int(point[0])) + "; Y: " + str(int(point[1])) + "; Alt: " + str(int(point[2])) + "m")
|
||||
self.setText('{0: <16}'.format(point.description) + " -- [X: " + str(int(point.x)) + "; Y: " + str(int(point.y)) + "; Alt: " + str(int(point.alt)) + "m]")
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
from PySide2.QtGui import QStandardItemModel
|
||||
from PySide2.QtWidgets import QListView
|
||||
|
||||
from gen.flights.flight import Flight
|
||||
from gen.flights.flight import Flight, FlightWaypoint
|
||||
from qt_ui.windows.mission.flight.waypoints.QFlightWaypointItem import QWaypointItem
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ class QFlightWaypointList(QListView):
|
||||
self.setModel(self.model)
|
||||
self.flight = flight
|
||||
|
||||
self.model.appendRow(QWaypointItem([flight.from_cp.position.x, flight.from_cp.position.y, 0]))
|
||||
takeoff = FlightWaypoint(flight.from_cp.position.x, flight.from_cp.position.y, 0)
|
||||
takeoff.description = "Take Off"
|
||||
self.model.appendRow(QWaypointItem(takeoff))
|
||||
for i, point in enumerate(self.flight.points):
|
||||
self.model.appendRow(QWaypointItem(point))
|
||||
Reference in New Issue
Block a user