mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-17 21:12:34 +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")));
|
SetPrimarySceneryGroup(ObjectJsonHelpers::GetString(json_object_get(properties, "sceneryGroup")));
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
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"));
|
_legacyType.text_height = json_integer_value(json_object_get(properties, "textHeight"));
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
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 }});
|
{ "isTelevision", PATH_BIT_FLAG_IS_QUEUE_SCREEN }});
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
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 } });
|
{ "editorOnly", FOOTPATH_ENTRY_FLAG_SHOW_ONLY_IN_SCENARIO_EDITOR } });
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
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")));
|
SetPrimarySceneryGroup(ObjectJsonHelpers::GetString(json_object_get(properties, "sceneryGroup")));
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
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)
|
std::vector<rct_large_scenery_tile> LargeSceneryObject::ReadJsonTiles(const json_t * jTiles)
|
||||||
|
|||||||
@@ -129,8 +129,6 @@ namespace ObjectFactory
|
|||||||
}
|
}
|
||||||
catch (const std::exception &)
|
catch (const std::exception &)
|
||||||
{
|
{
|
||||||
Console::Error::WriteLine("Unable to open or read '%s'", path);
|
|
||||||
|
|
||||||
delete result;
|
delete result;
|
||||||
result = nullptr;
|
result = nullptr;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,8 @@
|
|||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include "../Context.h"
|
#include "../Context.h"
|
||||||
|
#include "../core/File.h"
|
||||||
|
#include "../core/FileScanner.h"
|
||||||
#include "../core/Math.hpp"
|
#include "../core/Math.hpp"
|
||||||
#include "../core/Memory.hpp"
|
#include "../core/Memory.hpp"
|
||||||
#include "../core/Path.hpp"
|
#include "../core/Path.hpp"
|
||||||
@@ -205,12 +207,36 @@ namespace ObjectJsonHelpers
|
|||||||
return result;
|
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();
|
const auto env = GetContext()->GetPlatformEnvironment();
|
||||||
auto objectsPath = env->GetDirectoryPath(DIRBASE::RCT2, DIRID::OBJECT);
|
auto objectsPath = env->GetDirectoryPath(DIRBASE::RCT2, DIRID::OBJECT);
|
||||||
auto objectPath = Path::Combine(objectsPath, name);
|
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());
|
auto obj = ObjectFactory::CreateObjectFromLegacyFile(objectPath.c_str());
|
||||||
if (obj != nullptr)
|
if (obj != nullptr)
|
||||||
{
|
{
|
||||||
@@ -230,14 +256,19 @@ namespace ObjectJsonHelpers
|
|||||||
}
|
}
|
||||||
else
|
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
|
// Add place holders
|
||||||
auto placeHolders = (size_t)(end - start) - result.size();
|
auto placeHolders = (size_t)(end - start) - result.size();
|
||||||
if (placeHolders > 0)
|
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++)
|
for (size_t i = 0; i < placeHolders; i++)
|
||||||
{
|
{
|
||||||
auto g1 = rct_g1_element{};
|
auto g1 = rct_g1_element{};
|
||||||
@@ -247,7 +278,7 @@ namespace ObjectJsonHelpers
|
|||||||
return result;
|
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;
|
std::vector<rct_g1_element> result;
|
||||||
if (s.empty())
|
if (s.empty())
|
||||||
@@ -293,7 +324,7 @@ namespace ObjectJsonHelpers
|
|||||||
imgEnd = range.back();
|
imgEnd = range.back();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return LoadObjectImages(name, imgStart, imgEnd);
|
return LoadObjectImages(context, name, imgStart, imgEnd);
|
||||||
}
|
}
|
||||||
return result;
|
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 jsonImages = json_object_get(root, "images");
|
||||||
auto imageElements = GetJsonStringArray(jsonImages);
|
auto imageElements = GetJsonStringArray(jsonImages);
|
||||||
for (const auto &ie : imageElements)
|
for (const auto &ie : imageElements)
|
||||||
{
|
{
|
||||||
auto images = ParseImages(ie);
|
auto images = ParseImages(context, ie);
|
||||||
for (const auto &g1 : images)
|
for (const auto &g1 : images)
|
||||||
{
|
{
|
||||||
imageTable.AddImage(&g1);
|
imageTable.AddImage(&g1);
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ namespace ObjectJsonHelpers
|
|||||||
uint8 ParseCursor(const std::string &s, uint8 defaultValue);
|
uint8 ParseCursor(const std::string &s, uint8 defaultValue);
|
||||||
rct_object_entry ParseObjectEntry(const std::string & s);
|
rct_object_entry ParseObjectEntry(const std::string & s);
|
||||||
void LoadStrings(const json_t * root, StringTable &stringTable);
|
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>
|
template<typename T>
|
||||||
T GetFlags(const json_t * obj, std::initializer_list<std::pair<std::string, T>> list)
|
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 } });
|
{ "disablePainting", RIDE_ENTRY_FLAG_DISABLE_COLOUR_TAB } });
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
void RideObject::ReadJsonVehicleInfo(IReadObjectContext * context, const json_t * properties)
|
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::LoadStrings(root, GetStringTable());
|
||||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32 SceneryGroupObject::ReadJsonEntertainerCostumes(const json_t * jCostumes)
|
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")));
|
SetPrimarySceneryGroup(ObjectJsonHelpers::GetString(json_object_get(properties, "sceneryGroup")));
|
||||||
|
|
||||||
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
ObjectJsonHelpers::LoadStrings(root, GetStringTable());
|
||||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<uint8> SmallSceneryObject::ReadJsonFrameOffsets(const json_t * jFrameOffsets)
|
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::LoadStrings(root, GetStringTable());
|
||||||
ObjectJsonHelpers::LoadImages(root, GetImageTable());
|
ObjectJsonHelpers::LoadImages(context, root, GetImageTable());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user