From 161a8359fc8d822d38ddd2dc7dec6823940ea7e5 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Sun, 21 Sep 2025 00:12:23 +0200 Subject: [PATCH] Create function to create object from file --- src/openrct2/object/ObjectFactory.cpp | 22 +++++++++++++++++++ src/openrct2/object/ObjectFactory.h | 2 ++ src/openrct2/object/ObjectRepository.cpp | 28 ++---------------------- 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index 0b6184b601..65c1acd24e 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -264,6 +264,28 @@ namespace OpenRCT2::ObjectFactory } } + std::unique_ptr CreateObjectFromFile(IObjectRepository& objectRepository, u8string_view path, bool loadImages) + { + std::unique_ptr object; + auto extension = Path::GetExtension(path); + if (String::iequals(extension, ".json")) + { + auto pathStr = u8string(path); + object = ObjectFactory::CreateObjectFromJsonFile(objectRepository, pathStr, loadImages); + } + else if (String::iequals(extension, ".parkobj")) + { + object = ObjectFactory::CreateObjectFromZipFile(objectRepository, path, loadImages); + } + else + { + auto pathStr = u8string(path); + object = ObjectFactory::CreateObjectFromLegacyFile(objectRepository, pathStr.c_str(), loadImages); + } + + return object; + } + std::unique_ptr CreateObjectFromLegacyFile(IObjectRepository& objectRepository, const utf8* path, bool loadImages) { LOG_VERBOSE("CreateObjectFromLegacyFile(..., \"%s\")", path); diff --git a/src/openrct2/object/ObjectFactory.h b/src/openrct2/object/ObjectFactory.h index 3510919f8e..64f4421cd7 100644 --- a/src/openrct2/object/ObjectFactory.h +++ b/src/openrct2/object/ObjectFactory.h @@ -24,6 +24,8 @@ namespace OpenRCT2 namespace OpenRCT2::ObjectFactory { + [[nodiscard]] std::unique_ptr CreateObjectFromFile( + IObjectRepository& objectRepository, u8string_view path, bool loadImages); [[nodiscard]] std::unique_ptr CreateObjectFromLegacyFile( IObjectRepository& objectRepository, const utf8* path, bool loadImages); [[nodiscard]] std::unique_ptr CreateObjectFromLegacyData( diff --git a/src/openrct2/object/ObjectRepository.cpp b/src/openrct2/object/ObjectRepository.cpp index 0bb04d95fc..fb0d2bb1b1 100644 --- a/src/openrct2/object/ObjectRepository.cpp +++ b/src/openrct2/object/ObjectRepository.cpp @@ -98,20 +98,7 @@ namespace OpenRCT2 public: std::optional Create([[maybe_unused]] int32_t language, const std::string& path) const override { - std::unique_ptr object; - auto extension = Path::GetExtension(path); - if (String::iequals(extension, ".json")) - { - object = ObjectFactory::CreateObjectFromJsonFile(_objectRepository, path, false); - } - else if (String::iequals(extension, ".parkobj")) - { - object = ObjectFactory::CreateObjectFromZipFile(_objectRepository, path, false); - } - else - { - object = ObjectFactory::CreateObjectFromLegacyFile(_objectRepository, path.c_str(), false); - } + std::unique_ptr object = ObjectFactory::CreateObjectFromFile(_objectRepository, path, false); // All official DAT files have a JSON object counterpart. Avoid loading the obsolete .DAT versions, // which can happen if the user copies the official DAT objects to their custom content folder. @@ -271,18 +258,7 @@ namespace OpenRCT2 std::unique_ptr LoadObject(const ObjectRepositoryItem* ori) override { Guard::ArgumentNotNull(ori, GUARD_LINE); - - auto extension = Path::GetExtension(ori->Path); - if (String::iequals(extension, ".json")) - { - return ObjectFactory::CreateObjectFromJsonFile(*this, ori->Path, !gOpenRCT2NoGraphics); - } - if (String::iequals(extension, ".parkobj")) - { - return ObjectFactory::CreateObjectFromZipFile(*this, ori->Path, !gOpenRCT2NoGraphics); - } - - return ObjectFactory::CreateObjectFromLegacyFile(*this, ori->Path.c_str(), !gOpenRCT2NoGraphics); + return ObjectFactory::CreateObjectFromFile(*this, ori->Path, !gOpenRCT2NoGraphics); } void RegisterLoadedObject(const ObjectRepositoryItem* ori, std::unique_ptr&& object) override