Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
PrefabLoader.cpp
Go to the documentation of this file.
1#include "PrefabLoader.h"
2#include <fstream>
3
4namespace Olympe
5{
6 using json = nlohmann::json;
7
8 json ParameterDefinition::ToJson() const { json j; j["name"] = name; j["type"] = static_cast<int>(type); j["defaultValue"] = defaultValue; j["description"] = description; j["isRequired"] = isRequired; return j; }
9 ParameterDefinition ParameterDefinition::FromJson(const json& data) { ParameterDefinition p; if (data.contains("name")) { p.name = data["name"].get<std::string>(); } if (data.contains("defaultValue")) { p.defaultValue = data["defaultValue"].get<std::string>(); } if (data.contains("isRequired")) { p.isRequired = data["isRequired"].get<bool>(); } return p; }
10
11 json ComponentSchema::ToJson() const { json j; j["componentName"] = componentName; j["category"] = category; j["description"] = description; j["isDeprecated"] = isDeprecated; j["parameters"] = json::array(); for (size_t i = 0; i < parameters.size(); ++i) { j["parameters"].push_back(parameters[i].ToJson()); } return j; }
12 ComponentSchema ComponentSchema::FromJson(const json& data) { ComponentSchema s; if (data.contains("componentName")) { s.componentName = data["componentName"].get<std::string>(); } if (data.contains("category")) { s.category = data["category"].get<std::string>(); } if (data.contains("description")) { s.description = data["description"].get<std::string>(); } if (data.contains("isDeprecated")) { s.isDeprecated = data["isDeprecated"].get<bool>(); } return s; }
13
14 json ComponentData::ToJson() const { json j; j["componentType"] = componentType; j["componentName"] = componentName; j["enabled"] = enabled; j["properties"] = json::object(); for (auto it = properties.begin(); it != properties.end(); ++it) { j["properties"][it->first] = it->second; } return j; }
15 ComponentData ComponentData::FromJson(const json& data) { ComponentData c; if (data.contains("componentType")) { c.componentType = data["componentType"].get<std::string>(); } if (data.contains("componentName")) { c.componentName = data["componentName"].get<std::string>(); } if (data.contains("enabled")) { c.enabled = data["enabled"].get<bool>(); } return c; }
16
17 json EntityPrefab::ToJson() const { json j; j["prefabName"] = prefabName; j["prefabPath"] = prefabPath; j["schemaVersion"] = schemaVersion; j["components"] = json::array(); for (size_t i = 0; i < components.size(); ++i) { j["components"].push_back(components[i].ToJson()); } j["metadata"] = json::object(); for (auto it = metadata.begin(); it != metadata.end(); ++it) { j["metadata"][it->first] = it->second; } return j; }
18 EntityPrefab EntityPrefab::FromJson(const json& data) { EntityPrefab p; if (data.contains("prefabName")) { p.prefabName = data["prefabName"].get<std::string>(); } if (data.contains("prefabPath")) { p.prefabPath = data["prefabPath"].get<std::string>(); } if (data.contains("schemaVersion")) { p.schemaVersion = data["schemaVersion"].get<int>(); } return p; }
19
21 void PrefabLoader::SaveToFile(const std::string& filePath, const EntityPrefab& prefab) { json d = prefab.ToJson(); SaveJsonToFile(filePath, d); }
22 json PrefabLoader::LoadJsonFromFile(const std::string& filePath) { std::ifstream f(filePath); if (f.is_open()) { try { json d; f >> d; f.close(); return d; } catch (...) { f.close(); } } return json::object(); }
23 void PrefabLoader::SaveJsonToFile(const std::string& filePath, const json& data) { std::ofstream f(filePath); if (f.is_open()) { f << data.dump(2); f.close(); } }
25 std::vector<ComponentSchema> PrefabLoader::LoadAllSchemas(const std::string& schemasPath) { (void)schemasPath; return std::vector<ComponentSchema>(); }
28 std::string PrefabLoader::GetSchemaVersion(const json& data) { if (data.contains("schemaVersion")) { return std::to_string(data["schemaVersion"].get<int>()); } return "1"; }
31
32} // namespace Olympe
nlohmann::json json
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
static void SaveJsonToFile(const std::string &filePath, const json &data)
static EntityPrefab LoadFromFile(const std::string &filePath)
static bool ValidatePrefab(const EntityPrefab &prefab)
static json LoadJsonFromFile(const std::string &filePath)
static std::vector< ComponentSchema > LoadAllSchemas(const std::string &schemasPath)
static ComponentSchema ParseSchemaV4(const json &data)
static void SaveToFile(const std::string &filePath, const EntityPrefab &prefab)
static bool ValidateComponentData(const ComponentData &component, const ComponentSchema &schema)
static std::string GetSchemaVersion(const json &data)
static ComponentSchema ParseComponentSchema(const json &schemaJson)
static json SerializeSchemaV4(const EntityPrefab &prefab)
< Provides AssetID and INVALID_ASSET_ID
nlohmann::json json
nlohmann::json json
static ComponentData FromJson(const json &data)
std::string componentType
std::map< std::string, std::string > properties
std::string componentName
static ComponentSchema FromJson(const json &data)
std::vector< ParameterDefinition > parameters
std::vector< ComponentData > components
std::string prefabName
std::map< std::string, std::string > metadata
static EntityPrefab FromJson(const json &data)
static ParameterDefinition FromJson(const json &data)