From dca97f747cba6fc7b2eb920b754c80e5dd65ab03 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 31 Aug 2024 19:14:28 +0200 Subject: [PATCH 1/2] Refactor out IsOwnershipMode method --- src/openrct2-ui/windows/LandRights.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/openrct2-ui/windows/LandRights.cpp b/src/openrct2-ui/windows/LandRights.cpp index 7d51a8ac83..614a593d87 100644 --- a/src/openrct2-ui/windows/LandRights.cpp +++ b/src/openrct2-ui/windows/LandRights.cpp @@ -95,6 +95,11 @@ static Widget window_land_rights_widgets[] = { LandRightsMode _landRightsMode; money64 _landRightsCost; + bool IsOwnershipMode() const + { + return (gScreenFlags & SCREEN_FLAGS_EDITOR) != 0 || GetGameState().Cheats.SandboxMode; + } + void SwitchToMode(LandRightsMode mode) { auto widgetIndex = WIDX_BUY_LAND_RIGHTS + EnumValue(mode); @@ -128,7 +133,7 @@ static Widget window_land_rights_widgets[] = { gLandToolSize = kLandToolMinimumSize; ShowGridlines(); - if (!GetGameState().Cheats.SandboxMode) + if (!IsOwnershipMode()) { if (gLandRemainingOwnershipSales > 0) SwitchToMode(LandRightsMode::BuyLand); @@ -327,7 +332,7 @@ static Widget window_land_rights_widgets[] = { ScreenCoordsXY GetModeDimensions() const { - if ((gScreenFlags & SCREEN_FLAGS_EDITOR) != 0 || GetGameState().Cheats.SandboxMode) + if (IsOwnershipMode()) return kEditorSize; else return kInGameSize; @@ -341,7 +346,7 @@ static Widget window_land_rights_widgets[] = { if (width != GetModeDimensions().x) OnResize(); - if ((gScreenFlags & SCREEN_FLAGS_EDITOR) != 0 || GetGameState().Cheats.SandboxMode) + if (IsOwnershipMode()) { PrepareDrawSandbox(); ColourSchemeUpdateByClass(this, WindowClass::Map); @@ -506,7 +511,7 @@ static Widget window_land_rights_widgets[] = { if (!state_changed) return; - if ((gScreenFlags & SCREEN_FLAGS_EDITOR) != 0 || GetGameState().Cheats.SandboxMode) + if (IsOwnershipMode()) { auto landSetRightsAction = GetLandSetAction(); auto res = GameActions::Query(&landSetRightsAction); @@ -534,7 +539,7 @@ static Widget window_land_rights_widgets[] = { if (screenCoords.x == kLocationNull) return; - if ((gScreenFlags & SCREEN_FLAGS_EDITOR) != 0 || GetGameState().Cheats.SandboxMode) + if (IsOwnershipMode()) { auto landSetRightsAction = GetLandSetAction(); GameActions::Execute(&landSetRightsAction); From 89d050c4b8139e820e86f1dc4c4245ba85a67750 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 31 Aug 2024 19:17:49 +0200 Subject: [PATCH 2/2] Adjust window mode when switching from/to sandbox mode --- src/openrct2-ui/windows/LandRights.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/openrct2-ui/windows/LandRights.cpp b/src/openrct2-ui/windows/LandRights.cpp index 614a593d87..2e054e2b77 100644 --- a/src/openrct2-ui/windows/LandRights.cpp +++ b/src/openrct2-ui/windows/LandRights.cpp @@ -248,9 +248,26 @@ static Widget window_land_rights_widgets[] = { void OnUpdate() override { frame_no++; + // Close window if another tool is open if (!isToolActive(WindowClass::LandRights)) + { Close(); + return; + } + + bool inRightsMode = _landRightsMode == LandRightsMode::BuyLand + || _landRightsMode == LandRightsMode::BuyConstructionRights; + + if (!IsOwnershipMode() && !inRightsMode) + { + if (gLandRemainingOwnershipSales > 0) + SwitchToMode(LandRightsMode::BuyLand); + else + SwitchToMode(LandRightsMode::BuyConstructionRights); + } + else if (IsOwnershipMode() && inRightsMode) + SwitchToMode(LandRightsMode::SetLandUnowned); } void PrepareDrawInGame()