From edb4a4a8228fcf4c283de7760d9d536c1abde507 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 11 Jul 2016 22:50:55 +0100 Subject: [PATCH] fix get capacity string for vehicles --- src/object/BannerObject.cpp | 1 + src/object/EntranceObject.cpp | 1 + src/object/FootpathItemObject.cpp | 1 + src/object/FootpathObject.cpp | 1 + src/object/LargeSceneryObject.cpp | 1 + src/object/ObjectManager.cpp | 7 +++++++ src/object/ObjectManager.h | 1 + src/object/ObjectRepository.cpp | 14 ++++++++++++++ src/object/ObjectRepository.h | 1 + src/object/RideObject.cpp | 1 + src/object/SceneryGroupObject.cpp | 1 + src/object/SmallSceneryObject.cpp | 1 + src/object/StexObject.cpp | 1 + src/object/StringTable.h | 4 +--- src/object/WallObject.cpp | 1 + src/object/WaterObject.cpp | 1 + src/windows/ride.c | 13 ++++++++++--- 17 files changed, 45 insertions(+), 6 deletions(-) diff --git a/src/object/BannerObject.cpp b/src/object/BannerObject.cpp index b9d23f33a0..4daa3d3fc5 100644 --- a/src/object/BannerObject.cpp +++ b/src/object/BannerObject.cpp @@ -53,6 +53,7 @@ void BannerObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void BannerObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); } diff --git a/src/object/EntranceObject.cpp b/src/object/EntranceObject.cpp index b2a22e62c0..2d4656f9bd 100644 --- a/src/object/EntranceObject.cpp +++ b/src/object/EntranceObject.cpp @@ -40,6 +40,7 @@ void EntranceObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void EntranceObject::Load() { + GetStringTable()->Sort(); _legacyType.string_idx = language_allocate_object_string(GetName()); _legacyType.image_id = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); } diff --git a/src/object/FootpathItemObject.cpp b/src/object/FootpathItemObject.cpp index e567e57284..7a24d7a6a1 100644 --- a/src/object/FootpathItemObject.cpp +++ b/src/object/FootpathItemObject.cpp @@ -53,6 +53,7 @@ void FootpathItemObject::ReadLegacy(IReadObjectContext * context, IStream * stre void FootpathItemObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); diff --git a/src/object/FootpathObject.cpp b/src/object/FootpathObject.cpp index 5e875cf5a7..b892d2612f 100644 --- a/src/object/FootpathObject.cpp +++ b/src/object/FootpathObject.cpp @@ -49,6 +49,7 @@ void FootpathObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void FootpathObject::Load() { + GetStringTable()->Sort(); _legacyType.string_idx = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.bridge_image = _legacyType.image + 109; diff --git a/src/object/LargeSceneryObject.cpp b/src/object/LargeSceneryObject.cpp index 7af89b614b..47831c4e56 100644 --- a/src/object/LargeSceneryObject.cpp +++ b/src/object/LargeSceneryObject.cpp @@ -81,6 +81,7 @@ void LargeSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre void LargeSceneryObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _baseImageId = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.image = _baseImageId; diff --git a/src/object/ObjectManager.cpp b/src/object/ObjectManager.cpp index e162744130..70b18484a9 100644 --- a/src/object/ObjectManager.cpp +++ b/src/object/ObjectManager.cpp @@ -528,6 +528,13 @@ IObjectManager * GetObjectManager() extern "C" { + void * object_manager_get_loaded_object_by_index(size_t index) + { + IObjectManager * objectManager = GetObjectManager(); + Object * loadedObject = objectManager->GetLoadedObject(index); + return (void *)loadedObject; + } + void * object_manager_get_loaded_object(const rct_object_entry * entry) { IObjectManager * objectManager = GetObjectManager(); diff --git a/src/object/ObjectManager.h b/src/object/ObjectManager.h index efa219dba6..8dbeae0d86 100644 --- a/src/object/ObjectManager.h +++ b/src/object/ObjectManager.h @@ -51,6 +51,7 @@ IObjectManager * GetObjectManager(); #else +void * object_manager_get_loaded_object_by_index(size_t index); void * object_manager_get_loaded_object(const rct_object_entry * entry); uint8 object_manager_get_loaded_object_entry_index(const void * loadedObject); void * object_manager_load_object(const rct_object_entry * entry); diff --git a/src/object/ObjectRepository.cpp b/src/object/ObjectRepository.cpp index 46c84b5009..1aff117211 100644 --- a/src/object/ObjectRepository.cpp +++ b/src/object/ObjectRepository.cpp @@ -903,6 +903,20 @@ extern "C" } } + const utf8 * object_get_capacity(const void * object) + { + const Object * baseObject = (const Object *)object; + switch (baseObject->GetObjectType()) { + case OBJECT_TYPE_RIDE: + { + auto rideObject = static_cast(baseObject); + return rideObject->GetCapacity(); + } + default: + return ""; + } + } + void object_draw_preview(const void * object, rct_drawpixelinfo * dpi, sint32 width, sint32 height) { const Object * baseObject = (const Object *)object; diff --git a/src/object/ObjectRepository.h b/src/object/ObjectRepository.h index 6aaa978e22..8f8eaf216e 100644 --- a/src/object/ObjectRepository.h +++ b/src/object/ObjectRepository.h @@ -89,6 +89,7 @@ void * object_repository_load_object(const rct_object_e void object_delete(void * object); const utf8 * object_get_description(const void * object); +const utf8 * object_get_capacity(const void * object); void object_draw_preview(const void * object, rct_drawpixelinfo * dpi, sint32 width, sint32 height); #endif diff --git a/src/object/RideObject.cpp b/src/object/RideObject.cpp index b8d773eaa1..ca6d6d9756 100644 --- a/src/object/RideObject.cpp +++ b/src/object/RideObject.cpp @@ -129,6 +129,7 @@ void RideObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void RideObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _legacyType.description = language_allocate_object_string(GetDescription()); _legacyType.images_offset = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); diff --git a/src/object/SceneryGroupObject.cpp b/src/object/SceneryGroupObject.cpp index 7633805168..a0120220dc 100644 --- a/src/object/SceneryGroupObject.cpp +++ b/src/object/SceneryGroupObject.cpp @@ -55,6 +55,7 @@ void SceneryGroupObject::ReadLegacy(IReadObjectContext * context, IStream * stre void SceneryGroupObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.entry_count = 0; diff --git a/src/object/SmallSceneryObject.cpp b/src/object/SmallSceneryObject.cpp index 79d08c840d..f89b8d23a4 100644 --- a/src/object/SmallSceneryObject.cpp +++ b/src/object/SmallSceneryObject.cpp @@ -79,6 +79,7 @@ void SmallSceneryObject::ReadLegacy(IReadObjectContext * context, IStream * stre void SmallSceneryObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); diff --git a/src/object/StexObject.cpp b/src/object/StexObject.cpp index 3abb215ed5..93e7471290 100644 --- a/src/object/StexObject.cpp +++ b/src/object/StexObject.cpp @@ -42,6 +42,7 @@ void StexObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void StexObject::Load() { + 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()); diff --git a/src/object/StringTable.h b/src/object/StringTable.h index 38895a4c2e..8c336a8bce 100644 --- a/src/object/StringTable.h +++ b/src/object/StringTable.h @@ -38,8 +38,6 @@ public: ~StringTable(); void Read(IReadObjectContext * context, IStream * stream, uint8 id); + void Sort(); const utf8 * GetString(uint8 id) const; - -private: - void Sort(); }; \ No newline at end of file diff --git a/src/object/WallObject.cpp b/src/object/WallObject.cpp index fc92db4b89..93c5eee0bd 100644 --- a/src/object/WallObject.cpp +++ b/src/object/WallObject.cpp @@ -56,6 +56,7 @@ void WallObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void WallObject::Load() { + GetStringTable()->Sort(); _legacyType.name = language_allocate_object_string(GetName()); _legacyType.image = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); } diff --git a/src/object/WaterObject.cpp b/src/object/WaterObject.cpp index da7d3e9dd6..cf2ee24a3c 100644 --- a/src/object/WaterObject.cpp +++ b/src/object/WaterObject.cpp @@ -41,6 +41,7 @@ void WaterObject::ReadLegacy(IReadObjectContext * context, IStream * stream) void WaterObject::Load() { + GetStringTable()->Sort(); _legacyType.string_idx = language_allocate_object_string(GetName()); _legacyType.image_id = gfx_object_allocate_images(GetImageTable()->GetImages(), GetImageTable()->GetCount()); _legacyType.var_06 = _legacyType.image_id + 1; diff --git a/src/windows/ride.c b/src/windows/ride.c index e0803f78e2..1a8e5b3112 100644 --- a/src/windows/ride.c +++ b/src/windows/ride.c @@ -26,6 +26,8 @@ #include "../interface/window.h" #include "../localisation/date.h" #include "../localisation/localisation.h" +#include "../object/ObjectManager.h" +#include "../object/ObjectRepository.h" #include "../peep/staff.h" #include "../ride/ride.h" #include "../ride/ride_data.h" @@ -2590,7 +2592,6 @@ static void window_ride_vehicle_paint(rct_window *w, rct_drawpixelinfo *dpi) { rct_ride *ride; rct_ride_entry *rideEntry; - rct_string_id stringId; int x, y; sint16 factor; @@ -2608,8 +2609,14 @@ static void window_ride_vehicle_paint(rct_window *w, rct_drawpixelinfo *dpi) y += 5; // Capacity - stringId = rideEntry->description + 1; - gfx_draw_string_left(dpi, STR_CAPACITY, &stringId, 0, x, y); + void * loadedObject = object_manager_get_loaded_object_by_index(ride->subtype); + if (loadedObject != NULL) + { + const utf8 * capacity = object_get_capacity(loadedObject); + set_format_arg(0, rct_string_id, STR_STRING); + set_format_arg(2, utf8 *, capacity); + gfx_draw_string_left(dpi, STR_CAPACITY, gCommonFormatArgs, 0, x, y); + } y += 15; if ((!(rideEntry->flags & RIDE_ENTRY_FLAG_SEPARATE_RIDE) || rideTypeShouldLoseSeparateFlag(rideEntry)) && var_496(w) > 1) {