Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
GlobalTemplateBlackboard.h
Go to the documentation of this file.
1/**
2 * @file GlobalTemplateBlackboard.h
3 * @brief Project-scope blackboard variable registry
4 * @author Olympe Engine
5 * @date 2026-03-26
6 */
7
8#ifndef OLYMPE_GLOBAL_TEMPLATE_BLACKBOARD_H
9#define OLYMPE_GLOBAL_TEMPLATE_BLACKBOARD_H
10
11#pragma once
12
13#include <string>
14#include <unordered_map>
15#include <vector>
16#include <memory>
17
18#include "../TaskSystem/TaskGraphTypes.h"
19
20namespace Olympe {
21
22// ============================================================================
23// VariableType conversion helpers (local to this component)
24// ============================================================================
25
26static inline std::string VariableTypeToString(VariableType type)
27{
28 switch (type)
29 {
30 case VariableType::Bool: return "Bool";
31 case VariableType::Int: return "Int";
32 case VariableType::Float: return "Float";
33 case VariableType::String: return "String";
34 case VariableType::Vector: return "Vector";
35 case VariableType::EntityID: return "EntityID";
37 default: return "None";
38 }
39}
40
41static inline VariableType StringToVariableType(const std::string& str)
42{
43 if (str == "Bool") return VariableType::Bool;
44 if (str == "Int") return VariableType::Int;
45 if (str == "Float") return VariableType::Float;
46 if (str == "String") return VariableType::String;
47 if (str == "Vector") return VariableType::Vector;
48 if (str == "EntityID") return VariableType::EntityID;
49 return VariableType::None;
50}
51
53{
54 switch (type)
55 {
57 return TaskValue(false);
59 return TaskValue(0);
61 return TaskValue(0.0f);
63 return TaskValue(std::string(""));
65 return TaskValue(::Vector{0.0f, 0.0f, 0.0f});
67 return TaskValue(0);
69 default:
70 return TaskValue();
71 }
72}
73
81
83public:
85
86 /// Force reload of the registry from file (useful for hot reload)
87 static void Reload();
88
89 bool LoadFromFile(const std::string& configPath = "./Config/global_blackboard_register.json");
90 bool SaveToFile(const std::string& configPath = "") const; // Empty = use last loaded path
91 void Clear();
92
93 bool AddVariable(const std::string& key,
94 VariableType type,
95 const TaskValue& defaultValue,
96 const std::string& description = "",
97 bool isPersistent = false);
98
99 bool UpdateVariable(const std::string& key,
100 const TaskValue& defaultValue,
101 const std::string& description = "");
102
103 bool RemoveVariable(const std::string& key);
104
105 bool HasVariable(const std::string& key) const;
106 const GlobalEntryDefinition* GetVariable(const std::string& key) const;
107 VariableType GetVariableType(const std::string& key) const;
108 TaskValue GetDefaultValue(const std::string& key) const;
109 const std::vector<GlobalEntryDefinition>& GetAllVariables() const;
110 size_t GetVariableCount() const;
111
113 bool HasConflicts() const;
114
115 std::string DebugSummary() const;
116 void DebugPrint() const;
117
118private:
121
126
127 static bool IsValidVariableName(const std::string& name);
128
129 /// Track the last successfully loaded path for consistent saves
130 mutable std::string m_lastLoadedPath;
131
132 std::unordered_map<std::string, size_t> m_nameToIndex;
133 std::vector<GlobalEntryDefinition> m_variables;
134};
135
136} // namespace Olympe
137
138#endif // OLYMPE_GLOBAL_TEMPLATE_BLACKBOARD_H
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
const GlobalEntryDefinition * GetVariable(const std::string &key) const
bool SaveToFile(const std::string &configPath="") const
static void Reload()
Force reload of the registry from file (useful for hot reload)
bool UpdateVariable(const std::string &key, const TaskValue &defaultValue, const std::string &description="")
std::string m_lastLoadedPath
Track the last successfully loaded path for consistent saves.
bool LoadFromFile(const std::string &configPath="./Config/global_blackboard_register.json")
static GlobalTemplateBlackboard & Get()
std::unordered_map< std::string, size_t > m_nameToIndex
bool HasVariable(const std::string &key) const
GlobalTemplateBlackboard(GlobalTemplateBlackboard &&)=delete
VariableType GetVariableType(const std::string &key) const
std::vector< GlobalEntryDefinition > m_variables
GlobalTemplateBlackboard & operator=(GlobalTemplateBlackboard &&)=delete
static bool IsValidVariableName(const std::string &name)
GlobalTemplateBlackboard(const GlobalTemplateBlackboard &)=delete
static bool IsTypeCompatible(VariableType existingType, VariableType newType)
bool AddVariable(const std::string &key, VariableType type, const TaskValue &defaultValue, const std::string &description="", bool isPersistent=false)
bool RemoveVariable(const std::string &key)
const std::vector< GlobalEntryDefinition > & GetAllVariables() const
GlobalTemplateBlackboard & operator=(const GlobalTemplateBlackboard &)=delete
TaskValue GetDefaultValue(const std::string &key) const
C++14-compliant type-safe value container for task parameters.
< Provides AssetID and INVALID_ASSET_ID
VariableType
Type tags used by TaskValue to identify stored data.
@ Int
32-bit signed integer
@ Float
Single-precision float.
@ String
std::string
@ Vector
3-component vector (Vector from vector.h)
@ None
Uninitialized / empty value.
@ EntityID
Entity identifier (uint64_t)
static std::string VariableTypeToString(VariableType type)
Converts a VariableType to its canonical string representation.
static VariableType StringToVariableType(const std::string &str)
static TaskValue GetDefaultValueForType(VariableType type)
Returns a correctly-typed default TaskValue for the given VariableType.