Added loadout editor to mission preparation screen.

This commit is contained in:
Khopa
2019-10-19 16:14:40 +02:00
parent 48a40f2511
commit 9f319ab99a
15 changed files with 180 additions and 44 deletions

View File

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

View File

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

View File

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

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

View 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

View File

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

View File

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