TazGraph Project v0.1.0
Loading...
Searching...
No Matches
GECSEntity.h
1#pragma once
2
3#include "CellEntity.h"
4
5class LinkEntity;
6
7class EmptyEntity : public CellEntity {
8protected:
9 Entity* parent_entity = nullptr;
10public:
11
12 EmptyEntity(Manager& mManager) : CellEntity(mManager) {}
13
14 void setComponentEntity(Component* c) override {
15 c->entity = this;
16 }
17
18 Entity* getParentEntity() override {
19 return parent_entity;
20 }
21
22 void setParentEntity(Entity* pEntity) override {
23 parent_entity = pEntity;
24 }
25
26 void removeFromCell() {
27 if (this->ownerCell) {
28 removeEntity();
29 this->ownerCell = nullptr;
30 }
31 }
32
33 void removeEntity() override{
34 ownerCell->emptyEntities.erase(
35 std::remove(this->ownerCell->emptyEntities.begin(), this->ownerCell->emptyEntities.end(),
36 this),
37 this->ownerCell->emptyEntities.end());
38 }
39
40
41};
42
43class NodeEntity : public EmptyEntity {
44protected:
45 std::vector<LinkEntity*> inLinks;
46 std::vector<LinkEntity*> outLinks;
47public:
48
49 NodeEntity(Manager& mManager) : EmptyEntity(mManager) {
50 nodeComponentArray.emplace();
51 nodeComponentBitSet.emplace();
52 children.resize(4, nullptr);
53
54 }
55 void setComponentEntity(NodeComponent* c) override {
56 c->entity = this;
57
58 }
59
60 void removeEntity() override {
61 ownerCell->nodes.erase(
62 std::remove(this->ownerCell->nodes.begin(), this->ownerCell->nodes.end(),
63 this),
64 this->ownerCell->nodes.end());
65 }
66
67 void addInLink(LinkEntity* link) {
68 inLinks.push_back(link);
69 }
70
71 void addOutLink(LinkEntity* link) {
72 outLinks.push_back(link);
73 }
74
75 void removeInLink(LinkEntity* link) {
76 auto it = std::find(inLinks.begin(), inLinks.end(), link);
77 if (it != inLinks.end()) {
78 inLinks.erase(it);
79 }
80 }
81
82 void removeOutLink(LinkEntity* link) {
83 auto it = std::find(outLinks.begin(), outLinks.end(), link);
84 if (it != outLinks.end()) {
85 outLinks.erase(it);
86 }
87 }
88
89 const std::vector<LinkEntity*>& getInLinks() const {
90 return inLinks;
91 }
92
93 const std::vector<LinkEntity*>& getOutLinks() const {
94 return outLinks;
95 }
96
97 virtual void addPorts() {}
98
99 virtual void removePorts() {}
100 virtual void removeSlots() {}
101
102 virtual void updatePorts(float deltaTime) {}
103
104};
105
106
108protected:
109 unsigned int fromId = 0;
110 unsigned int toId = 0;
111
112 NodeEntity* from = nullptr;
113 NodeEntity* to = nullptr;
114
115public:
116 int fromPort = -1;
117 int toPort = -1;
118 int fromSlotIndex = -1;
119 int toSlotIndex = -1;
120
121 LinkEntity(Manager& mManager) : MultiCellEntity(mManager) {
122 children.resize(1, nullptr);
123
124 }
125
126 LinkEntity(Manager& mManager, unsigned int mfromId, unsigned int mtoId)
127 : MultiCellEntity(mManager), fromId(mfromId), toId(mtoId) {
128 children.resize(1, nullptr);
129
130 }
131
132 LinkEntity(Manager& mManager, NodeEntity* mfrom, NodeEntity* mto)
133 : MultiCellEntity(mManager), from(mfrom), to(mto) {
134 children.resize(1, nullptr);
135
136 }
137
138 LinkEntity(Manager& mManager,
139 unsigned int mfromId, unsigned int mtoId,
140 NodeEntity* mfrom, NodeEntity* mto)
141 : MultiCellEntity(mManager),
142 fromId(mfromId), toId(mtoId),
143 from(mfrom), to(mto) {
144 children.resize(1, nullptr);
145
146 }
147
149 Manager& mManager,
150 NodeEntity* mfrom, NodeEntity* mto,
151 int m_fromPort, int m_toPort, int m_fromSlot, int m_toSlot )
152 : MultiCellEntity(mManager), from(mfrom), to(mto)
153 {
154 children.resize(1, nullptr);
155 fromPort = m_fromPort;
156 toPort = m_toPort;
157 fromSlotIndex = m_fromSlot;
158 toSlotIndex = m_toSlot;
159 }
160
161 void setComponentEntity(LinkComponent* c) override {
162 c->entity = this;
163 }
164
165 void removeFromCells() {
166 removeEntity();
167 ownerCells.clear();
168 }
169
170 void removeEntity() override {
171 for (auto cell : ownerCells) {
172 cell->links.erase(std::remove(cell->links.begin(), cell->links.end(),
173 this),
174 cell->links.end());
175 }
176 }
177
178 NodeEntity* getFromNode() const {
179 return from;
180 }
181
182 NodeEntity* getToNode() const {
183 return to;
184 }
185
186 EmptyEntity* getFromPort() {
187 return from->children[fromPort];
188 }
189
190 EmptyEntity* getToPort() {
191 return to->children[toPort];
192 }
193
194 virtual void updateConnectedPorts() {}
195
196 virtual void resetPorts() {}
197
198 virtual void updateArrowHeads() {}
199
200 virtual void addArrowHead() {}
201
202 virtual void removeArrowHead() {}
203};
Definition CellEntity.h:35
Definition GECS.h:125
Definition GECSEntity.h:7
Definition GECS.h:152
Definition GECS.h:135
Definition GECSEntity.h:107
Definition GECSManager.h:14
Definition CellEntity.h:53
Definition GECS.h:130
Definition GECSEntity.h:43