Olympe Engine 2.0
2D Game Engine with ECS Architecture
Loading...
Searching...
No Matches
EntityPrefabGraphDocument.h
Go to the documentation of this file.
1#pragma once
2
3#include <string>
4#include <vector>
5#include <map>
6#include <memory>
7#include "./../../vector.h"
8#include "ComponentNodeData.h"
9#include "PrefabLoader.h"
10
11namespace Olympe
12{
14 {
18 std::vector<NodeId> inputs;
19 std::vector<NodeId> outputs;
20 };
21
23 {
24 public:
27
28 // Node management
29 NodeId CreateComponentNode(const std::string& componentType);
30 NodeId CreateComponentNode(const std::string& componentType, const std::string& componentName);
31 void RemoveNode(NodeId nodeId);
32 bool HasNode(NodeId nodeId) const;
33
34 // Node access
36 const ComponentNode* GetNode(NodeId nodeId) const;
37 const std::vector<ComponentNode>& GetAllNodes() const;
38
39 // Selection management
40 void SelectNode(NodeId nodeId);
41 void DeselectNode(NodeId nodeId);
42 void DeselectAll();
43 NodeId GetSelectedNode() const;
44 const std::vector<NodeId>& GetSelectedNodes() const;
45
46 // Layout
47 void AutoLayout();
48 void ArrangeNodesInGrid(int gridWidth = 4, float spacing = 200.0f);
49 void CenterViewport();
50
51 // Connection management
54 const std::vector<std::pair<NodeId, NodeId>>& GetConnections() const;
55
56 // Connection validation
59
60 // Serialization
61 json ToJson() const;
62 static EntityPrefabGraphDocument FromJson(const json& data);
63
64 // File I/O
65 bool LoadFromFile(const std::string& filePath);
66 bool SaveToFile(const std::string& filePath);
67
68 // Properties
69 void SetDocumentName(const std::string& name);
70 std::string GetDocumentName() const;
71
72 Vector GetCanvasOffset() const;
73 void SetCanvasOffset(const Vector& offset);
74
75 float GetCanvasZoom() const;
76 void SetCanvasZoom(float zoom);
77
78 void Clear();
79 size_t GetNodeCount() const;
80
81 // Dirty flag tracking
82 bool IsDirty() const;
83 void SetDirty(bool dirty);
84
85 // Parameter schema management
86 void LoadParameterSchemas(const std::string& schemasFilePath);
88
89 private:
90 std::vector<ComponentNode> m_nodes;
91 std::vector<NodeId> m_selectedNodes;
92 std::vector<std::pair<NodeId, NodeId>> m_connections;
93 std::string m_documentName;
95 float m_canvasZoom = 1.0f;
97 bool m_isDirty = false;
98
99 // Parameter schemas: componentType -> { paramName -> defaultValue }
100 std::map<std::string, std::map<std::string, std::string>> m_parameterSchemas;
101
103 std::vector<LayoutNode> CalculateLayout();
104 };
105
106} // namespace Olympe
ComponentTypeID GetComponentTypeID_Static()
Definition ECS_Entity.h:56
const std::vector< NodeId > & GetSelectedNodes() const
void LoadParameterSchemas(const std::string &schemasFilePath)
std::vector< std::pair< NodeId, NodeId > > m_connections
bool SaveToFile(const std::string &filePath)
bool ValidateConnection(NodeId sourceId, NodeId targetId) const
std::map< std::string, std::map< std::string, std::string > > m_parameterSchemas
bool HasConnection(NodeId sourceId, NodeId targetId) const
void SetDocumentName(const std::string &name)
bool LoadFromFile(const std::string &filePath)
bool ConnectNodes(NodeId sourceId, NodeId targetId)
NodeId CreateComponentNode(const std::string &componentType)
const std::vector< ComponentNode > & GetAllNodes() const
bool DisconnectNodes(NodeId sourceId, NodeId targetId)
static EntityPrefabGraphDocument FromJson(const json &data)
const std::vector< std::pair< NodeId, NodeId > > & GetConnections() const
void ArrangeNodesInGrid(int gridWidth=4, float spacing=200.0f)
< Provides AssetID and INVALID_ASSET_ID
nlohmann::json json
uint32_t NodeId
const NodeId InvalidNodeId
std::vector< NodeId > outputs
std::vector< NodeId > inputs