Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
EnumCatalogManager.h
Go to the documentation of this file.
1/*
2 * Olympe Blueprint Editor - Enum Catalog Manager
3 *
4 * Manages dynamic enum catalogs for Actions, Conditions, and Decorators
5 * Loads type definitions from JSON files and provides validation/query API
6 */
7
8#pragma once
9
10#include <string>
11#include <vector>
12#include <map>
13#include <memory>
14#include "../../Source/third_party/nlohmann/json.hpp"
15
16namespace Olympe
17{
18 // Parameter definition for catalog types
20 {
21 std::string name;
22 std::string type; // "string", "float", "int", "bool", "array"
23 bool required = false;
24 std::string defaultValue;
25
26 CatalogParameter() = default;
27 CatalogParameter(const std::string& n, const std::string& t, bool req = false, const std::string& def = "")
29 };
30
31 // Type definition from catalog
33 {
34 std::string id;
35 std::string name;
36 std::string description;
37 std::string category;
38 std::string tooltip;
39 std::vector<CatalogParameter> parameters;
40
41 CatalogType() = default;
42 };
43
44 // Catalog for a specific enum type (Actions, Conditions, Decorators)
46 {
47 std::string version;
48 std::string catalogType;
49 std::vector<CatalogType> types;
50 std::string filepath; // Source file for hot-reload
51
52 EnumCatalog() = default;
53
54 // Find type by ID
55 const CatalogType* FindType(const std::string& id) const
56 {
57 for (const auto& type : types)
58 {
59 if (type.id == id)
60 return &type;
61 }
62 return nullptr;
63 }
64
65 // Get all type IDs
66 std::vector<std::string> GetTypeIds() const
67 {
68 std::vector<std::string> ids;
69 for (const auto& type : types)
70 ids.push_back(type.id);
71 return ids;
72 }
73
74 // Get all type names (for UI display)
75 std::vector<std::string> GetTypeNames() const
76 {
77 std::vector<std::string> names;
78 for (const auto& type : types)
79 names.push_back(type.name);
80 return names;
81 }
82 };
83
84 /**
85 * EnumCatalogManager - Singleton manager for enum catalogs
86 * Loads and manages dynamic type definitions for the node editor
87 */
89 {
90 public:
91 // Singleton access
93 static EnumCatalogManager& Get() { return Instance(); }
94
95 // Lifecycle
96 void Initialize();
97 void Shutdown();
98
99 // Catalog loading
100 bool LoadCatalogs(const std::string& catalogsPath);
101 bool LoadCatalog(const std::string& filepath);
102 bool ReloadCatalogs(); // Hot-reload support
103
104 // Catalog access
105 const EnumCatalog* GetActionCatalog() const { return m_ActionCatalog.get(); }
106 const EnumCatalog* GetConditionCatalog() const { return m_ConditionCatalog.get(); }
107 const EnumCatalog* GetDecoratorCatalog() const { return m_DecoratorCatalog.get(); }
108
109 // Type queries
110 std::vector<std::string> GetActionTypes() const;
111 std::vector<std::string> GetConditionTypes() const;
112 std::vector<std::string> GetDecoratorTypes() const;
113
114 // Type lookup
115 const CatalogType* FindActionType(const std::string& id) const;
116 const CatalogType* FindConditionType(const std::string& id) const;
117 const CatalogType* FindDecoratorType(const std::string& id) const;
118
119 // Validation
120 bool IsValidActionType(const std::string& id) const;
121 bool IsValidConditionType(const std::string& id) const;
122 bool IsValidDecoratorType(const std::string& id) const;
123
124 // State
125 bool IsInitialized() const { return m_Initialized; }
126 std::string GetLastError() const { return m_LastError; }
127 std::string GetCatalogsPath() const { return m_CatalogsPath; }
128
129 private:
130 // Private constructor for singleton
133
134 // Disable copy
137
138 // Parsing helpers
140 bool ParseCatalogType(const nlohmann::json& j, CatalogType& type);
142
143 // Validation helpers
144 bool ValidateCatalog(const EnumCatalog& catalog, std::string& errorMsg);
145
146 private:
148 std::string m_CatalogsPath;
149 std::string m_LastError;
150
151 // Catalogs (smart pointers for easy replacement during hot-reload)
152 std::unique_ptr<EnumCatalog> m_ActionCatalog;
153 std::unique_ptr<EnumCatalog> m_ConditionCatalog;
154 std::unique_ptr<EnumCatalog> m_DecoratorCatalog;
155 };
156}
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
EnumCatalogManager - Singleton manager for enum catalogs Loads and manages dynamic type definitions f...
const CatalogType * FindActionType(const std::string &id) const
bool IsValidActionType(const std::string &id) const
std::vector< std::string > GetDecoratorTypes() const
EnumCatalogManager & operator=(const EnumCatalogManager &)=delete
std::vector< std::string > GetActionTypes() const
bool ParseCatalogParameter(const nlohmann::json &j, CatalogParameter &param)
bool ValidateCatalog(const EnumCatalog &catalog, std::string &errorMsg)
static EnumCatalogManager & Get()
const CatalogType * FindDecoratorType(const std::string &id) const
bool IsValidDecoratorType(const std::string &id) const
const EnumCatalog * GetActionCatalog() const
bool IsValidConditionType(const std::string &id) const
EnumCatalogManager(const EnumCatalogManager &)=delete
std::vector< std::string > GetConditionTypes() const
const EnumCatalog * GetConditionCatalog() const
bool ParseCatalogType(const nlohmann::json &j, CatalogType &type)
std::string GetCatalogsPath() const
bool ParseCatalogJson(const nlohmann::json &j, EnumCatalog &catalog)
const EnumCatalog * GetDecoratorCatalog() const
bool LoadCatalog(const std::string &filepath)
std::string GetLastError() const
bool LoadCatalogs(const std::string &catalogsPath)
static EnumCatalogManager & Instance()
std::unique_ptr< EnumCatalog > m_ConditionCatalog
std::unique_ptr< EnumCatalog > m_ActionCatalog
const CatalogType * FindConditionType(const std::string &id) const
std::unique_ptr< EnumCatalog > m_DecoratorCatalog
nlohmann::json json
CatalogParameter(const std::string &n, const std::string &t, bool req=false, const std::string &def="")
std::vector< CatalogParameter > parameters
std::vector< CatalogType > types
const CatalogType * FindType(const std::string &id) const
std::vector< std::string > GetTypeIds() const
std::vector< std::string > GetTypeNames() const