From 943e89d5a6a8d18947e7d7a5bfc23a450d1a114a Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 3 Apr 2021 22:07:11 +0200 Subject: [PATCH 1/3] Use BannerElement instead of TileElement --- src/openrct2-ui/windows/Banner.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/openrct2-ui/windows/Banner.cpp b/src/openrct2-ui/windows/Banner.cpp index f0442ce136..a97a3ae8d5 100644 --- a/src/openrct2-ui/windows/Banner.cpp +++ b/src/openrct2-ui/windows/Banner.cpp @@ -76,7 +76,7 @@ class BannerWindow final : public Window private: Banner* _banner; CoordsXYZ _bannerViewPos; - TileElement* _tileElement = nullptr; + BannerElement* _tileElement = nullptr; void CreateViewport() { @@ -99,7 +99,7 @@ private: { if ((tileElement->GetType() == TILE_ELEMENT_TYPE_BANNER) && (tileElement->AsBanner()->GetIndex() == number)) { - _tileElement = tileElement; + _tileElement = tileElement->AsBanner(); return; } if (tileElement->IsLastForTile()) @@ -173,7 +173,7 @@ public: case WIDX_BANNER_DEMOLISH: { auto bannerRemoveAction = BannerRemoveAction( - { _banner->position.ToCoordsXY(), _tileElement->GetBaseZ(), _tileElement->AsBanner()->GetPosition() }); + { _banner->position.ToCoordsXY(), _tileElement->GetBaseZ(), _tileElement->GetPosition() }); GameActions::Execute(&bannerRemoveAction); break; } From f5ec127eaf56d64d8f05908f50f9723296b791ab Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 3 Apr 2021 22:09:24 +0200 Subject: [PATCH 2/3] Fix #14409: NPE when demolishing banner --- src/openrct2-ui/windows/Banner.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/openrct2-ui/windows/Banner.cpp b/src/openrct2-ui/windows/Banner.cpp index a97a3ae8d5..4c0bc8ad23 100644 --- a/src/openrct2-ui/windows/Banner.cpp +++ b/src/openrct2-ui/windows/Banner.cpp @@ -172,6 +172,9 @@ public: break; case WIDX_BANNER_DEMOLISH: { + if (_banner == nullptr || _tileElement == nullptr) + break; + auto bannerRemoveAction = BannerRemoveAction( { _banner->position.ToCoordsXY(), _tileElement->GetBaseZ(), _tileElement->GetPosition() }); GameActions::Execute(&bannerRemoveAction); From 79302e88a53044d5c3de57c7ec11aa3f2f69aeaa Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sat, 3 Apr 2021 22:43:57 +0200 Subject: [PATCH 3/3] Rename _tileElement to _bannerElement --- src/openrct2-ui/windows/Banner.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/openrct2-ui/windows/Banner.cpp b/src/openrct2-ui/windows/Banner.cpp index 4c0bc8ad23..542f7cf879 100644 --- a/src/openrct2-ui/windows/Banner.cpp +++ b/src/openrct2-ui/windows/Banner.cpp @@ -76,7 +76,7 @@ class BannerWindow final : public Window private: Banner* _banner; CoordsXYZ _bannerViewPos; - BannerElement* _tileElement = nullptr; + BannerElement* _bannerElement = nullptr; void CreateViewport() { @@ -99,7 +99,7 @@ private: { if ((tileElement->GetType() == TILE_ELEMENT_TYPE_BANNER) && (tileElement->AsBanner()->GetIndex() == number)) { - _tileElement = tileElement->AsBanner(); + _bannerElement = tileElement->AsBanner(); return; } if (tileElement->IsLastForTile()) @@ -107,7 +107,7 @@ private: tileElement++; } } - _tileElement = nullptr; + _bannerElement = nullptr; } public: @@ -126,10 +126,10 @@ public: _banner = GetBanner(number); InitTileElement(); - if (_tileElement == nullptr) + if (_bannerElement == nullptr) return; - frame_no = _tileElement->GetBaseZ(); + frame_no = _bannerElement->GetBaseZ(); _bannerViewPos = CoordsXYZ{ _banner->position.ToCoordsXY().ToTileCentre(), frame_no }; CreateViewport(); } @@ -172,11 +172,11 @@ public: break; case WIDX_BANNER_DEMOLISH: { - if (_banner == nullptr || _tileElement == nullptr) + if (_banner == nullptr || _bannerElement == nullptr) break; auto bannerRemoveAction = BannerRemoveAction( - { _banner->position.ToCoordsXY(), _tileElement->GetBaseZ(), _tileElement->GetPosition() }); + { _banner->position.ToCoordsXY(), _bannerElement->GetBaseZ(), _bannerElement->GetPosition() }); GameActions::Execute(&bannerRemoveAction); break; }