From be31812fa8a3ea8ee09416a9880d4549eeaa9757 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Tue, 25 Mar 2025 00:37:08 +0100 Subject: [PATCH] Create strong enum for ScenarioSelectMode --- src/openrct2-ui/windows/Options.cpp | 10 +++++----- src/openrct2-ui/windows/ScenarioSelect.cpp | 10 +++++----- src/openrct2/config/Config.cpp | 10 ++++++++-- src/openrct2/config/Config.h | 4 +++- src/openrct2/scenario/Scenario.h | 6 +++--- src/openrct2/scenario/ScenarioRepository.cpp | 2 +- 6 files changed, 25 insertions(+), 17 deletions(-) diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index fe64a85d04..578c8c08a1 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -1800,7 +1800,7 @@ namespace OpenRCT2::Ui::Windows { windowPos.x + widget->left, windowPos.y + widget->top }, widget->height() + 1, colours[1], 0, Dropdown::Flag::StayOpen, numItems, widget->width() - 3); - Dropdown::SetChecked(Config::Get().general.ScenarioSelectMode, true); + Dropdown::SetChecked(EnumValue(Config::Get().general.scenarioSelectMode), true); break; } case WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN: @@ -1847,9 +1847,9 @@ namespace OpenRCT2::Ui::Windows } break; case WIDX_SCENARIO_GROUPING_DROPDOWN: - if (dropdownIndex != Config::Get().general.ScenarioSelectMode) + if (dropdownIndex != EnumValue(Config::Get().general.scenarioSelectMode)) { - Config::Get().general.ScenarioSelectMode = dropdownIndex; + Config::Get().general.scenarioSelectMode = static_cast(dropdownIndex); Config::Get().interface.ScenarioselectLastTab = 0; Config::Save(); Invalidate(); @@ -1898,14 +1898,14 @@ namespace OpenRCT2::Ui::Windows SetCheckboxValue(WIDX_AUTO_OPEN_SHOPS, Config::Get().general.AutoOpenShops); SetCheckboxValue(WIDX_ALLOW_EARLY_COMPLETION, Config::Get().general.AllowEarlyCompletion); - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_DIFFICULTY) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::difficulty) widgets[WIDX_SCENARIO_GROUPING].text = STR_OPTIONS_SCENARIO_DIFFICULTY; else widgets[WIDX_SCENARIO_GROUPING].text = STR_OPTIONS_SCENARIO_ORIGIN; SetCheckboxValue(WIDX_SCENARIO_UNLOCKING, Config::Get().general.ScenarioUnlockingEnabled); - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::origin) { disabled_widgets &= ~(1uLL << WIDX_SCENARIO_UNLOCKING); } diff --git a/src/openrct2-ui/windows/ScenarioSelect.cpp b/src/openrct2-ui/windows/ScenarioSelect.cpp index 5a478929d5..59470602a2 100644 --- a/src/openrct2-ui/windows/ScenarioSelect.cpp +++ b/src/openrct2-ui/windows/ScenarioSelect.cpp @@ -185,7 +185,7 @@ namespace OpenRCT2::Ui::Windows continue; auto ft = Formatter(); - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::origin) { ft.Add(kScenarioOriginStringIds[i]); } @@ -553,7 +553,7 @@ namespace OpenRCT2::Ui::Windows // Category heading StringId headingStringId = kStringIdNone; - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::origin) { if (selected_tab != EnumValue(ScenarioSource::Real) && currentHeading.category != scenario->Category) { @@ -659,7 +659,7 @@ namespace OpenRCT2::Ui::Windows bool IsScenarioVisible(const ScenarioIndexEntry& scenario) const { - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::origin) { if (static_cast(scenario.SourceGame) != selected_tab) { @@ -683,7 +683,7 @@ namespace OpenRCT2::Ui::Windows bool IsLockingEnabled() const { - if (Config::Get().general.ScenarioSelectMode != SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode != ScenarioSelectMode::origin) return false; if (!Config::Get().general.ScenarioUnlockingEnabled) return false; @@ -700,7 +700,7 @@ namespace OpenRCT2::Ui::Windows for (size_t i = 0; i < numScenarios; i++) { const ScenarioIndexEntry* scenario = ScenarioRepositoryGetByIndex(i); - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::origin) { showPages |= 1 << static_cast(scenario->SourceGame); } diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index 2384ee05a9..342a73ce85 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -124,6 +124,11 @@ namespace OpenRCT2::Config ConfigEnumEntry("GLASSY", VirtualFloorStyles::Glassy), }); + static const auto Enum_ScenarioSelectMode = ConfigEnum({ + ConfigEnumEntry("ORIGIN", ScenarioSelectMode::origin), + ConfigEnumEntry("DIFFICULTY", ScenarioSelectMode::difficulty), + }); + /** * Config enum wrapping LanguagesDescriptors. */ @@ -224,7 +229,8 @@ namespace OpenRCT2::Config #endif // _DEBUG model->TrapCursor = reader->GetBoolean("trap_cursor", false); model->AutoOpenShops = reader->GetBoolean("auto_open_shops", false); - model->ScenarioSelectMode = reader->GetInt32("scenario_select_mode", SCENARIO_SELECT_MODE_ORIGIN); + model->scenarioSelectMode = reader->GetEnum( + "scenario_select_mode", ScenarioSelectMode::origin, Enum_ScenarioSelectMode); model->ScenarioUnlockingEnabled = reader->GetBoolean("scenario_unlocking_enabled", true); model->ScenarioHideMegaPark = reader->GetBoolean("scenario_hide_mega_park", true); model->LastSaveGameDirectory = reader->GetString("last_game_directory", ""); @@ -317,7 +323,7 @@ namespace OpenRCT2::Config writer->WriteBoolean("multithreading", model->MultiThreading); writer->WriteBoolean("trap_cursor", model->TrapCursor); writer->WriteBoolean("auto_open_shops", model->AutoOpenShops); - writer->WriteInt32("scenario_select_mode", model->ScenarioSelectMode); + writer->WriteEnum("scenario_select_mode", model->scenarioSelectMode, Enum_ScenarioSelectMode); writer->WriteBoolean("scenario_unlocking_enabled", model->ScenarioUnlockingEnabled); writer->WriteBoolean("scenario_hide_mega_park", model->ScenarioHideMegaPark); writer->WriteString("last_game_directory", model->LastSaveGameDirectory); diff --git a/src/openrct2/config/Config.h b/src/openrct2/config/Config.h index dba5df0ed1..998f9d7204 100644 --- a/src/openrct2/config/Config.h +++ b/src/openrct2/config/Config.h @@ -20,6 +20,8 @@ #undef interface #endif +enum class ScenarioSelectMode : uint8_t; + namespace OpenRCT2::Config { struct General @@ -97,7 +99,7 @@ namespace OpenRCT2::Config bool AutoOpenShops; int32_t DefaultInspectionInterval; int32_t WindowLimit; - int32_t ScenarioSelectMode; + ScenarioSelectMode scenarioSelectMode; bool ScenarioUnlockingEnabled; bool ScenarioHideMegaPark; bool SteamOverlayPause; diff --git a/src/openrct2/scenario/Scenario.h b/src/openrct2/scenario/Scenario.h index e66cd7d3e6..f24d417e63 100644 --- a/src/openrct2/scenario/Scenario.h +++ b/src/openrct2/scenario/Scenario.h @@ -127,10 +127,10 @@ private: ObjectiveStatus CheckMonthlyFoodIncome() const; }; -enum +enum class ScenarioSelectMode : uint8_t { - SCENARIO_SELECT_MODE_DIFFICULTY, - SCENARIO_SELECT_MODE_ORIGIN, + difficulty, + origin, }; enum diff --git a/src/openrct2/scenario/ScenarioRepository.cpp b/src/openrct2/scenario/ScenarioRepository.cpp index b7b52b807f..aafb15a9c3 100644 --- a/src/openrct2/scenario/ScenarioRepository.cpp +++ b/src/openrct2/scenario/ScenarioRepository.cpp @@ -508,7 +508,7 @@ private: void Sort() { - if (Config::Get().general.ScenarioSelectMode == SCENARIO_SELECT_MODE_ORIGIN) + if (Config::Get().general.scenarioSelectMode == ScenarioSelectMode::origin) { std::sort( _scenarios.begin(), _scenarios.end(), [](const ScenarioIndexEntry& a, const ScenarioIndexEntry& b) -> bool {