Polyphase Game Engine
Loading...
Searching...
No Matches
NodeGraph.h
Go to the documentation of this file.
1#pragma once
2
7
8#include <string>
9#include <unordered_set>
10#include <vector>
11
12class Asset;
13class Node;
14class Stream;
15
17{
18public:
19
20 NodeGraph();
21 ~NodeGraph();
22
23 // Node CRUD
24 GraphNode* AddNode(TypeId nodeType);
25 void RemoveNode(GraphNodeId id);
27
28 uint32_t GetNumNodes() const { return (uint32_t)mNodes.size(); }
29 const std::vector<GraphNode*>& GetNodes() const { return mNodes; }
30
31 // Link CRUD
32 GraphLink* AddLink(GraphPinId outputPinId, GraphPinId inputPinId);
33 void RemoveLink(GraphLinkId id);
35 GraphLink* FindLinkByInputPin(GraphPinId inputPinId) const;
36
37 uint32_t GetNumLinks() const { return (uint32_t)mLinks.size(); }
38 const std::vector<GraphLink>& GetLinks() const { return mLinks; }
39
40 // Pin lookup
41 GraphPin* FindPin(GraphPinId id) const;
43
44 // Cycle detection
45 bool WouldCreateCycle(GraphNodeId fromNodeId, GraphNodeId toNodeId) const;
46
47 // Serialization
48 void SaveStream(Stream& stream);
49 void LoadStream(Stream& stream, uint32_t version);
50
51 // Domain
52 const std::string& GetDomainName() const { return mDomainName; }
53 void SetDomainName(const std::string& name) { mDomainName = name; }
54
55 // Graph name (empty = main graph, non-empty = function graph)
56 const std::string& GetGraphName() const { return mGraphName; }
57 void SetGraphName(const std::string& name) { mGraphName = name; }
58
59 void Clear();
60
61 // ID allocation (for external node insertion)
62 GraphNodeId AllocNodeId() { return mNextNodeId++; }
63 GraphPinId AllocPinId() { return mNextPinId++; }
64 GraphLinkId AllocLinkId() { return mNextLinkId++; }
65
66 // Insert an externally-created node (takes ownership)
67 void InsertNode(GraphNode* node);
68
69 // Deep copy for runtime (independent from asset)
70 void CopyFrom(const NodeGraph& other);
71
72 // Owner node (for gameplay graphs)
73 void SetOwnerNode(Node* node) { mOwnerNode = node; }
74 Node* GetOwnerNode() const { return mOwnerNode; }
75
76 // Find input nodes by name
77 GraphNode* FindInputNode(const char* inputName) const;
78
79 // Convenience setters (find input node, write to its pin)
80 bool SetInputFloat(const char* inputName, float value);
81 bool SetInputInt(const char* inputName, int32_t value);
82 bool SetInputBool(const char* inputName, bool value);
83 bool SetInputString(const char* inputName, const char* value);
84 bool SetInputVector(const char* inputName, const glm::vec3& value);
85 bool SetInputColor(const char* inputName, const glm::vec4& value);
86 bool SetInputByte(const char* inputName, uint8_t value);
87 bool SetInputAsset(const char* inputName, Asset* value);
88 bool SetInputVector2D(const char* inputName, const glm::vec2& value);
89 bool SetInputShort(const char* inputName, int16_t value);
90 bool SetInputNode(const char* inputName, Node* value);
91 bool SetInputNode3D(const char* inputName, Node* value);
92 bool SetInputWidget(const char* inputName, Node* value);
93 bool SetInputText(const char* inputName, Node* value);
94 bool SetInputQuad(const char* inputName, Node* value);
95 bool SetInputAudio3D(const char* inputName, Node* value);
96 bool SetInputScene(const char* inputName, Asset* value);
97 bool SetInputSpline3D(const char* inputName, Node* value);
98
99 // Read output node's computed values after evaluation
100 GraphNode* FindOutputNode() const;
101 const Datum& GetOutputValue(uint32_t pinIndex) const;
102
103 // Execution tracking — accumulated by GraphProcessor, read/cleared by editor
104 std::unordered_set<GraphPinId> mExecutedPinIds;
105
106private:
107
108 std::vector<GraphNode*> mNodes;
109 std::vector<GraphLink> mLinks;
110 std::string mDomainName;
111 std::string mGraphName;
112 Node* mOwnerNode = nullptr;
113
114 GraphNodeId mNextNodeId = 1;
115 GraphLinkId mNextLinkId = 1;
116 GraphPinId mNextPinId = 1;
117};
uint32_t TypeId
Definition EngineTypes.h:64
uint32_t GraphLinkId
Definition GraphTypes.h:9
uint32_t GraphPinId
Definition GraphTypes.h:8
uint32_t GraphNodeId
Definition GraphTypes.h:7
Definition MathNodes.h:7
Definition Asset.h:113
Definition Datum.h:164
Definition GraphNode.h:73
Definition NodeGraph.h:17
void SetOwnerNode(Node *node)
Definition NodeGraph.h:73
GraphNode * FindInputNode(const char *inputName) const
Definition NodeGraph.cpp:489
std::unordered_set< GraphPinId > mExecutedPinIds
Definition NodeGraph.h:104
bool SetInputInt(const char *inputName, int32_t value)
Definition NodeGraph.cpp:514
GraphNodeId AllocNodeId()
Definition NodeGraph.h:62
bool SetInputVector(const char *inputName, const glm::vec3 &value)
Definition NodeGraph.cpp:550
void SetDomainName(const std::string &name)
Definition NodeGraph.h:53
bool SetInputVector2D(const char *inputName, const glm::vec2 &value)
Definition NodeGraph.cpp:598
const std::string & GetDomainName() const
Definition NodeGraph.h:52
const std::string & GetGraphName() const
Definition NodeGraph.h:56
void SetGraphName(const std::string &name)
Definition NodeGraph.h:57
bool SetInputFloat(const char *inputName, float value)
Definition NodeGraph.cpp:502
const Datum & GetOutputValue(uint32_t pinIndex) const
Definition NodeGraph.cpp:684
GraphLink * FindLink(GraphLinkId id) const
Definition NodeGraph.cpp:157
const std::vector< GraphNode * > & GetNodes() const
Definition NodeGraph.h:29
~NodeGraph()
Definition NodeGraph.cpp:14
void SaveStream(Stream &stream)
Definition NodeGraph.cpp:262
void CopyFrom(const NodeGraph &other)
Definition NodeGraph.cpp:429
void InsertNode(GraphNode *node)
Definition NodeGraph.cpp:387
bool SetInputSpline3D(const char *inputName, Node *value)
Definition NodeGraph.cpp:664
GraphNode * FindPinOwner(GraphPinId id) const
Definition NodeGraph.cpp:203
void Clear()
Definition NodeGraph.cpp:415
GraphNode * FindOutputNode() const
Definition NodeGraph.cpp:669
const std::vector< GraphLink > & GetLinks() const
Definition NodeGraph.h:38
bool SetInputBool(const char *inputName, bool value)
Definition NodeGraph.cpp:526
GraphPinId AllocPinId()
Definition NodeGraph.h:63
GraphLinkId AllocLinkId()
Definition NodeGraph.h:64
bool SetInputString(const char *inputName, const char *value)
Definition NodeGraph.cpp:538
bool SetInputWidget(const char *inputName, Node *value)
Definition NodeGraph.cpp:639
GraphNode * FindNode(GraphNodeId id) const
Definition NodeGraph.cpp:68
uint32_t GetNumNodes() const
Definition NodeGraph.h:28
uint32_t GetNumLinks() const
Definition NodeGraph.h:37
bool SetInputByte(const char *inputName, uint8_t value)
Definition NodeGraph.cpp:574
NodeGraph()
Definition NodeGraph.cpp:10
GraphLink * FindLinkByInputPin(GraphPinId inputPinId) const
Definition NodeGraph.cpp:169
bool SetInputAudio3D(const char *inputName, Node *value)
Definition NodeGraph.cpp:654
void LoadStream(Stream &stream, uint32_t version)
Definition NodeGraph.cpp:291
bool SetInputText(const char *inputName, Node *value)
Definition NodeGraph.cpp:644
bool SetInputShort(const char *inputName, int16_t value)
Definition NodeGraph.cpp:610
GraphPin * FindPin(GraphPinId id) const
Definition NodeGraph.cpp:181
GraphLink * AddLink(GraphPinId outputPinId, GraphPinId inputPinId)
Definition NodeGraph.cpp:80
void RemoveLink(GraphLinkId id)
Definition NodeGraph.cpp:145
bool SetInputAsset(const char *inputName, Asset *value)
Definition NodeGraph.cpp:586
bool SetInputQuad(const char *inputName, Node *value)
Definition NodeGraph.cpp:649
bool SetInputNode(const char *inputName, Node *value)
Definition NodeGraph.cpp:622
bool SetInputScene(const char *inputName, Asset *value)
Definition NodeGraph.cpp:659
bool SetInputNode3D(const char *inputName, Node *value)
Definition NodeGraph.cpp:634
bool WouldCreateCycle(GraphNodeId fromNodeId, GraphNodeId toNodeId) const
Definition NodeGraph.cpp:225
Node * GetOwnerNode() const
Definition NodeGraph.h:74
bool SetInputColor(const char *inputName, const glm::vec4 &value)
Definition NodeGraph.cpp:562
void RemoveNode(GraphNodeId id)
Definition NodeGraph.cpp:45
Definition Node.h:67
Definition Stream.h:21
Definition GraphPin.h:8