8 std::vector<EntityID> innerLinks;
9 std::vector<EntityID> pathLinks;
12 float last_width = 1.0f;
27 void init()
override {
31 void update(
float deltaTime)
override {
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);
50 void addLink(EntityID linkId) {
54 std::find(pathLinks.begin(), pathLinks.end(), linkId) == pathLinks.end()) {
58 link->setParentEntity(entity);
59 pathLinks.push_back(linkId);
64 void removeLink(EntityID link) {
65 pathLinks.erase(std::remove(pathLinks.begin(), pathLinks.end(), link), pathLinks.end());
68 std::string GetComponentName()
override {
69 return "PathLinkerComponent";
72 void showGUI(std::vector<BaseComponent*> otherComponents = {})
override {
76 void showGUI(std::vector<BaseComponent*> otherComponents, std::vector<Entity*> otherEntities)
override {
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]));
86 EntityID prevToNode = prevLink->getToNode();
87 EntityID currFromNode = currLink->getFromNode();
89 if (prevToNode != currFromNode)
90 TAZ_ERROR(
"Should be same node to create innerPaths!");
92 EntityID prevToPortIndex = prevLink->toPort;
93 EntityID currFromPortIndex = currLink->
fromPort;
97 auto& newInnerLink = entity->getManager()->addEntity<
Link>(
98 prevToNode, currFromNode,
99 prevToPortIndex, currFromPortIndex,
100 prevLink->toSlotIndex, currLink->fromSlotIndex
102 newInnerLink.addToGroup(Manager::groupPathInnerLinks);
103 newInnerLink.setConnectionType(LinkEntity::ConnectionType::GHOST_PORT_TO_PORT);
105 newInnerLink.addComponent<
InnerLink>(prevLink->getId(), currLink->getId());
108 innerLinks.push_back(newInnerLink.getId());
110 entity->getManager()->grid->addLink(&newInnerLink, entity->getManager()->grid->getGridLevel());
114 void removeInnerLinks() {
115 for (
auto innerLinkId : innerLinks) {
116 Entity* innerEntity = entity->getManager()->getEntityFromId(innerLinkId);
117 if (!innerEntity)
continue;
119 innerEntity->destroy();