mirror of https://github.com/OpenRCT2/OpenRCT2.git
Return image and string table by reference
This commit is contained in:
parent
c3f075d18c
commit
ec446ac9d6
|
@ -31,12 +31,12 @@ void BannerObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
_legacyType.banner.scenery_tab_id = stream->ReadValue<uint8>();
|
||||
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<rct_object_entry>();
|
||||
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;
|
||||
|
|
|
@ -27,8 +27,8 @@ void EntranceObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
_legacyType.scrolling_mode = stream->ReadValue<uint8>();
|
||||
_legacyType.text_height = stream->ReadValue<uint8>();
|
||||
|
||||
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());
|
||||
}
|
||||
|
|
|
@ -34,12 +34,12 @@ void FootpathItemObject::ReadLegacy(IReadObjectContext * context, IStream * stre
|
|||
_legacyType.path_bit.scenery_tab_id = stream->ReadValue<uint8>();
|
||||
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<rct_object_entry>();
|
||||
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());
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@ void FootpathObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
_legacyType.scrolling_mode = stream->ReadValue<uint8>();
|
||||
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());
|
||||
}
|
||||
|
|
|
@ -31,6 +31,9 @@ private:
|
|||
std::vector<rct_g1_element> _entries;
|
||||
|
||||
public:
|
||||
ImageTable() = default;
|
||||
ImageTable(const ImageTable &) = delete;
|
||||
ImageTable & operator=(const ImageTable &) = delete;
|
||||
~ImageTable();
|
||||
|
||||
void Read(IReadObjectContext * context, IStream * stream);
|
||||
|
|
|
@ -33,7 +33,7 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre
|
|||
_legacyType.large_scenery.scrolling_mode = stream->ReadValue<uint8>();
|
||||
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<rct_object_entry>();
|
||||
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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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<const Object *>(obj)->GetImageTable();
|
||||
auto numImages = imgTable->GetCount();
|
||||
auto images = imgTable->GetImages();
|
||||
auto &imgTable = static_cast<const Object *>(obj)->GetImageTable();
|
||||
auto numImages = imgTable.GetCount();
|
||||
auto images = imgTable.GetImages();
|
||||
for (uint32 i = start; i < Math::Min(numImages, end); i++)
|
||||
{
|
||||
auto g1 = images[i];
|
||||
|
|
|
@ -78,9 +78,9 @@ void RideObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
_legacyType.shop_item = stream->ReadValue<uint8>();
|
||||
_legacyType.shop_item_secondary = stream->ReadValue<uint8>();
|
||||
|
||||
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<uint8>();
|
||||
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -39,7 +39,7 @@ void SmallSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre
|
|||
_legacyType.small_scenery.num_frames = stream->ReadValue<uint16>();
|
||||
_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<rct_object_entry>();
|
||||
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;
|
||||
|
|
|
@ -25,14 +25,14 @@ void StexObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
_legacyType.var_06 = stream->ReadValue<uint8>();
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -19,14 +19,27 @@
|
|||
#include <string>
|
||||
#include <vector>
|
||||
#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<StringTableEntry> _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;
|
||||
|
|
|
@ -31,12 +31,12 @@ void WallObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
_legacyType.wall.scenery_tab_id = stream->ReadValue<uint8>();
|
||||
_legacyType.wall.scrolling_mode = stream->ReadValue<uint8>();
|
||||
|
||||
GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME);
|
||||
GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME);
|
||||
|
||||
rct_object_entry sgEntry = stream->ReadValue<rct_object_entry>();
|
||||
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;
|
||||
|
|
|
@ -25,15 +25,15 @@ void WaterObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
|||
stream->Seek(14, STREAM_SEEK_CURRENT);
|
||||
_legacyType.flags = stream->ReadValue<uint16>();
|
||||
|
||||
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;
|
||||
|
|
Loading…
Reference in New Issue