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<EntityID> innerLinks;
9 std::vector<EntityID> pathLinks;
10
11 float width = 1.0f; // default width
12 float last_width = 1.0f; // default width
13 TazColor color = TazColor(0, 0, 0, 255); // default black
14 TazColor last_color = TazColor(0, 0, 0, 255); // default black
15
16 TransformComponent* transform = nullptr;
17
19 {
20
21 }
22
24
25 }
26
27 void init() override {
28 transform = &entity->GetComponent<TransformComponent>();
29 }
30
31 void update(float deltaTime) override {
32
33 if (last_width != width || color != last_color) {
34 for (auto pathLinkId : pathLinks) {
35 auto* pathLink = entity->getManager()->getEntityFromId(pathLinkId);
36 pathLink->GetComponent<Line_w_Color>().setSrcColor(color);
37 pathLink->GetComponent<Line_w_Color>().setDestColor(color);
38 pathLink->GetComponent<Line_w_Color>().width = width;
39 }
40 last_width = width;
41 last_color = color;
42 }
43 }
44
45 void draw(size_t v_index, PlaneColorRenderer& batch, TazGraphEngine::Window& window) {
46
47 }
48
49 // Add a link to the path
50 void addLink(EntityID linkId) {
51 LinkEntity* link = dynamic_cast<LinkEntity*>(entity->getManager()->getEntityFromId(linkId));
52
53 if (link &&
54 std::find(pathLinks.begin(), pathLinks.end(), linkId) == pathLinks.end()) {
55 link->GetComponent<Line_w_Color>().setSrcColor(color);
56 link->GetComponent<Line_w_Color>().setDestColor(color);
57 link->GetComponent<Line_w_Color>().width = width;
58 link->setParentEntity(entity);
59 pathLinks.push_back(linkId);
60 }
61 }
62
63 // Remove a link from the path
64 void removeLink(EntityID link) {
65 pathLinks.erase(std::remove(pathLinks.begin(), pathLinks.end(), link), pathLinks.end());
66 }
67
68 std::string GetComponentName() override {
69 return "PathLinkerComponent";
70 }
71
72 void showGUI(std::vector<BaseComponent*> otherComponents = {}) override {
73 ImGui::Separator();
74 }
75
76 void showGUI(std::vector<BaseComponent*> otherComponents, std::vector<Entity*> otherEntities) override {
77 ImGui::Separator();
78 }
79
80 void createInnerLinks() {
81 for (size_t i = 1; i < pathLinks.size(); i++) {
82 LinkEntity* prevLink = dynamic_cast<LinkEntity*>(entity->getManager()->getEntityFromId(pathLinks[i - 1]));
83 LinkEntity* currLink = dynamic_cast<LinkEntity*>(entity->getManager()->getEntityFromId(pathLinks[i]));
84
85 // Validate nodes and ports for prevLink's toPort and currLink's fromPort
86 EntityID prevToNode = prevLink->getToNode();
87 EntityID currFromNode = currLink->getFromNode();
88
89 if (prevToNode != currFromNode)
90 TAZ_ERROR("Should be same node to create innerPaths!");
91
92 EntityID prevToPortIndex = prevLink->toPort;
93 EntityID currFromPortIndex = currLink->fromPort;
94
95
96 // Create the inner link connecting prevLink's toPort to currLink's fromPort
97 auto& newInnerLink = entity->getManager()->addEntity<Link>(
98 prevToNode, currFromNode,
99 prevToPortIndex, currFromPortIndex,
100 prevLink->toSlotIndex, currLink->fromSlotIndex
101 );
102 newInnerLink.addToGroup(Manager::groupPathInnerLinks); // or a dedicated group for inner links
103 newInnerLink.setConnectionType(LinkEntity::ConnectionType::GHOST_PORT_TO_PORT);
104 // first inner link comp so lineWColor init doesnt trigger
105 newInnerLink.addComponent<InnerLink>(prevLink->getId(), currLink->getId());
106 newInnerLink.addComponent<Line_w_Color>();
107
108 innerLinks.push_back(newInnerLink.getId());
109
110 entity->getManager()->grid->addLink(&newInnerLink, entity->getManager()->grid->getGridLevel());
111 }
112 }
113
114 void removeInnerLinks() {
115 for (auto innerLinkId : innerLinks) {
116 Entity* innerEntity = entity->getManager()->getEntityFromId(innerLinkId);
117 if (!innerEntity) continue;
118
119 innerEntity->destroy();
120 }
121 innerLinks.clear();
122 }
123};
Definition GECS.h:131
Definition GECS.h:224
Definition Line_w_Color.h:6
Definition GECSEntity.h:108
EntityID fromPort
When Port_to_Port.
Definition GECSEntity.h:128
Definition PathLinkerComponent.h:6
Definition PlaneColorRenderer.h:14
Definition Window.h:12
Definition TransformComponent.h:7
Definition Vertex.h:44