From a38f9c21830ae6e08b74a3f59cba304d381c6074 Mon Sep 17 00:00:00 2001 From: Khopa Date: Sun, 31 May 2020 23:07:54 +0200 Subject: [PATCH] Added performance settings. --- game/operation/operation.py | 3 +- game/settings.py | 17 ++++- gen/armor.py | 15 ++++- gen/groundobjectsgen.py | 6 ++ qt_ui/windows/settings/QSettingsWindow.py | 75 ++++++++++++++++------- 5 files changed, 88 insertions(+), 28 deletions(-) diff --git a/game/operation/operation.py b/game/operation/operation.py index 69166f0e..ed7be641 100644 --- a/game/operation/operation.py +++ b/game/operation/operation.py @@ -172,7 +172,8 @@ class Operation: self.forcedoptionsgen.generate() # Generate Visuals Smoke Effects - self.visualgen.generate() + if self.game.settings.perf_smoke_gen: + self.visualgen.generate() # Inject Lua Scripts load_mist = TriggerStart(comment="Load Mist Lua Framework") diff --git a/game/settings.py b/game/settings.py index ef29c22c..d399803a 100644 --- a/game/settings.py +++ b/game/settings.py @@ -1,14 +1,25 @@ class Settings: + + # Difficulty settings player_skill = "Good" enemy_skill = "Average" enemy_vehicle_skill = "Average" map_coalition_visibility = "All Units" labels = "Full" - only_player_takeoff = True + only_player_takeoff = True # Legacy parameter do not use night_disabled = False supercarrier = False multiplier = 1 - sams = True - cold_start = False + sams = True # Legacy parameter do not use + cold_start = False # Legacy parameter do not use version = None + + # Performance oriented + perf_red_alert_state = True + perf_smoke_gen = True + perf_artillery = True + perf_moving_units = True + perf_infantry = True + + diff --git a/gen/armor.py b/gen/armor.py index 9ce408b9..5fcdf9d4 100644 --- a/gen/armor.py +++ b/gen/armor.py @@ -96,6 +96,11 @@ class GroundConflictGenerator: def gen_infantry_group_for_group(self, group, is_player, side:Country, forward_heading): + + # Disable infantry unit gen if disabled + if not self.game.settings.perf_infantry: + return + infantry_position = group.points[0].position.random_point_within(250, 50) if side == self.conflict.attackers_country: @@ -135,12 +140,16 @@ class GroundConflictGenerator: def plan_action_for_groups(self, stance, ally_groups, enemy_groups, forward_heading, from_cp, to_cp): + if not self.game.settings.perf_moving_units: + return + for dcs_group, group in ally_groups: if group.role == CombatGroupRole.ARTILLERY: # Fire on any ennemy in range - target = self.get_artillery_target_in_range(dcs_group, group, enemy_groups) - if target is not None: - dcs_group.points[0].tasks.append(FireAtPoint(target, len(group.units) * 10, 100)) + if self.game.settings.perf_artillery: + target = self.get_artillery_target_in_range(dcs_group, group, enemy_groups) + if target is not None: + dcs_group.points[0].tasks.append(FireAtPoint(target, len(group.units) * 10, 100)) elif group.role in [CombatGroupRole.TANK, CombatGroupRole.IFV]: if stance == CombatStance.AGGRESIVE: # Attack nearest enemy if any diff --git a/gen/groundobjectsgen.py b/gen/groundobjectsgen.py index 9469a0e5..df8de045 100644 --- a/gen/groundobjectsgen.py +++ b/gen/groundobjectsgen.py @@ -77,6 +77,12 @@ class GroundObjectsGenerator: vehicle.position.y = u.position.y vehicle.heading = u.heading vg.add_unit(vehicle) + + if self.game.settings.perf_red_alert_state: + vg.points[0].tasks.append(OptAlarmState(2)) + else: + vg.points[0].tasks.append(OptAlarmState(1)) + elif ground_object.dcs_identifier in ["CARRIER", "LHA"]: for g in ground_object.groups: if len(g.units) > 0: diff --git a/qt_ui/windows/settings/QSettingsWindow.py b/qt_ui/windows/settings/QSettingsWindow.py index e5acd2e7..efec774f 100644 --- a/qt_ui/windows/settings/QSettingsWindow.py +++ b/qt_ui/windows/settings/QSettingsWindow.py @@ -1,7 +1,7 @@ from PySide2.QtCore import QSize, Qt, QItemSelectionModel, QPoint from PySide2.QtGui import QStandardItemModel, QStandardItem from PySide2.QtWidgets import QLabel, QDialog, QGridLayout, QListView, QStackedLayout, QComboBox, QWidget, \ - QAbstractItemView, QPushButton, QGroupBox, QCheckBox + QAbstractItemView, QPushButton, QGroupBox, QCheckBox, QVBoxLayout import qt_ui.uiconstants as CONST from game.game import Game @@ -121,32 +121,61 @@ class QSettingsWindow(QDialog): def initGeneratorLayout(self): self.generatorPage = QWidget() - self.generatorLayout = QGridLayout() + self.generatorLayout = QVBoxLayout() self.generatorLayout.setAlignment(Qt.AlignTop) self.generatorPage.setLayout(self.generatorLayout) - self.coldStart = QCheckBox() - self.coldStart.setChecked(self.game.settings.cold_start) - self.coldStart.toggled.connect(self.applySettings) - self.takeOffOnlyForPlayerGroup = QCheckBox() - self.takeOffOnlyForPlayerGroup.setChecked(self.game.settings.only_player_takeoff) - self.takeOffOnlyForPlayerGroup.toggled.connect(self.applySettings) - - self.coldStart = QCheckBox() - self.coldStart.setChecked(self.game.settings.cold_start) - self.coldStart.toggled.connect(self.applySettings) + self.gameplay = QGroupBox("Gameplay") + self.gameplayLayout = QGridLayout(); + self.gameplayLayout.setAlignment(Qt.AlignTop) + self.gameplay.setLayout(self.gameplayLayout) self.supercarrier = QCheckBox() self.supercarrier.setChecked(self.game.settings.supercarrier) self.supercarrier.toggled.connect(self.applySettings) - # Settings not used anymore - # self.generatorLayout.addWidget(QLabel("Aircraft cold start"), 0, 0) - # self.generatorLayout.addWidget(self.coldStart, 0, 1) - # self.generatorLayout.addWidget(QLabel("Takeoff only for player group"), 1, 0) - # self.generatorLayout.addWidget(self.takeOffOnlyForPlayerGroup, 1, 1) - self.generatorLayout.addWidget(QLabel("Use Supercarrier Module"), 0, 0) - self.generatorLayout.addWidget(self.supercarrier, 0, 1) + self.gameplayLayout.addWidget(QLabel("Use Supercarrier Module"), 0, 0) + self.gameplayLayout.addWidget(self.supercarrier, 0, 1) + + self.performance = QGroupBox("Performance") + self.performanceLayout = QGridLayout(); + self.performanceLayout.setAlignment(Qt.AlignTop) + self.performance.setLayout(self.performanceLayout) + + self.smoke = QCheckBox() + self.smoke.setChecked(self.game.settings.perf_smoke_gen) + self.smoke.toggled.connect(self.applySettings) + + self.red_alert = QCheckBox() + self.red_alert.setChecked(self.game.settings.perf_red_alert_state) + self.red_alert.toggled.connect(self.applySettings) + + self.arti = QCheckBox() + self.arti.setChecked(self.game.settings.perf_artillery) + self.arti.toggled.connect(self.applySettings) + + self.moving_units = QCheckBox() + self.moving_units.setChecked(self.game.settings.perf_moving_units) + self.moving_units.toggled.connect(self.applySettings) + + self.infantry = QCheckBox() + self.infantry.setChecked(self.game.settings.perf_infantry) + self.infantry.toggled.connect(self.applySettings) + + self.performanceLayout.addWidget(QLabel("Smoke visual effect on frontline"), 0, 0) + self.performanceLayout.addWidget(self.smoke, 0, 1) + self.performanceLayout.addWidget(QLabel("SAM starts in RED alert mode"), 1, 0) + self.performanceLayout.addWidget(self.red_alert, 1, 1) + self.performanceLayout.addWidget(QLabel("Artillery strikes"), 2, 0) + self.performanceLayout.addWidget(self.arti, 2, 1) + self.performanceLayout.addWidget(QLabel("Moving ground units"), 3, 0) + self.performanceLayout.addWidget(self.moving_units, 3, 1) + self.performanceLayout.addWidget(QLabel("Generate infantry squads along vehicles"), 4, 0) + self.performanceLayout.addWidget(self.infantry, 4, 1) + + self.generatorLayout.addWidget(self.gameplay) + self.generatorLayout.addWidget(QLabel("Disabling settings below may improve performance, but will impact the overall quality of the experience.")) + self.generatorLayout.addWidget(self.performance) def initCheatLayout(self): @@ -194,10 +223,14 @@ class QSettingsWindow(QDialog): self.game.settings.enemy_vehicle_skill = CONST.SKILL_OPTIONS[self.enemyAASkill.currentIndex()] self.game.settings.labels = CONST.LABELS_OPTIONS[self.difficultyLabel.currentIndex()] self.game.settings.night_disabled = self.noNightMission.isChecked() - self.game.settings.only_player_takeoff = self.takeOffOnlyForPlayerGroup.isChecked() - self.game.settings.cold_start = self.coldStart.isChecked() self.game.settings.supercarrier = self.supercarrier.isChecked() + self.game.settings.perf_red_alert_state = self.red_alert.isChecked() + self.game.settings.perf_smoke_gen = self.smoke.isChecked() + self.game.settings.perf_artillery = self.arti.isChecked() + self.game.settings.perf_moving_units = self.moving_units.isChecked() + self.game.settings.perf_infantry = self.infantry.isChecked() + GameUpdateSignal.get_instance().updateGame(self.game) def onSelectionChanged(self):