mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-10 09:32:29 +01:00
Search for object file, case insensitive
This commit is contained in:
@@ -97,5 +97,5 @@ void BannerObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
||||
SetPrimarySceneryGroup(ObjectJsonHelpers::GetString(json_object_get(properties, "sceneryGroup")));
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
@@ -73,5 +73,5 @@ void EntranceObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
||||
_legacyType.text_height = json_integer_value(json_object_get(properties, "textHeight"));
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
@@ -118,5 +118,5 @@ void FootpathItemObject::ReadJson(IReadObjectContext * context, const json_t * r
|
||||
{ "isTelevision", PATH_BIT_FLAG_IS_QUEUE_SCREEN }});
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
@@ -83,5 +83,5 @@ void FootpathObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
||||
{ "editorOnly", FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR } });
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
@@ -163,7 +163,7 @@ void LargeSceneryObject::ReadJson(IReadObjectContext * context, const json_t * r
|
||||
SetPrimarySceneryGroup(ObjectJsonHelpers::GetString(json_object_get(properties, "sceneryGroup")));
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
std::vector<rct_large_scenery_tile> LargeSceneryObject::ReadJsonTiles(const json_t * jTiles)
|
||||
|
||||
@@ -129,8 +129,6 @@ namespace ObjectFactory
|
||||
}
|
||||
catch (const std::exception &)
|
||||
{
|
||||
Console::Error::WriteLine("Unable to open or read '%s'", path);
|
||||
|
||||
delete result;
|
||||
result = nullptr;
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include <cstring>
|
||||
#include <unordered_map>
|
||||
#include "../Context.h"
|
||||
#include "../core/File.h"
|
||||
#include "../core/FileScanner.h"
|
||||
#include "../core/Math.hpp"
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/Path.hpp"
|
||||
@@ -205,12 +207,36 @@ namespace ObjectJsonHelpers
|
||||
return result;
|
||||
}
|
||||
|
||||
static std::vector<rct_g1_element> LoadObjectImages(const std::string &name, uint32 start, uint32 end)
|
||||
static std::string FindLegacyObject(const std::string &name)
|
||||
{
|
||||
std::vector<rct_g1_element> result;
|
||||
const auto env = GetContext()->GetPlatformEnvironment();
|
||||
auto objectsPath = env->GetDirectoryPath(DIRBASE::RCT2, DIRID::OBJECT);
|
||||
auto objectPath = Path::Combine(objectsPath, name);
|
||||
#ifndef _WIN32
|
||||
if (!File::Exists(objectPath))
|
||||
{
|
||||
// UNIX based systems need to search for any files with the same name
|
||||
// due to case sensitivity.
|
||||
auto filter = Path::Combine(objectsPath, "*.dat");
|
||||
auto scanner = std::unique_ptr<IFileScanner>(Path::ScanDirectory(filter, false));
|
||||
while (scanner->Next())
|
||||
{
|
||||
auto relativePath = scanner->GetPathRelative();
|
||||
if (String::Equals(relativePath, name, true))
|
||||
{
|
||||
objectPath = scanner->GetPath();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
return objectPath;
|
||||
}
|
||||
|
||||
static std::vector<rct_g1_element> LoadObjectImages(IReadObjectContext * context, const std::string &name, uint32 start, uint32 end)
|
||||
{
|
||||
std::vector<rct_g1_element> result;
|
||||
auto objectPath = FindLegacyObject(name);
|
||||
auto obj = ObjectFactory::CreateObjectFromLegacyFile(objectPath.c_str());
|
||||
if (obj != nullptr)
|
||||
{
|
||||
@@ -230,14 +256,19 @@ namespace ObjectJsonHelpers
|
||||
}
|
||||
else
|
||||
{
|
||||
log_warning("Unable to open '%s'", objectPath.c_str());
|
||||
std::string msg = "Unable to open '" + objectPath + "'";
|
||||
context->LogWarning(OBJECT_ERROR_INVALID_PROPERTY, msg.c_str());
|
||||
}
|
||||
|
||||
// Add place holders
|
||||
auto placeHolders = (size_t)(end - start) - result.size();
|
||||
if (placeHolders > 0)
|
||||
{
|
||||
log_warning("Adding %d placeholders", placeHolders);
|
||||
if (obj != nullptr)
|
||||
{
|
||||
std::string msg = "Adding " + std::to_string(placeHolders) + " placeholders";
|
||||
context->LogWarning(OBJECT_ERROR_INVALID_PROPERTY, msg.c_str());
|
||||
}
|
||||
for (size_t i = 0; i < placeHolders; i++)
|
||||
{
|
||||
auto g1 = rct_g1_element{};
|
||||
@@ -247,7 +278,7 @@ namespace ObjectJsonHelpers
|
||||
return result;
|
||||
}
|
||||
|
||||
static std::vector<rct_g1_element> ParseImages(std::string s)
|
||||
static std::vector<rct_g1_element> ParseImages(IReadObjectContext * context, std::string s)
|
||||
{
|
||||
std::vector<rct_g1_element> result;
|
||||
if (s.empty())
|
||||
@@ -293,7 +324,7 @@ namespace ObjectJsonHelpers
|
||||
imgEnd = range.back();
|
||||
}
|
||||
}
|
||||
return LoadObjectImages(name, imgStart, imgEnd);
|
||||
return LoadObjectImages(context, name, imgStart, imgEnd);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@@ -332,13 +363,13 @@ namespace ObjectJsonHelpers
|
||||
}
|
||||
}
|
||||
|
||||
void LoadImages(const json_t * root, ImageTable &imageTable)
|
||||
void LoadImages(IReadObjectContext * context, const json_t * root, ImageTable &imageTable)
|
||||
{
|
||||
auto jsonImages = json_object_get(root, "images");
|
||||
auto imageElements = GetJsonStringArray(jsonImages);
|
||||
for (const auto &ie : imageElements)
|
||||
{
|
||||
auto images = ParseImages(ie);
|
||||
auto images = ParseImages(context, ie);
|
||||
for (const auto &g1 : images)
|
||||
{
|
||||
imageTable.AddImage(&g1);
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace ObjectJsonHelpers
|
||||
uint8 ParseCursor(const std::string &s, uint8 defaultValue);
|
||||
rct_object_entry ParseObjectEntry(const std::string & s);
|
||||
void LoadStrings(const json_t * root, StringTable &stringTable);
|
||||
void LoadImages(const json_t * root, ImageTable &imageTable);
|
||||
void LoadImages(IReadObjectContext * context, const json_t * root, ImageTable &imageTable);
|
||||
|
||||
template<typename T>
|
||||
T GetFlags(const json_t * obj, std::initializer_list<std::pair<std::string, T>> list)
|
||||
|
||||
@@ -668,7 +668,7 @@ void RideObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
||||
{ "disablePainting", RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB } });
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
void RideObject::ReadJsonVehicleInfo(IReadObjectContext * context, const json_t * properties)
|
||||
|
||||
@@ -144,7 +144,7 @@ void SceneryGroupObject::ReadJson(IReadObjectContext * context, const json_t * r
|
||||
}
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
uint32 SceneryGroupObject::ReadJsonEntertainerCostumes(const json_t * jCostumes)
|
||||
|
||||
@@ -309,7 +309,7 @@ void SmallSceneryObject::ReadJson(IReadObjectContext * context, const json_t * r
|
||||
SetPrimarySceneryGroup(ObjectJsonHelpers::GetString(json_object_get(properties, "sceneryGroup")));
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
std::vector<uint8> SmallSceneryObject::ReadJsonFrameOffsets(const json_t * jFrameOffsets)
|
||||
|
||||
@@ -145,5 +145,5 @@ void WallObject::ReadJson(IReadObjectContext * context, const json_t * root)
|
||||
}
|
||||
|
||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
||||
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user