Disallow squadrons from disabling mission types.

After this change, players will always have the final say in what
missions a squadron can be assigned to. Squadrons are not able to
influence the default auto-assignable missions either because that
property is always overridden by the campaign's air wing configuration
(the primary and secondary task properties). The `mission-types` field
of the squadron definition has been removed since it is no longer
capable of influencing anything. I haven't bothered cleaning up the now
useless data in all the existing squadrons though.

Fixes https://github.com/dcs-liberation/dcs_liberation/issues/2785.
This commit is contained in:
Dan Albert
2023-04-17 19:21:10 -07:00
parent 1ac36d03da
commit 94b8aa7213
9 changed files with 49 additions and 80 deletions

View File

@@ -44,9 +44,6 @@ class QMissionType:
self, mission_type: FlightType, allowed: bool, auto_assignable: bool
) -> None:
self.flight_type = mission_type
self.allowed_checkbox = QCheckBox()
self.allowed_checkbox.setChecked(allowed)
self.allowed_checkbox.toggled.connect(self.update_auto_assignable)
self.auto_assignable_checkbox = QCheckBox()
self.auto_assignable_checkbox.setEnabled(allowed)
self.auto_assignable_checkbox.setChecked(auto_assignable)
@@ -56,10 +53,6 @@ class QMissionType:
if not checked:
self.auto_assignable_checkbox.setChecked(False)
@property
def allowed(self) -> bool:
return self.allowed_checkbox.isChecked()
@property
def auto_assignable(self) -> bool:
return self.auto_assignable_checkbox.isChecked()
@@ -72,27 +65,20 @@ class MissionTypeControls(QGridLayout):
self.mission_types: list[QMissionType] = []
self.addWidget(QLabel("Mission Type"), 0, 0)
self.addWidget(QLabel("Allow"), 0, 1)
self.addWidget(QLabel("Auto-Assign"), 0, 2)
self.addWidget(QLabel("Auto-Assign"), 0, 1)
for i, task in enumerate(FlightType):
if task is FlightType.FERRY:
# Not plannable so just skip it.
continue
allowed = task in squadron.mission_types
auto_assignable = task in squadron.auto_assignable_mission_types
mission_type = QMissionType(task, allowed, auto_assignable)
mission_type = QMissionType(
task, squadron.capable_of(task), auto_assignable
)
self.mission_types.append(mission_type)
self.addWidget(QLabel(task.value), i + 1, 0)
self.addWidget(mission_type.allowed_checkbox, i + 1, 1)
self.addWidget(mission_type.auto_assignable_checkbox, i + 1, 2)
@property
def allowed_mission_types(self) -> Iterator[FlightType]:
for mission_type in self.mission_types:
if mission_type.allowed:
yield mission_type.flight_type
self.addWidget(mission_type.auto_assignable_checkbox, i + 1, 1)
@property
def auto_assignable_mission_types(self) -> Iterator[FlightType]:
@@ -233,10 +219,6 @@ class SquadronConfigurationBox(QGroupBox):
self.squadron.pilot_pool = [
Pilot(n, player=True) for n in player_names
] + self.squadron.pilot_pool
# Set the allowed mission types
self.squadron.set_allowed_mission_types(
set(self.mission_types.allowed_mission_types)
)
# Also update the auto assignable mission types
self.squadron.set_auto_assignable_mission_types(
set(self.mission_types.auto_assignable_mission_types)

View File

@@ -77,11 +77,12 @@ class AutoAssignedTaskControls(QVBoxLayout):
return callback
for task in squadron_model.squadron.mission_types:
checkbox = QCheckBox(text=task.value)
checkbox.setChecked(squadron_model.is_auto_assignable(task))
checkbox.toggled.connect(make_callback(task))
self.addWidget(checkbox)
for task in FlightType:
if self.squadron_model.squadron.capable_of(task):
checkbox = QCheckBox(text=task.value)
checkbox.setChecked(squadron_model.is_auto_assignable(task))
checkbox.toggled.connect(make_callback(task))
self.addWidget(checkbox)
self.addStretch()

View File

@@ -48,7 +48,7 @@ class SquadronSelector(QComboBox):
return
for squadron in self.air_wing.squadrons_for(aircraft):
if task in squadron.mission_types and squadron.untasked_aircraft:
if squadron.capable_of(task) and squadron.untasked_aircraft:
self.addItem(f"{squadron.location}: {squadron}", squadron)
if self.count() == 0: