Dan Albert 2021-05-27 15:34:27 -07:00
parent f6ab1aad77
commit 11a8ff7f70
2 changed files with 117 additions and 36 deletions

View File

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

View File

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