Added possibility to setup parking slot type for players' flight.

This commit is contained in:
Khopa 2019-10-23 17:01:41 +02:00
parent adf1f8db8c
commit 27e3cf8ac5
6 changed files with 73 additions and 10 deletions

View File

@ -330,15 +330,31 @@ class AircraftConflictGenerator:
def generate_planned_flight(self, cp, country, flight:Flight): def generate_planned_flight(self, cp, country, flight:Flight):
try: try:
group = self._generate_at_airport( if flight.start_type == "In Flight" or flight.client_count == 0:
name=namegen.next_unit_name(country, cp.id, flight.unit_type), group = self._generate_group(
side=country, name=namegen.next_unit_name(country, cp.id, flight.unit_type),
unit_type=flight.unit_type, side=country,
count=flight.count, unit_type=flight.unit_type,
client_count=0, count=flight.count,
airport=self.m.terrain.airport_by_id(cp.at.id), client_count=0,
start_type=StartType.Runway) at=cp.position)
else:
st = StartType.Runway
if flight.start_type == "Cold":
st = StartType.Cold
elif flight.start_type == "Warm":
st = StartType.Warm
group = self._generate_at_airport(
name=namegen.next_unit_name(country, cp.id, flight.unit_type),
side=country,
unit_type=flight.unit_type,
count=flight.count,
client_count=0,
airport=self.m.terrain.airport_by_id(cp.at.id),
start_type=st)
except Exception: except Exception:
# Generated when there is no place on Runway or on Parking Slots
group = self._generate_group( group = self._generate_group(
name=namegen.next_unit_name(country, cp.id, flight.unit_type), name=namegen.next_unit_name(country, cp.id, flight.unit_type),
side=country, side=country,
@ -348,6 +364,7 @@ class AircraftConflictGenerator:
at=cp.position) at=cp.position)
group.points[0].alt = 1500 group.points[0].alt = 1500
group.points[0].ETA = flight.scheduled_in * 60 group.points[0].ETA = flight.scheduled_in * 60
return group return group
def setup_group_as_intercept_flight(self, group, flight): def setup_group_as_intercept_flight(self, group, flight):

View File

@ -1,6 +1,7 @@
from enum import Enum from enum import Enum
from typing import List from typing import List
from dcs.mission import StartType
from dcs.unittype import UnitType from dcs.unittype import UnitType
from game import db from game import db
@ -51,6 +52,7 @@ class Flight:
use_custom_loadout = False use_custom_loadout = False
loadout = {} loadout = {}
preset_loadout_name = "" preset_loadout_name = ""
start_type = "Runway"
# How long before this flight should take off # How long before this flight should take off
scheduled_in = 0 scheduled_in = 0
@ -63,6 +65,7 @@ class Flight:
self.points = [] self.points = []
self.targets = [] self.targets = []
self.loadout = {} self.loadout = {}
self.start_type = "Runway"
def __repr__(self): def __repr__(self):
return self.flight_type.name + " | " + str(self.count) + "x" + db.unit_type_name(self.unit_type) \ return self.flight_type.name + " | " + str(self.count) + "x" + db.unit_type_name(self.unit_type) \

View File

@ -15,7 +15,7 @@ class QMissionPlanning(QDialog):
super(QMissionPlanning, self).__init__() super(QMissionPlanning, self).__init__()
self.game = game self.game = game
self.setWindowFlags(Qt.WindowStaysOnTopHint) self.setWindowFlags(Qt.WindowStaysOnTopHint)
self.setMinimumSize(750, 350) self.setMinimumSize(750, 420)
self.setModal(True) self.setModal(True)
self.setWindowTitle("Mission Preparation") self.setWindowTitle("Mission Preparation")
self.setWindowIcon(EVENT_ICONS[StrikeEvent]) self.setWindowIcon(EVENT_ICONS[StrikeEvent])

View File

