From ec446ac9d6ce57542722263d3d1ac6e4e3dec349 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 11 Dec 2017 13:06:59 +0000 Subject: [PATCH] Return image and string table by reference --- src/openrct2/object/BannerObject.cpp | 10 +++++----- src/openrct2/object/EntranceObject.cpp | 14 +++++++------- src/openrct2/object/FootpathItemObject.cpp | 14 +++++++------- src/openrct2/object/FootpathObject.cpp | 14 +++++++------- src/openrct2/object/ImageTable.h | 3 +++ src/openrct2/object/LargeSceneryObject.cpp | 10 +++++----- src/openrct2/object/Object.cpp | 2 +- src/openrct2/object/Object.h | 19 ++++--------------- src/openrct2/object/ObjectJsonHelpers.cpp | 6 +++--- src/openrct2/object/RideObject.cpp | 18 +++++++++--------- src/openrct2/object/SceneryGroupObject.cpp | 6 +++--- src/openrct2/object/SmallSceneryObject.cpp | 10 +++++----- src/openrct2/object/StexObject.cpp | 14 +++++++------- src/openrct2/object/StringTable.h | 21 +++++++++++++++++++-- src/openrct2/object/WallObject.cpp | 10 +++++----- src/openrct2/object/WaterObject.cpp | 10 +++++----- 16 files changed, 95 insertions(+), 86 deletions(-) diff --git a/src/openrct2/object/BannerObject.cpp b/src/openrct2/object/BannerObject.cpp index 146fa47adb..a70cb659f3 100644 --- a/src/openrct2/object/BannerObject.cpp +++ b/src/openrct2/object/BannerObject.cpp @@ -31,12 +31,12 @@ void BannerObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _legacyType.banner.scenery_tab_id = stream->ReadValue(); stream->Seek(1, STREAM_SEEK_CURRENT); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); rct_object_entry sgEntry = stream->ReadValue(); SetPrimarySceneryGroup(&sgEntry); - GetImageTable()->Read(context, stream); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.large_scenery.price <= 0) @@ -61,15 +61,15 @@ void BannerObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void BannerObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.name = language_allocate_object_string(GetName()); - _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); } void BannerObject::Unload() { language_free_object_string(_legacyType.name); - gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image, GetImageTable().GetCount()); _legacyType.name = 0; _legacyType.image = 0; diff --git a/src/openrct2/object/EntranceObject.cpp b/src/openrct2/object/EntranceObject.cpp index 7f84072a16..c49b213b93 100644 --- a/src/openrct2/object/EntranceObject.cpp +++ b/src/openrct2/object/EntranceObject.cpp @@ -27,8 +27,8 @@ void EntranceObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _legacyType.scrolling_mode = stream->ReadValue(); _legacyType.text_height = stream->ReadValue(); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - GetImageTable()->Read(context, stream); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); + GetImageTable().Read(context, stream); // Fix issue #1705: The Medieval entrance from Time Twister has a straight banner, // but scrolls its text as if it a curved one. @@ -41,15 +41,15 @@ void EntranceObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void EntranceObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.string_idx = language_allocate_object_string(GetName()); - _legacyType.image_id = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image_id = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); } void EntranceObject::Unload() { language_free_object_string(_legacyType.string_idx); - gfx_object_free_images(_legacyType.image_id, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image_id, GetImageTable().GetCount()); _legacyType.string_idx = 0; _legacyType.image_id = 0; @@ -72,6 +72,6 @@ void EntranceObject::ReadJson(IReadObjectContext * context, const json_t * root) _legacyType.scrolling_mode = json_integer_value(json_object_get(properties, "scrollingMode")); _legacyType.text_height = json_integer_value(json_object_get(properties, "textHeight")); - ObjectJsonHelpers::LoadStrings(root, *GetStringTable()); - ObjectJsonHelpers::LoadImages(root, *GetImageTable()); + ObjectJsonHelpers::LoadStrings(root, GetStringTable()); + ObjectJsonHelpers::LoadImages(root, GetImageTable()); } diff --git a/src/openrct2/object/FootpathItemObject.cpp b/src/openrct2/object/FootpathItemObject.cpp index 8d5b0e87eb..e864d85cbb 100644 --- a/src/openrct2/object/FootpathItemObject.cpp +++ b/src/openrct2/object/FootpathItemObject.cpp @@ -34,12 +34,12 @@ void FootpathItemObject::ReadLegacy(IReadObjectContext * context, IStream * stre _legacyType.path_bit.scenery_tab_id = stream->ReadValue(); stream->Seek(1, STREAM_SEEK_CURRENT); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); rct_object_entry sgEntry = stream->ReadValue(); SetPrimarySceneryGroup(&sgEntry); - GetImageTable()->Read(context, stream); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.large_scenery.price <= 0) @@ -64,9 +64,9 @@ void FootpathItemObject::ReadLegacy(IReadObjectContext * context, IStream * stre void FootpathItemObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.name = language_allocate_object_string(GetName()); - _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.path_bit.scenery_tab_id = 0xFF; } @@ -74,7 +74,7 @@ void FootpathItemObject::Load() void FootpathItemObject::Unload() { language_free_object_string(_legacyType.name); - gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image, GetImageTable().GetCount()); _legacyType.name = 0; _legacyType.image = 0; @@ -162,6 +162,6 @@ void FootpathItemObject::ReadJson(IReadObjectContext * context, const json_t * r { "isAllowedOnSlope", PATH_BIT_FLAG_DONT_ALLOW_ON_SLOPE }, { "isTelevision", PATH_BIT_FLAG_IS_QUEUE_SCREEN }}); - ObjectJsonHelpers::LoadStrings(root, *GetStringTable()); - ObjectJsonHelpers::LoadImages(root, *GetImageTable()); + ObjectJsonHelpers::LoadStrings(root, GetStringTable()); + ObjectJsonHelpers::LoadImages(root, GetImageTable()); } diff --git a/src/openrct2/object/FootpathObject.cpp b/src/openrct2/object/FootpathObject.cpp index da8e1ec398..9595b7911d 100644 --- a/src/openrct2/object/FootpathObject.cpp +++ b/src/openrct2/object/FootpathObject.cpp @@ -29,8 +29,8 @@ void FootpathObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _legacyType.scrolling_mode = stream->ReadValue(); stream->Seek(1, STREAM_SEEK_CURRENT); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - GetImageTable()->Read(context, stream); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.support_type >= FOOTPATH_ENTRY_SUPPORT_TYPE_COUNT) @@ -41,16 +41,16 @@ void FootpathObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void FootpathObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.string_idx = language_allocate_object_string(GetName()); - _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.bridge_image = _legacyType.image + 109; } void FootpathObject::Unload() { language_free_object_string(_legacyType.string_idx); - gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image, GetImageTable().GetCount()); _legacyType.string_idx = 0; _legacyType.image = 0; @@ -82,6 +82,6 @@ void FootpathObject::ReadJson(IReadObjectContext * context, const json_t * root) { "hasElevatedPathImages", FOOTPATH_ENTRY_FLAG_HAS_PATH_BASE_SPRITE }, { "editorOnly", FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR } }); - ObjectJsonHelpers::LoadStrings(root, *GetStringTable()); - ObjectJsonHelpers::LoadImages(root, *GetImageTable()); + ObjectJsonHelpers::LoadStrings(root, GetStringTable()); + ObjectJsonHelpers::LoadImages(root, GetImageTable()); } diff --git a/src/openrct2/object/ImageTable.h b/src/openrct2/object/ImageTable.h index c2c6c1b10a..4d90b946f4 100644 --- a/src/openrct2/object/ImageTable.h +++ b/src/openrct2/object/ImageTable.h @@ -31,6 +31,9 @@ private: std::vector _entries; public: + ImageTable() = default; + ImageTable(const ImageTable &) = delete; + ImageTable & operator=(const ImageTable &) = delete; ~ImageTable(); void Read(IReadObjectContext * context, IStream * stream); diff --git a/src/openrct2/object/LargeSceneryObject.cpp b/src/openrct2/object/LargeSceneryObject.cpp index a11698e276..6dee19c775 100644 --- a/src/openrct2/object/LargeSceneryObject.cpp +++ b/src/openrct2/object/LargeSceneryObject.cpp @@ -33,7 +33,7 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre _legacyType.large_scenery.scrolling_mode = stream->ReadValue(); stream->Seek(4, STREAM_SEEK_CURRENT); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); rct_object_entry sgEntry = stream->ReadValue(); SetPrimarySceneryGroup(&sgEntry); @@ -47,7 +47,7 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre _tiles = ReadTiles(stream); - GetImageTable()->Read(context, stream); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.large_scenery.price <= 0) @@ -67,9 +67,9 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre void LargeSceneryObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.name = language_allocate_object_string(GetName()); - _baseImageId = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _baseImageId = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.image = _baseImageId; _legacyType.large_scenery.tiles = _tiles.data(); @@ -91,7 +91,7 @@ void LargeSceneryObject::Load() void LargeSceneryObject::Unload() { language_free_object_string(_legacyType.name); - gfx_object_free_images(_baseImageId, GetImageTable()->GetCount()); + gfx_object_free_images(_baseImageId, GetImageTable().GetCount()); _legacyType.name = 0; _legacyType.image = 0; diff --git a/src/openrct2/object/Object.cpp b/src/openrct2/object/Object.cpp index b5d301e6b6..fa83f26d0a 100644 --- a/src/openrct2/object/Object.cpp +++ b/src/openrct2/object/Object.cpp @@ -71,7 +71,7 @@ std::string Object::GetString(uint8 index) const auto sz = GetOverrideString(index); if (sz.empty()) { - sz = GetStringTable()->GetString(index); + sz = GetStringTable().GetString(index); } return sz; } diff --git a/src/openrct2/object/Object.h b/src/openrct2/object/Object.h index fb437c56e0..05e93481fb 100644 --- a/src/openrct2/object/Object.h +++ b/src/openrct2/object/Object.h @@ -111,17 +111,6 @@ struct rct_object_filters { assert_struct_size(rct_object_filters, 3); #pragma pack(pop) -enum OBJ_STRING_ID : uint8 -{ - OBJ_STRING_ID_UNKNOWN = 255, - OBJ_STRING_ID_NAME = 0, - OBJ_STRING_ID_DESCRIPTION, - OBJ_STRING_ID_SCENARIO_NAME = 0, - OBJ_STRING_ID_PARK_NAME = 1, - OBJ_STRING_ID_SCENARIO_DETAILS = 2, - OBJ_STRING_ID_CAPACITY = 2, -}; - interface IStream; struct ObjectRepositoryItem; struct rct_drawpixelinfo; @@ -148,9 +137,9 @@ private: ImageTable _imageTable; protected: - StringTable * GetStringTable() { return &_stringTable; } - const StringTable * GetStringTable() const { return &_stringTable; } - ImageTable * GetImageTable() { return &_imageTable; } + StringTable & GetStringTable() { return _stringTable; } + const StringTable & GetStringTable() const { return _stringTable; } + ImageTable & GetImageTable() { return _imageTable; } std::string GetOverrideString(uint8 index) const; std::string GetString(uint8 index) const; @@ -182,7 +171,7 @@ public: virtual void SetRepositoryItem(ObjectRepositoryItem * item) const { } - const ImageTable * GetImageTable() const { return &_imageTable; } + const ImageTable & GetImageTable() const { return _imageTable; } rct_object_entry GetScgWallsHeader(); rct_object_entry GetScgPathXHeader(); diff --git a/src/openrct2/object/ObjectJsonHelpers.cpp b/src/openrct2/object/ObjectJsonHelpers.cpp index 286cb325e1..a47bf77b4d 100644 --- a/src/openrct2/object/ObjectJsonHelpers.cpp +++ b/src/openrct2/object/ObjectJsonHelpers.cpp @@ -108,9 +108,9 @@ namespace ObjectJsonHelpers auto objectsPath = env->GetDirectoryPath(DIRBASE::RCT2, DIRID::OBJECT); auto objectPath = Path::Combine(objectsPath, name); auto obj = ObjectFactory::CreateObjectFromLegacyFile(objectPath.c_str()); - auto imgTable = static_cast(obj)->GetImageTable(); - auto numImages = imgTable->GetCount(); - auto images = imgTable->GetImages(); + auto &imgTable = static_cast(obj)->GetImageTable(); + auto numImages = imgTable.GetCount(); + auto images = imgTable.GetImages(); for (uint32 i = start; i < Math::Min(numImages, end); i++) { auto g1 = images[i]; diff --git a/src/openrct2/object/RideObject.cpp b/src/openrct2/object/RideObject.cpp index 7ca4546567..926dc1ac1d 100644 --- a/src/openrct2/object/RideObject.cpp +++ b/src/openrct2/object/RideObject.cpp @@ -78,9 +78,9 @@ void RideObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _legacyType.shop_item = stream->ReadValue(); _legacyType.shop_item_secondary = stream->ReadValue(); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_DESCRIPTION); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_CAPACITY); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_DESCRIPTION); + GetStringTable().Read(context, stream, OBJ_STRING_ID_CAPACITY); // Read preset colours, by default there are 32 _presetColours.count = stream->ReadValue(); @@ -110,7 +110,7 @@ void RideObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _peepLoadingPositionsCount[i] = numPeepLoadingPositions; } - GetImageTable()->Read(context, stream); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.excitement_multiplier > 75) @@ -131,11 +131,11 @@ void RideObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void RideObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.naming.name = language_allocate_object_string(GetName()); _legacyType.naming.description = language_allocate_object_string(GetDescription()); _legacyType.capacity = language_allocate_object_string(GetCapacity()); - _legacyType.images_offset = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.images_offset = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.vehicle_preset_list = &_presetColours; sint32 cur_vehicle_images_offset = _legacyType.images_offset + MAX_RIDE_TYPES_PER_RIDE_ENTRY; @@ -300,7 +300,7 @@ void RideObject::Unload() language_free_object_string(_legacyType.naming.name); language_free_object_string(_legacyType.naming.description); language_free_object_string(_legacyType.capacity); - gfx_object_free_images(_legacyType.images_offset, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.images_offset, GetImageTable().GetCount()); _legacyType.naming.name = 0; _legacyType.naming.description = 0; @@ -730,6 +730,6 @@ void RideObject::ReadJson(IReadObjectContext * context, const json_t * root) vehicle0->sprite_flags |= VEHICLE_SPRITE_FLAG_FLAT; vehicle0->base_image_id = 0; - ObjectJsonHelpers::LoadStrings(root, *GetStringTable()); - ObjectJsonHelpers::LoadImages(root, *GetImageTable()); + ObjectJsonHelpers::LoadStrings(root, GetStringTable()); + ObjectJsonHelpers::LoadImages(root, GetImageTable()); } diff --git a/src/openrct2/object/SceneryGroupObject.cpp b/src/openrct2/object/SceneryGroupObject.cpp index 8db99f469f..e137461e21 100644 --- a/src/openrct2/object/SceneryGroupObject.cpp +++ b/src/openrct2/object/SceneryGroupObject.cpp @@ -40,16 +40,16 @@ void SceneryGroupObject::ReadLegacy(IReadObjectContext * context, IStream * stre void SceneryGroupObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.name = language_allocate_object_string(GetName()); - _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.entry_count = 0; } void SceneryGroupObject::Unload() { language_free_object_string(_legacyType.name); - gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image, GetImageTable().GetCount()); _legacyType.name = 0; _legacyType.image = 0; diff --git a/src/openrct2/object/SmallSceneryObject.cpp b/src/openrct2/object/SmallSceneryObject.cpp index 357bf3d243..24a2e43bec 100644 --- a/src/openrct2/object/SmallSceneryObject.cpp +++ b/src/openrct2/object/SmallSceneryObject.cpp @@ -39,7 +39,7 @@ void SmallSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre _legacyType.small_scenery.num_frames = stream->ReadValue(); _legacyType.small_scenery.scenery_tab_id = 0xFF; - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); rct_object_entry sgEntry = stream->ReadValue(); SetPrimarySceneryGroup(&sgEntry); @@ -49,7 +49,7 @@ void SmallSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre _frameOffsets = ReadFrameOffsets(stream); } - GetImageTable()->Read(context, stream); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.small_scenery.price <= 0) @@ -69,9 +69,9 @@ void SmallSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre void SmallSceneryObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.name = language_allocate_object_string(GetName()); - _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.small_scenery.scenery_tab_id = 0xFF; @@ -86,7 +86,7 @@ void SmallSceneryObject::Load() void SmallSceneryObject::Unload() { language_free_object_string(_legacyType.name); - gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image, GetImageTable().GetCount()); _legacyType.name = 0; _legacyType.image = 0; diff --git a/src/openrct2/object/StexObject.cpp b/src/openrct2/object/StexObject.cpp index 88137fb98f..810834e099 100644 --- a/src/openrct2/object/StexObject.cpp +++ b/src/openrct2/object/StexObject.cpp @@ -25,14 +25,14 @@ void StexObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _legacyType.var_06 = stream->ReadValue(); stream->Seek(1, STREAM_SEEK_CURRENT); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_SCENARIO_NAME); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_PARK_NAME); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_SCENARIO_DETAILS); + GetStringTable().Read(context, stream, OBJ_STRING_ID_SCENARIO_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_PARK_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_SCENARIO_DETAILS); } void StexObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.scenario_name = language_allocate_object_string(GetScenarioName()); _legacyType.park_name = language_allocate_object_string(GetParkName()); _legacyType.details = language_allocate_object_string(GetScenarioDetails()); @@ -64,15 +64,15 @@ std::string StexObject::GetName() const std::string StexObject::GetScenarioName() const { - return GetStringTable()->GetString(OBJ_STRING_ID_SCENARIO_NAME); + return GetStringTable().GetString(OBJ_STRING_ID_SCENARIO_NAME); } std::string StexObject::GetScenarioDetails() const { - return GetStringTable()->GetString(OBJ_STRING_ID_SCENARIO_DETAILS); + return GetStringTable().GetString(OBJ_STRING_ID_SCENARIO_DETAILS); } std::string StexObject::GetParkName() const { - return GetStringTable()->GetString(OBJ_STRING_ID_PARK_NAME); + return GetStringTable().GetString(OBJ_STRING_ID_PARK_NAME); } diff --git a/src/openrct2/object/StringTable.h b/src/openrct2/object/StringTable.h index c370971bbe..34fa8de21a 100644 --- a/src/openrct2/object/StringTable.h +++ b/src/openrct2/object/StringTable.h @@ -19,14 +19,27 @@ #include #include #include "../common.h" +#include "../localisation/Language.h" interface IReadObjectContext; interface IStream; +enum OBJ_STRING_ID : uint8 +{ + OBJ_STRING_ID_UNKNOWN = 255, + OBJ_STRING_ID_NAME = 0, + OBJ_STRING_ID_DESCRIPTION, + OBJ_STRING_ID_SCENARIO_NAME = 0, + OBJ_STRING_ID_PARK_NAME = 1, + OBJ_STRING_ID_SCENARIO_DETAILS = 2, + OBJ_STRING_ID_CAPACITY = 2, + OBJ_STRING_ID_VEHICLE_NAME = 3, +}; + struct StringTableEntry { - uint8 Id; - uint8 LanguageId; + uint8 Id = OBJ_STRING_ID_UNKNOWN; + uint8 LanguageId = LANGUAGE_UNDEFINED; std::string Text; }; @@ -36,6 +49,10 @@ private: std::vector _strings; public: + StringTable() = default; + StringTable(const StringTable &) = delete; + StringTable & operator=(const StringTable &) = delete; + void Read(IReadObjectContext * context, IStream * stream, uint8 id); void Sort(); std::string GetString(uint8 id) const; diff --git a/src/openrct2/object/WallObject.cpp b/src/openrct2/object/WallObject.cpp index d6100b2d21..4f1ad39de8 100644 --- a/src/openrct2/object/WallObject.cpp +++ b/src/openrct2/object/WallObject.cpp @@ -31,12 +31,12 @@ void WallObject::ReadLegacy(IReadObjectContext * context, IStream * stream) _legacyType.wall.scenery_tab_id = stream->ReadValue(); _legacyType.wall.scrolling_mode = stream->ReadValue(); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); rct_object_entry sgEntry = stream->ReadValue(); SetPrimarySceneryGroup(&sgEntry); - GetImageTable()->Read(context, stream); + GetImageTable().Read(context, stream); // Validate properties if (_legacyType.wall.price <= 0) @@ -47,15 +47,15 @@ void WallObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void WallObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.name = language_allocate_object_string(GetName()); - _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); } void WallObject::Unload() { language_free_object_string(_legacyType.name); - gfx_object_free_images(_legacyType.image, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image, GetImageTable().GetCount()); _legacyType.name = 0; _legacyType.image = 0; diff --git a/src/openrct2/object/WaterObject.cpp b/src/openrct2/object/WaterObject.cpp index e90e107c47..70fa3ee34e 100644 --- a/src/openrct2/object/WaterObject.cpp +++ b/src/openrct2/object/WaterObject.cpp @@ -25,15 +25,15 @@ void WaterObject::ReadLegacy(IReadObjectContext * context, IStream * stream) stream->Seek(14, STREAM_SEEK_CURRENT); _legacyType.flags = stream->ReadValue(); - GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); - GetImageTable()->Read(context, stream); + GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); + GetImageTable().Read(context, stream); } void WaterObject::Load() { - GetStringTable()->Sort(); + GetStringTable().Sort(); _legacyType.string_idx = language_allocate_object_string(GetName()); - _legacyType.image_id = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); + _legacyType.image_id = gfx_object_allocate_images(GetImageTable().GetImages(), GetImageTable().GetCount()); _legacyType.palette_index_1 = _legacyType.image_id + 1; _legacyType.palette_index_2 = _legacyType.image_id + 4; @@ -42,7 +42,7 @@ void WaterObject::Load() void WaterObject::Unload() { - gfx_object_free_images(_legacyType.image_id, GetImageTable()->GetCount()); + gfx_object_free_images(_legacyType.image_id, GetImageTable().GetCount()); language_free_object_string(_legacyType.string_idx); _legacyType.string_idx = 0;