15 void addToGroup(Group mGroup)
override {
16 Entity::addToGroup(mGroup);
17 manager.AddToGroup(
this, mGroup);
20 void removeGroup(Group mGroup)
override {
21 Entity::removeGroup(mGroup);
22 manager.aboutTo_updateActiveEntities();
29 void update(
float deltaTime)
33 Entity::update(deltaTime);
36 void cellUpdate()
override {
37 if (this->ownerCell) {
40 if (newCell != this->ownerCell) {
42 manager.grid->addNode(
this, newCell);
46 std::scoped_lock lock(
manager.movedNodesMutex);
48 manager.movedNodes.push_back(getId());
52 for (
auto& linkId : inLinks) {
54 if (link->type == LinkEntity::ConnectionType::PORT_TO_PORT)
55 link->updateArrowHeads();
57 auto* nodeFrom =
dynamic_cast<NodeEntity*
>(
manager.getEntityFromId(link->getFromNode()));
58 for (
auto& depthLinkId : nodeFrom->getInLinks()) {
59 auto* depthLink =
dynamic_cast<LinkEntity*
>(
manager.getEntityFromId(depthLinkId));
60 if (depthLink->type == LinkEntity::ConnectionType::PORT_TO_PORT)
61 depthLink->updateArrowHeads();
63 for (
auto& depthLinkId :
dynamic_cast<NodeEntity*
>(
manager.getEntityFromId(link->getFromNode()))->getOutLinks()) {
64 auto* depthLink =
dynamic_cast<LinkEntity*
>(
manager.getEntityFromId(depthLinkId));
65 if (depthLink->type == LinkEntity::ConnectionType::PORT_TO_PORT)
66 depthLink->updateArrowHeads();
69 for (
auto& linkId : outLinks) {
71 if (link->type == LinkEntity::ConnectionType::PORT_TO_PORT)
72 link->updateArrowHeads();
73 for (
auto& depthLinkId :
dynamic_cast<NodeEntity*
>(
manager.getEntityFromId(link->getToNode()))->getInLinks()) {
74 auto* depthLink =
dynamic_cast<LinkEntity*
>(
manager.getEntityFromId(depthLinkId));
75 if (depthLink->type == LinkEntity::ConnectionType::PORT_TO_PORT)
76 depthLink->updateArrowHeads();
78 for (
auto& depthLinkId :
dynamic_cast<NodeEntity*
>(
manager.getEntityFromId(link->getToNode()))->getOutLinks()) {
79 auto* depthLink =
dynamic_cast<LinkEntity*
>(
manager.getEntityFromId(depthLinkId));
80 if (depthLink->type == LinkEntity::ConnectionType::PORT_TO_PORT)
81 depthLink->updateArrowHeads();
87 void imgui_print()
override {
88 glm::vec2 position = this->GetComponent<TransformComponent>().getPosition();
89 ImGui::Text(
"TazPosition: (%.2f, %.2f)", position.x, position.y);
94 void imgui_display()
override {
95 ImGui::Text(
"Display Info Here Node");
100 manager.aboutTo_updateActiveEntities();
104 auto createPort = [
this](NodePorts portName,
const glm::vec3& localPosition,
bool isHorizontal) {
105 const char* t_portName = NodePorts_ToString(portName);
107 if (
children.contains(t_portName)) {
109 std::string(
"Port already exists: ") + t_portName);
113 auto& port = getManager()->addEntityFromParent<
Empty>(
this, t_portName);
114 port.addToGroup(Manager::groupPorts);
118 children[t_portName] = port.getId();
119 getManager()->getEntityFromId(
children[t_portName])->setParentEntity(
this);
120 getManager()->getEntityFromId(
children[t_portName])->GetComponent<
TransformComponent>().local_normal_position = localPosition;
123 getManager()->getEntityFromId(
children[t_portName])->update(0.0f);
127 createPort(NodePorts::LEFT, glm::vec3(-1.0f, 0.0f, 0.0f),
true);
128 createPort(NodePorts::RIGHT, glm::vec3(1.0f, 0.0f, 0.0f),
true);
129 createPort(NodePorts::TOP, glm::vec3(0.0f, -1.0f, 0.0f),
false);
130 createPort(NodePorts::BOTTOM, glm::vec3(0.0f, 1.0f, 0.0f),
false);
134 void removePorts()
override {
135 for (
auto portName : { NodePorts::LEFT, NodePorts::RIGHT, NodePorts::TOP, NodePorts::BOTTOM }) {
137 const char* t_portName = NodePorts_ToString(portName);
139 if (
children.contains(t_portName)) {
140 getManager()->getEntityFromId(
children[t_portName])->destroy();
141 for (
auto& slot : getManager()->getEntityFromId(
children[t_portName])->
children)
143 auto* slotEnt = getManager()->getEntityFromId(slot.second);
152 void removeSlots()
override {
153 for (
auto portName : { NodePorts::LEFT, NodePorts::RIGHT, NodePorts::TOP, NodePorts::BOTTOM }) {
154 const char* t_portName = NodePorts_ToString(portName);
156 if (
children.contains(t_portName)) {
157 for (
auto slot : getManager()->getEntityFromId(
children[t_portName])->
children)
159 getManager()->getEntityFromId(slot.second)->destroy();