@ -1,13 +1,15 @@
from PySide2.QtCore import Signal
from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout from PySide2.QtWidgets import QLabel, QHBoxLayout, QGroupBox, QSpinBox, QGridLayout
class QFlightSlotEditor(QGroupBox): class QFlightSlotEditor(QGroupBox):
changed = Signal()
def __init__(self, flight, game): def __init__(self, flight, game):
super(QFlightSlotEditor, self).__init__("Slots") super(QFlightSlotEditor, self).__init__("Slots")
self.flight = flight self.flight = flight
self.game = game self.game = game
layout = QGridLayout() layout = QGridLayout()
self.aircraft_count = QLabel("Aircraft count :") self.aircraft_count = QLabel("Aircraft count :")
@ -38,11 +40,13 @@ class QFlightSlotEditor(QGroupBox):
def _changed_aircraft_count(self): def _changed_aircraft_count(self):
self.flight.count = int(self.aircraft_count_spinner.value()) self.flight.count = int(self.aircraft_count_spinner.value())
self.changed.emit()
# TODO check if enough aircraft are available # TODO check if enough aircraft are available
def _changed_client_count(self): def _changed_client_count(self):
self.flight.client_count = int(self.client_count_spinner.value()) self.flight.client_count = int(self.client_count_spinner.value())
self._cap_client_count() self._cap_client_count()
self.changed.emit()
def _cap_client_count(self): def _cap_client_count(self):
if self.flight.client_count > self.flight.count: if self.flight.client_count > self.flight.count:

View File

@ -0,0 +1,33 @@
from PySide2.QtWidgets import QGroupBox, QHBoxLayout, QComboBox, QLabel
from dcs.mission import StartType
from gen.flights.flight import Flight
class QFlightStartType(QGroupBox):
def __init__(self, flight:Flight):
super(QFlightStartType, self).__init__()
self.flight = flight
self.layout = QHBoxLayout()
self.start_type_label = QLabel("Start type : ")
self.start_type = QComboBox()
for i, st in enumerate([b for b in ["Cold", "Warm", "Runway", "In Flight"]]):
self.start_type.addItem(st, st)
if flight.start_type == st:
self.start_type.setCurrentIndex(i)
self.start_type.currentTextChanged.connect(self._on_start_type_selected)
self.layout.addWidget(self.start_type_label)
self.layout.addWidget(self.start_type)
self.setLayout(self.layout)
def _on_start_type_selected(self):
selected = self.start_type.currentData()
self.flight.start_type = selected

View File

@ -4,6 +4,7 @@ from gen.flights.flight import Flight
from game import Game from game import Game
from qt_ui.windows.mission.flight.settings.QFlightDepartureEditor import QFlightDepartureEditor from qt_ui.windows.mission.flight.settings.QFlightDepartureEditor import QFlightDepartureEditor
from qt_ui.windows.mission.flight.settings.QFlightSlotEditor import QFlightSlotEditor from qt_ui.windows.mission.flight.settings.QFlightSlotEditor import QFlightSlotEditor
from qt_ui.windows.mission.flight.settings.QFlightStartType import QFlightStartType
from qt_ui.windows.mission.flight.settings.QFlightTypeTaskInfo import QFlightTypeTaskInfo from qt_ui.windows.mission.flight.settings.QFlightTypeTaskInfo import QFlightTypeTaskInfo
@ -20,10 +21,15 @@ class QGeneralFlightSettingsTab(QFrame):
self.flight_info = QFlightTypeTaskInfo(self.flight) self.flight_info = QFlightTypeTaskInfo(self.flight)
self.flight_departure = QFlightDepartureEditor(self.flight) self.flight_departure = QFlightDepartureEditor(self.flight)
self.flight_slots = QFlightSlotEditor(self.flight, self.game) self.flight_slots = QFlightSlotEditor(self.flight, self.game)
self.flight_start_type = QFlightStartType(self.flight)
layout.addWidget(self.flight_info, 0, 0) layout.addWidget(self.flight_info, 0, 0)
layout.addWidget(self.flight_departure, 1, 0) layout.addWidget(self.flight_departure, 1, 0)
layout.addWidget(self.flight_slots, 2, 0) layout.addWidget(self.flight_slots, 2, 0)
layout.addWidget(self.flight_start_type, 3, 0)
vstretch = QVBoxLayout() vstretch = QVBoxLayout()
vstretch.addStretch() vstretch.addStretch()
layout.addLayout(vstretch, 3, 0) layout.addLayout(vstretch, 3, 0)
self.setLayout(layout) self.setLayout(layout)
self.flight_start_type.setEnabled(self.flight.client_count > 0)
self.flight_slots.changed.connect(lambda: self.flight_start_type.setEnabled(self.flight.client_count > 0))