From 6dae5b98d5f1fabdd2bd22787246287343497e3f Mon Sep 17 00:00:00 2001 From: Dan Albert Date: Thu, 21 Oct 2021 20:05:07 -0700 Subject: [PATCH] Fix carrier option not taking effect this turn. This really shouldn't need to happen but I don't feel like rewriting the culling code right now. There's no reason for these to be persisted to the Game at all, we should be generating these once they're needed. --- game/settings/booleanoption.py | 9 ++++- game/settings/boundedfloatoption.py | 10 ++++- game/settings/boundedintoption.py | 9 ++++- game/settings/choicesoption.py | 3 +- game/settings/minutesoption.py | 9 ++++- game/settings/optiondescription.py | 1 + game/settings/settings.py | 1 + qt_ui/windows/settings/QSettingsWindow.py | 46 +++++++++++++++++------ 8 files changed, 72 insertions(+), 16 deletions(-) diff --git a/game/settings/booleanoption.py b/game/settings/booleanoption.py index 07686547..4149d1ec 100644 --- a/game/settings/booleanoption.py +++ b/game/settings/booleanoption.py @@ -17,12 +17,19 @@ def boolean_option( invert: bool = False, detail: Optional[str] = None, tooltip: Optional[str] = None, + causes_expensive_game_update: bool = False, **kwargs: Any, ) -> bool: return field( metadata={ SETTING_DESCRIPTION_KEY: BooleanOption( - page, section, text, detail, tooltip, invert + page, + section, + text, + detail, + tooltip, + causes_expensive_game_update, + invert, ) }, default=default, diff --git a/game/settings/boundedfloatoption.py b/game/settings/boundedfloatoption.py index 45f336d6..6f9bb3e6 100644 --- a/game/settings/boundedfloatoption.py +++ b/game/settings/boundedfloatoption.py @@ -26,7 +26,15 @@ def bounded_float_option( return field( metadata={ SETTING_DESCRIPTION_KEY: BoundedFloatOption( - page, section, text, detail, tooltip, min, max, divisor + page, + section, + text, + detail, + tooltip, + causes_expensive_game_update=False, + min=min, + max=max, + divisor=divisor, ) }, default=default, diff --git a/game/settings/boundedintoption.py b/game/settings/boundedintoption.py index 770b3b70..0a5b556e 100644 --- a/game/settings/boundedintoption.py +++ b/game/settings/boundedintoption.py @@ -24,7 +24,14 @@ def bounded_int_option( return field( metadata={ SETTING_DESCRIPTION_KEY: BoundedIntOption( - page, section, text, detail, tooltip, min, max + page, + section, + text, + detail, + tooltip, + causes_expensive_game_update=False, + min=min, + max=max, ) }, default=default, diff --git a/game/settings/choicesoption.py b/game/settings/choicesoption.py index 463fae95..323d1b54 100644 --- a/game/settings/choicesoption.py +++ b/game/settings/choicesoption.py @@ -37,7 +37,8 @@ def choices_option( text, detail, tooltip, - dict(choices), + causes_expensive_game_update=False, + choices=dict(choices), ) }, default=default, diff --git a/game/settings/minutesoption.py b/game/settings/minutesoption.py index c03c20a6..4d4b3759 100644 --- a/game/settings/minutesoption.py +++ b/game/settings/minutesoption.py @@ -25,7 +25,14 @@ def minutes_option( return field( metadata={ SETTING_DESCRIPTION_KEY: MinutesOption( - page, section, text, detail, tooltip, min, max + page, + section, + text, + detail, + tooltip, + causes_expensive_game_update=False, + min=min, + max=max, ) }, default=default, diff --git a/game/settings/optiondescription.py b/game/settings/optiondescription.py index e960b730..0963ce61 100644 --- a/game/settings/optiondescription.py +++ b/game/settings/optiondescription.py @@ -12,3 +12,4 @@ class OptionDescription: text: str detail: Optional[str] tooltip: Optional[str] + causes_expensive_game_update: bool diff --git a/game/settings/settings.py b/game/settings/settings.py index 53f48c8d..c2b94619 100644 --- a/game/settings/settings.py +++ b/game/settings/settings.py @@ -410,6 +410,7 @@ class Settings: page=MISSION_GENERATOR_PAGE, section=PERFORMANCE_SECTION, default=True, + causes_expensive_game_update=True, ) # Cheating. Not using auto settings because the same page also has buttons which do diff --git a/qt_ui/windows/settings/QSettingsWindow.py b/qt_ui/windows/settings/QSettingsWindow.py index c431211d..a66a690d 100644 --- a/qt_ui/windows/settings/QSettingsWindow.py +++ b/qt_ui/windows/settings/QSettingsWindow.py @@ -82,9 +82,16 @@ class CheatSettingsBox(QGroupBox): class AutoSettingsLayout(QGridLayout): - def __init__(self, page: str, section: str, settings: Settings) -> None: + def __init__( + self, + page: str, + section: str, + settings: Settings, + write_full_settings: Callable[[], None], + ) -> None: super().__init__() self.settings = settings + self.write_full_settings = write_full_settings for row, (name, description) in enumerate(Settings.fields(page, section)): self.add_label(row, description) @@ -116,6 +123,8 @@ class AutoSettingsLayout(QGridLayout): if description.invert: value = not value self.settings.__dict__[name] = value + if description.causes_expensive_game_update: + self.write_full_settings() checkbox = QCheckBox() value = self.settings.__dict__[name] @@ -184,24 +193,42 @@ class AutoSettingsLayout(QGridLayout): class AutoSettingsGroup(QGroupBox): - def __init__(self, page: str, section: str, settings: Settings) -> None: + def __init__( + self, + page: str, + section: str, + settings: Settings, + write_full_settings: Callable[[], None], + ) -> None: super().__init__(section) - self.setLayout(AutoSettingsLayout(page, section, settings)) + self.setLayout(AutoSettingsLayout(page, section, settings, write_full_settings)) class AutoSettingsPageLayout(QVBoxLayout): - def __init__(self, page: str, settings: Settings) -> None: + def __init__( + self, + page: str, + settings: Settings, + write_full_settings: Callable[[], None], + ) -> None: super().__init__() self.setAlignment(Qt.AlignTop) for section in Settings.sections(page): - self.addWidget(AutoSettingsGroup(page, section, settings)) + self.addWidget( + AutoSettingsGroup(page, section, settings, write_full_settings) + ) class AutoSettingsPage(QWidget): - def __init__(self, page: str, settings: Settings) -> None: + def __init__( + self, + page: str, + settings: Settings, + write_full_settings: Callable[[], None], + ) -> None: super().__init__() - self.setLayout(AutoSettingsPageLayout(page, settings)) + self.setLayout(AutoSettingsPageLayout(page, settings, write_full_settings)) class QSettingsWindow(QDialog): @@ -214,7 +241,7 @@ class QSettingsWindow(QDialog): self.pages: dict[str, AutoSettingsPage] = {} for page in Settings.pages(): - self.pages[page] = AutoSettingsPage(page, game.settings) + self.pages[page] = AutoSettingsPage(page, game.settings, self.applySettings) self.setModal(True) self.setWindowTitle("Settings") @@ -284,9 +311,6 @@ class QSettingsWindow(QDialog): self.setLayout(self.layout) - def init(self): - raise RuntimeError - def initCheatLayout(self): self.cheatPage = QWidget()