From 2d037fb3aefbf8cd46b43a4b2f2c021c0de70320 Mon Sep 17 00:00:00 2001 From: Ted John Date: Thu, 7 Dec 2017 23:50:44 +0000 Subject: [PATCH] Read JSON for park entrance objects --- src/openrct2/object/EntranceObject.cpp | 20 ++++++++++++++++++-- src/openrct2/object/EntranceObject.h | 1 + src/openrct2/object/ObjectFactory.cpp | 19 ++++++++++++++++--- 3 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/openrct2/object/EntranceObject.cpp b/src/openrct2/object/EntranceObject.cpp index 1d31029372..814a34fedf 100644 --- a/src/openrct2/object/EntranceObject.cpp +++ b/src/openrct2/object/EntranceObject.cpp @@ -16,10 +16,10 @@ #include "../core/IStream.hpp" #include "../core/String.hpp" -#include "EntranceObject.h" - #include "../drawing/Drawing.h" #include "../localisation/Localisation.h" +#include "EntranceObject.h" +#include "ObjectJsonHelpers.h" void EntranceObject::ReadLegacy(IReadObjectContext * context, IStream * stream) { @@ -65,3 +65,19 @@ void EntranceObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 h gfx_draw_sprite(dpi, imageId + 0, x + 0, y + 28, 0); gfx_draw_sprite(dpi, imageId + 2, x + 32, y + 44, 0); } + +void EntranceObject::ReadJson(IReadObjectContext * context, const json_t * root) +{ + // Strings + auto stringTable = GetStringTable(); + auto jsonStrings = json_object_get(root, "strings"); + auto jsonName = json_object_get(jsonStrings, "name"); + stringTable->SetString(0, 0, json_string_value(json_object_get(jsonName, "en-GB"))); + + auto properties = json_object_get(root, "properties"); + _legacyType.scrolling_mode = json_integer_value(json_object_get(properties, "scrollingMode")); + _legacyType.text_height = json_integer_value(json_object_get(properties, "textHeight")); + + auto imageTable = GetImageTable(); + ObjectJsonHelpers::LoadImages(root, *imageTable); +} diff --git a/src/openrct2/object/EntranceObject.h b/src/openrct2/object/EntranceObject.h index 4af4a02985..6d6c0b65cb 100644 --- a/src/openrct2/object/EntranceObject.h +++ b/src/openrct2/object/EntranceObject.h @@ -31,6 +31,7 @@ public: void * GetLegacyData() override { return &_legacyType; } void ReadLegacy(IReadObjectContext * context, IStream * stream) override; + void ReadJson(IReadObjectContext * context, const json_t * root) override; void Load() override; void Unload() override; diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index 7adac8c280..7adbf45148 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -205,6 +205,19 @@ namespace ObjectFactory return result; } + static uint8 ParseObjectType(const std::string &s) + { + if (s == "ride") + { + return OBJECT_TYPE_RIDE; + } + else if (s == "park_entrance") + { + return OBJECT_TYPE_PARK_ENTRANCE; + } + return 0xFF; + } + Object * CreateObjectFromJsonFile(const std::string &path) { log_verbose("CreateObjectFromJsonFile(\"%s\")", path.c_str()); @@ -216,8 +229,8 @@ namespace ObjectFactory auto jObjectType = json_object_get(jRoot, "objectType"); if (json_is_string(jObjectType)) { - auto objectType = std::string(json_string_value(jObjectType)); - if (objectType == "ride") + auto objectType = ParseObjectType(json_string_value(jObjectType)); + if (objectType != 0xFF) { auto id = json_string_value(json_object_get(jRoot, "id")); @@ -233,7 +246,7 @@ namespace ObjectFactory auto minLength = std::min(8, originalName.length()); memcpy(entry.name, originalName.c_str(), minLength); - result = new RideObject(entry); + result = CreateObject(entry); auto readContext = ReadObjectContext(id); result->ReadJson(&readContext, jRoot); if (readContext.WasError())