From 440c021951b3263ce93235ad72b796d8afd2404a Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 9 Jul 2016 19:16:38 +0100 Subject: [PATCH] create base scenery object for scenery objects --- openrct2.vcxproj | 1 + src/object/BannerObject.cpp | 13 ++---------- src/object/BannerObject.h | 7 +++---- src/object/FootpathItemObject.cpp | 11 ++-------- src/object/FootpathItemObject.h | 7 +++---- src/object/LargeSceneryObject.cpp | 13 ++---------- src/object/LargeSceneryObject.h | 7 +++---- src/object/SceneryObject.h | 34 +++++++++++++++++++++++++++++++ src/object/SmallSceneryObject.cpp | 11 ++-------- src/object/SmallSceneryObject.h | 7 +++---- src/object/WallObject.cpp | 13 ++---------- src/object/WallObject.h | 7 +++---- 12 files changed, 60 insertions(+), 71 deletions(-) create mode 100644 src/object/SceneryObject.h diff --git a/openrct2.vcxproj b/openrct2.vcxproj index d8f417eea1..5d22df490c 100644 --- a/openrct2.vcxproj +++ b/openrct2.vcxproj @@ -449,6 +449,7 @@ + diff --git a/src/object/BannerObject.cpp b/src/object/BannerObject.cpp index 73eac1caf4..c86a74cd4a 100644 --- a/src/object/BannerObject.cpp +++ b/src/object/BannerObject.cpp @@ -39,7 +39,8 @@ void BannerObject::ReadLegacy(IReadObjectContext * context, IStream * stream) GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - _sceneryTabEntry = stream->ReadValue(); + rct_object_entry sgEntry = stream->ReadValue(); + SetPrimarySceneryGroup(&sgEntry); GetImageTable()->Read(context, stream); @@ -54,16 +55,6 @@ void BannerObject::Load() { _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); - - _legacyType.banner.scenery_tab_id = 0xFF; - if ((_sceneryTabEntry.flags & 0xFF) != 0xFF) - { - uint8 entryType, entryIndex; - if (find_object_in_entry_group(&_sceneryTabEntry, &entryType, &entryIndex)) - { - _legacyType.banner.scenery_tab_id = entryIndex; - } - } } void BannerObject::Unload() diff --git a/src/object/BannerObject.h b/src/object/BannerObject.h index 4ef47e405c..fb20f37038 100644 --- a/src/object/BannerObject.h +++ b/src/object/BannerObject.h @@ -16,21 +16,20 @@ #pragma once -#include "Object.h" +#include "SceneryObject.h" extern "C" { #include "../world/scenery.h" } -class BannerObject : public Object +class BannerObject : public SceneryObject { private: rct_scenery_entry _legacyType = { 0 }; - rct_object_entry _sceneryTabEntry = { 0 }; public: - explicit BannerObject(const rct_object_entry &entry) : Object(entry) { }; + explicit BannerObject(const rct_object_entry &entry) : SceneryObject(entry) { }; void * GetLegacyData() override { return &_legacyType; } diff --git a/src/object/FootpathItemObject.cpp b/src/object/FootpathItemObject.cpp index dfcec859d9..80b0cc1cbc 100644 --- a/src/object/FootpathItemObject.cpp +++ b/src/object/FootpathItemObject.cpp @@ -39,7 +39,8 @@ void FootpathItemObject::ReadLegacy(IReadObjectContext * context, IStream * stre GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - _sceneryTabEntry = stream->ReadValue(); + rct_object_entry sgEntry = stream->ReadValue(); + SetPrimarySceneryGroup(&sgEntry); GetImageTable()->Read(context, stream); @@ -56,14 +57,6 @@ void FootpathItemObject::Load() _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.path_bit.scenery_tab_id = 0xFF; - if ((_sceneryTabEntry.flags & 0xFF) != 0xFF) - { - uint8 entryType, entryIndex; - if (find_object_in_entry_group(&_sceneryTabEntry, &entryType, &entryIndex)) - { - _legacyType.path_bit.scenery_tab_id = entryIndex; - } - } } void FootpathItemObject::Unload() diff --git a/src/object/FootpathItemObject.h b/src/object/FootpathItemObject.h index e3812781a9..5ce31cc233 100644 --- a/src/object/FootpathItemObject.h +++ b/src/object/FootpathItemObject.h @@ -16,21 +16,20 @@ #pragma once -#include "Object.h" +#include "SceneryObject.h" extern "C" { #include "../world/scenery.h" } -class FootpathItemObject : public Object +class FootpathItemObject : public SceneryObject { private: rct_scenery_entry _legacyType = { 0 }; - rct_object_entry _sceneryTabEntry = { 0 }; public: - explicit FootpathItemObject(const rct_object_entry &entry) : Object(entry) { }; + explicit FootpathItemObject(const rct_object_entry &entry) : SceneryObject(entry) { }; void * GetLegacyData() override { return &_legacyType; } diff --git a/src/object/LargeSceneryObject.cpp b/src/object/LargeSceneryObject.cpp index 83accca6b1..6007af165a 100644 --- a/src/object/LargeSceneryObject.cpp +++ b/src/object/LargeSceneryObject.cpp @@ -49,7 +49,8 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - _sceneryTabEntry = stream->ReadValue(); + rct_object_entry sgEntry = stream->ReadValue(); + SetPrimarySceneryGroup(&sgEntry); if (_legacyType.large_scenery.flags & (1 << 2)) { @@ -86,16 +87,6 @@ void LargeSceneryObject::Load() _legacyType.large_scenery.tiles = _tiles; - _legacyType.large_scenery.scenery_tab_id = 0xFF; - if ((_sceneryTabEntry.flags & 0xFF) != 0xFF) - { - uint8 entryType, entryIndex; - if (find_object_in_entry_group(&_sceneryTabEntry, &entryType, &entryIndex)) - { - _legacyType.large_scenery.scenery_tab_id = entryIndex; - } - } - if (_legacyType.large_scenery.flags & (1 << 2)) { _legacyType.large_scenery.text_image = _legacyType.image; diff --git a/src/object/LargeSceneryObject.h b/src/object/LargeSceneryObject.h index 5f28210852..e4a86339c6 100644 --- a/src/object/LargeSceneryObject.h +++ b/src/object/LargeSceneryObject.h @@ -16,24 +16,23 @@ #pragma once -#include "Object.h" +#include "SceneryObject.h" extern "C" { #include "../world/scenery.h" } -class LargeSceneryObject : public Object +class LargeSceneryObject : public SceneryObject { private: rct_scenery_entry _legacyType = { 0 }; uint32 _baseImageId = 0; - rct_object_entry _sceneryTabEntry = { 0 }; rct_large_scenery_text * _3dFont = nullptr; rct_large_scenery_tile * _tiles = nullptr; public: - explicit LargeSceneryObject(const rct_object_entry &entry) : Object(entry) { }; + explicit LargeSceneryObject(const rct_object_entry &entry) : SceneryObject(entry) { }; ~LargeSceneryObject(); void * GetLegacyData() override { return &_legacyType; } diff --git a/src/object/SceneryObject.h b/src/object/SceneryObject.h new file mode 100644 index 0000000000..612079f221 --- /dev/null +++ b/src/object/SceneryObject.h @@ -0,0 +1,34 @@ +#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers +/***************************************************************************** + * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. + * + * OpenRCT2 is the work of many authors, a full list can be found in contributors.md + * For more information, visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * A full copy of the GNU General Public License can be found in licence.txt + *****************************************************************************/ +#pragma endregion + +#pragma once + +#include "Object.h" + +class SceneryObject : public Object +{ +private: + rct_object_entry _primarySceneryGroupEntry = { 0 }; + +public: + explicit SceneryObject(const rct_object_entry &entry) : Object(entry) { } + virtual ~SceneryObject() { } + + const rct_object_entry * GetPrimarySceneryGroup() { return &_primarySceneryGroupEntry; } + +protected: + void SetPrimarySceneryGroup(const rct_object_entry * entry) { _primarySceneryGroupEntry = *entry; } +}; diff --git a/src/object/SmallSceneryObject.cpp b/src/object/SmallSceneryObject.cpp index ccb335da01..dcc45a748e 100644 --- a/src/object/SmallSceneryObject.cpp +++ b/src/object/SmallSceneryObject.cpp @@ -51,7 +51,8 @@ void SmallSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - _sceneryTabEntry = stream->ReadValue(); + rct_object_entry sgEntry = stream->ReadValue(); + SetPrimarySceneryGroup(&sgEntry); if (_legacyType.small_scenery.flags & SMALL_SCENERY_FLAG16) { @@ -82,14 +83,6 @@ void SmallSceneryObject::Load() _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.small_scenery.scenery_tab_id = 0xFF; - if ((_sceneryTabEntry.flags & 0xFF) != 0xFF) - { - uint8 entryType, entryIndex; - if (find_object_in_entry_group(&_sceneryTabEntry, &entryType, &entryIndex)) - { - _legacyType.small_scenery.scenery_tab_id = entryIndex; - } - } if (_legacyType.small_scenery.flags & SMALL_SCENERY_FLAG16) { diff --git a/src/object/SmallSceneryObject.h b/src/object/SmallSceneryObject.h index 36a14111ea..c44b9276c7 100644 --- a/src/object/SmallSceneryObject.h +++ b/src/object/SmallSceneryObject.h @@ -16,22 +16,21 @@ #pragma once -#include "Object.h" +#include "SceneryObject.h" extern "C" { #include "../world/scenery.h" } -class SmallSceneryObject : public Object +class SmallSceneryObject : public SceneryObject { private: rct_scenery_entry _legacyType = { 0 }; - rct_object_entry _sceneryTabEntry = { 0 }; uint8 * _var10data = nullptr; public: - explicit SmallSceneryObject(const rct_object_entry &entry) : Object(entry) { }; + explicit SmallSceneryObject(const rct_object_entry &entry) : SceneryObject(entry) { }; ~SmallSceneryObject(); void * GetLegacyData() override { return &_legacyType; } diff --git a/src/object/WallObject.cpp b/src/object/WallObject.cpp index 233c62dd3d..5f960d2b75 100644 --- a/src/object/WallObject.cpp +++ b/src/object/WallObject.cpp @@ -42,7 +42,8 @@ void WallObject::ReadLegacy(IReadObjectContext * context, IStream * stream) GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - _sceneryTabEntry = stream->ReadValue(); + rct_object_entry sgEntry = stream->ReadValue(); + SetPrimarySceneryGroup(&sgEntry); GetImageTable()->Read(context, stream); @@ -57,16 +58,6 @@ void WallObject::Load() { _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); - - _legacyType.small_scenery.scenery_tab_id = 0xFF; - if ((_sceneryTabEntry.flags & 0xFF) != 0xFF) - { - uint8 entryType, entryIndex; - if (find_object_in_entry_group(&_sceneryTabEntry, &entryType, &entryIndex)) - { - _legacyType.small_scenery.scenery_tab_id = entryIndex; - } - } } void WallObject::Unload() diff --git a/src/object/WallObject.h b/src/object/WallObject.h index dc538c6405..7fcc26e1e0 100644 --- a/src/object/WallObject.h +++ b/src/object/WallObject.h @@ -16,21 +16,20 @@ #pragma once -#include "Object.h" +#include "SceneryObject.h" extern "C" { #include "../world/scenery.h" } -class WallObject : public Object +class WallObject : public SceneryObject { private: rct_scenery_entry _legacyType = { 0 }; - rct_object_entry _sceneryTabEntry = { 0 }; public: - explicit WallObject(const rct_object_entry &entry) : Object(entry) { }; + explicit WallObject(const rct_object_entry &entry) : SceneryObject(entry) { }; void * GetLegacyData() override { return &_legacyType; }