TazGraph Project v0.1.0
Loading...
Searching...
No Matches
PathLinkerComponent.h
1#pragma once
2
3#include "../../../Components.h"
4
6{
7public:
8 std::vector<LinkEntity*> innerLinks;
9 std::vector<LinkEntity*> pathLinks;
10
11 TransformComponent* transform = nullptr;
12
14 {
15
16 }
17
19
20 }
21
22 void init() override {
23 transform = &entity->GetComponent<TransformComponent>();
24 }
25
26 void update(float deltaTime) override {
27
28 }
29
30 void draw(size_t v_index, PlaneColorRenderer& batch, TazGraphEngine::Window& window) {
31
32 }
33
34 // Add a link to the path
35 void addLink(LinkEntity* link) {
36 if (link && std::find(pathLinks.begin(), pathLinks.end(), link) == pathLinks.end()) {
37 pathLinks.push_back(link);
38 }
39 }
40
41 // Remove a link from the path
42 void removeLink(LinkEntity* link) {
43 pathLinks.erase(std::remove(pathLinks.begin(), pathLinks.end(), link), pathLinks.end());
44 }
45
46 std::string GetComponentName() override {
47 return "PortSlotComponent";
48 }
49
50 void showGUI() override {
51 ImGui::Separator();
52 }
53
54 void createInnerLinks() {
55 for (size_t i = 1; i < pathLinks.size(); i++) {
56 LinkEntity* prevLink = pathLinks[i - 1];
57 LinkEntity* currLink = pathLinks[i];
58
59 // Validate nodes and ports for prevLink's toPort and currLink's fromPort
60 NodeEntity* prevToNode = prevLink->getToNode();
61 NodeEntity* currFromNode = currLink->getFromNode();
62
63 if (prevToNode != currFromNode)
64 TazGraphEngine::ConsoleLogger::error("Should be same node to create innerPaths!");
65
66 if (!prevToNode || !currFromNode)
67 continue;
68
69 int prevToPortIndex = prevLink->toPort;
70 int currFromPortIndex = currLink->fromPort;
71
72 if (prevToPortIndex < 0 || currFromPortIndex < 0)
73 continue;
74
75 // Create the inner link connecting prevLink's toPort to currLink's fromPort
76 auto& newInnerLink = entity->getManager()->addEntity<Link>(
77 prevToNode, currFromNode,
78 prevToPortIndex, currFromPortIndex,
79 prevLink->toSlotIndex, currLink->fromSlotIndex
80 );
81 newInnerLink.addGroup(Manager::groupPathInnerLinks); // or a dedicated group for inner links
82
83 newInnerLink.addComponent<Line_w_Color>();
84
85 innerLinks.push_back(&newInnerLink);
86
87 entity->getManager()->grid->addLink(&newInnerLink, entity->getManager()->grid->getGridLevel());
88 }
89 }
90
91 void removeInnerLinks() {
92 for (auto* innerLink : innerLinks) {
93 if (!innerLink) continue;
94
95 innerLink->destroy();
96 }
97 innerLinks.clear();
98 }
99};
Definition GECS.h:125
Definition Line_w_Color.h:6
Definition GECSEntity.h:107
Definition GECSEntity.h:43
Definition PathLinkerComponent.h:6
Definition PlaneColorRenderer.h:19
Definition Window.h:18
Definition TransformComponent.h:6