mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Add settings UI for auto-ato behavior.
https://github.com/dcs-liberation/dcs_liberation/issues/276 https://github.com/dcs-liberation/dcs_liberation/issues/315
This commit is contained in:
parent
f6ab1aad77
commit
11a8ff7f70
@ -1,10 +1,19 @@
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import timedelta
|
||||
from enum import Enum, unique
|
||||
from typing import Dict, Optional
|
||||
|
||||
from dcs.forcedoptions import ForcedOptions
|
||||
|
||||
|
||||
@unique
|
||||
class AutoAtoBehavior(Enum):
|
||||
Disabled = "Disabled"
|
||||
Never = "Never assign player pilots"
|
||||
Default = "No preference"
|
||||
Prefer = "Prefer player pilots"
|
||||
|
||||
|
||||
@dataclass
|
||||
class Settings:
|
||||
|
||||
@ -37,6 +46,8 @@ class Settings:
|
||||
disable_legacy_aewc: bool = False
|
||||
generate_dark_kneeboard: bool = False
|
||||
invulnerable_player_pilots: bool = True
|
||||
auto_ato_behavior: AutoAtoBehavior = AutoAtoBehavior.Default
|
||||
auto_ato_player_missions_asap: bool = False
|
||||
|
||||
# Performance oriented
|
||||
perf_red_alert_state: bool = True
|
||||
|
||||
@ -23,7 +23,7 @@ from dcs.forcedoptions import ForcedOptions
|
||||
import qt_ui.uiconstants as CONST
|
||||
from game.game import Game
|
||||
from game.infos.information import Information
|
||||
from game.settings import Settings
|
||||
from game.settings import Settings, AutoAtoBehavior
|
||||
from qt_ui.widgets.QLabeledWidget import QLabeledWidget
|
||||
from qt_ui.widgets.spinsliders import TenthsSpinSlider, TimeInputs
|
||||
from qt_ui.windows.GameUpdateSignal import GameUpdateSignal
|
||||
@ -75,6 +75,110 @@ class CheatSettingsBox(QGroupBox):
|
||||
return self.base_capture_cheat_checkbox.isChecked()
|
||||
|
||||
|
||||
class AutoAtoBehaviorSelector(QComboBox):
|
||||
def __init__(self, default: AutoAtoBehavior) -> None:
|
||||
super().__init__()
|
||||
|
||||
for behavior in AutoAtoBehavior:
|
||||
self.addItem(behavior.value, behavior)
|
||||
self.setCurrentText(default.value)
|
||||
|
||||
|
||||
class HqAutomationSettingsBox(QGroupBox):
|
||||
def __init__(self, game: Game) -> None:
|
||||
super().__init__("HQ Automation")
|
||||
self.game = game
|
||||
|
||||
layout = QGridLayout()
|
||||
self.setLayout(layout)
|
||||
|
||||
runway_repair = QCheckBox()
|
||||
runway_repair.setChecked(self.game.settings.automate_runway_repair)
|
||||
runway_repair.toggled.connect(self.set_runway_automation)
|
||||
|
||||
layout.addWidget(QLabel("Automate runway repairs"), 0, 0)
|
||||
layout.addWidget(runway_repair, 0, 1, Qt.AlignRight)
|
||||
|
||||
front_line = QCheckBox()
|
||||
front_line.setChecked(self.game.settings.automate_front_line_reinforcements)
|
||||
front_line.toggled.connect(self.set_front_line_automation)
|
||||
|
||||
layout.addWidget(QLabel("Automate front-line purchases"), 1, 0)
|
||||
layout.addWidget(front_line, 1, 1, Qt.AlignRight)
|
||||
|
||||
self.automate_aircraft_reinforcements = QCheckBox()
|
||||
self.automate_aircraft_reinforcements.setChecked(
|
||||
self.game.settings.automate_aircraft_reinforcements
|
||||
)
|
||||
self.automate_aircraft_reinforcements.toggled.connect(
|
||||
self.set_aircraft_automation
|
||||
)
|
||||
|
||||
layout.addWidget(QLabel("Automate aircraft purchases"), 2, 0)
|
||||
layout.addWidget(self.automate_aircraft_reinforcements, 2, 1, Qt.AlignRight)
|
||||
|
||||
self.auto_ato_behavior = AutoAtoBehaviorSelector(
|
||||
self.game.settings.auto_ato_behavior
|
||||
)
|
||||
self.auto_ato_behavior.currentIndexChanged.connect(self.set_auto_ato_behavior)
|
||||
layout.addWidget(
|
||||
QLabel(
|
||||
"Automatic package planning behavior<br>"
|
||||
"<strong>Aircraft auto-purchase is directed by the auto-planner,<br />"
|
||||
"so disabling auto-planning disables auto-purchase.</strong>"
|
||||
),
|
||||
3,
|
||||
0,
|
||||
)
|
||||
layout.addWidget(self.auto_ato_behavior, 3, 1)
|
||||
|
||||
self.auto_ato_player_missions_asap = QCheckBox()
|
||||
self.auto_ato_player_missions_asap.setChecked(
|
||||
self.game.settings.auto_ato_player_missions_asap
|
||||
)
|
||||
self.auto_ato_player_missions_asap.toggled.connect(
|
||||
self.set_auto_ato_player_missions_asap
|
||||
)
|
||||
|
||||
layout.addWidget(
|
||||
QLabel("Automatically generated packages with players are scheduled ASAP"),
|
||||
4,
|
||||
0,
|
||||
)
|
||||
layout.addWidget(self.auto_ato_player_missions_asap, 4, 1, Qt.AlignRight)
|
||||
|
||||
def set_runway_automation(self, value: bool) -> None:
|
||||
self.game.settings.automate_runway_repair = value
|
||||
|
||||
def set_front_line_automation(self, value: bool) -> None:
|
||||
self.game.settings.automate_front_line_reinforcements = value
|
||||
|
||||
def set_aircraft_automation(self, value: bool) -> None:
|
||||
self.game.settings.automate_aircraft_reinforcements = value
|
||||
|
||||
def set_auto_ato_behavior(self, index: int) -> None:
|
||||
behavior = self.auto_ato_behavior.itemData(index)
|
||||
self.game.settings.auto_ato_behavior = behavior
|
||||
if behavior in (AutoAtoBehavior.Disabled, AutoAtoBehavior.Never):
|
||||
self.auto_ato_player_missions_asap.setChecked(False)
|
||||
self.auto_ato_player_missions_asap.setEnabled(False)
|
||||
if behavior is AutoAtoBehavior.Disabled:
|
||||
self.automate_aircraft_reinforcements.setChecked(False)
|
||||
self.automate_aircraft_reinforcements.setEnabled(False)
|
||||
else:
|
||||
self.auto_ato_player_missions_asap.setEnabled(True)
|
||||
self.auto_ato_player_missions_asap.setChecked(
|
||||
self.game.settings.auto_ato_player_missions_asap
|
||||
)
|
||||
self.automate_aircraft_reinforcements.setEnabled(True)
|
||||
self.automate_aircraft_reinforcements.setChecked(
|
||||
self.game.settings.automate_aircraft_reinforcements
|
||||
)
|
||||
|
||||
def set_auto_ato_player_missions_asap(self, value: bool) -> None:
|
||||
self.game.settings.auto_ato_player_missions_asap = value
|
||||
|
||||
|
||||
START_TYPE_TOOLTIP = "Selects the start type used for AI aircraft."
|
||||
|
||||
|
||||
@ -388,41 +492,7 @@ class QSettingsWindow(QDialog):
|
||||
general_layout.addWidget(old_awac_label, 1, 0)
|
||||
general_layout.addWidget(old_awac, 1, 1, Qt.AlignRight)
|
||||
|
||||
automation = QGroupBox("HQ Automation")
|
||||
campaign_layout.addWidget(automation)
|
||||
|
||||
automation_layout = QGridLayout()
|
||||
automation.setLayout(automation_layout)
|
||||
|
||||
def set_runway_automation(value: bool) -> None:
|
||||
self.game.settings.automate_runway_repair = value
|
||||
|
||||
def set_front_line_automation(value: bool) -> None:
|
||||
self.game.settings.automate_front_line_reinforcements = value
|
||||
|
||||
def set_aircraft_automation(value: bool) -> None:
|
||||
self.game.settings.automate_aircraft_reinforcements = value
|
||||
|
||||
runway_repair = QCheckBox()
|
||||
runway_repair.setChecked(self.game.settings.automate_runway_repair)
|
||||
runway_repair.toggled.connect(set_runway_automation)
|
||||
|
||||
automation_layout.addWidget(QLabel("Automate runway repairs"), 0, 0)
|
||||
automation_layout.addWidget(runway_repair, 0, 1, Qt.AlignRight)
|
||||
|
||||
front_line = QCheckBox()
|
||||
front_line.setChecked(self.game.settings.automate_front_line_reinforcements)
|
||||
front_line.toggled.connect(set_front_line_automation)
|
||||
|
||||
automation_layout.addWidget(QLabel("Automate front-line purchases"), 1, 0)
|
||||
automation_layout.addWidget(front_line, 1, 1, Qt.AlignRight)
|
||||
|
||||
aircraft = QCheckBox()
|
||||
aircraft.setChecked(self.game.settings.automate_aircraft_reinforcements)
|
||||
aircraft.toggled.connect(set_aircraft_automation)
|
||||
|
||||
automation_layout.addWidget(QLabel("Automate aircraft purchases"), 2, 0)
|
||||
automation_layout.addWidget(aircraft, 2, 1, Qt.AlignRight)
|
||||
campaign_layout.addWidget(HqAutomationSettingsBox(self.game))
|
||||
|
||||
def initGeneratorLayout(self):
|
||||
self.generatorPage = QWidget()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user