diff --git a/src/connector.h b/src/connector.h index 1bae51a..21f8a96 100644 --- a/src/connector.h +++ b/src/connector.h @@ -93,8 +93,6 @@ namespace VISEQ::GRAPH { if(!partner.expired() || connecting) ViTexButton(SCREEN_MOUSE, position, rotation, 8.0f, TEXTURES::tex_connector_connected, TEXTURES::tex_connector_hover, ColorLerp(Fade(VS_COLOR_WHITE, .0f), Fade(VS_COLOR_WHITE, 1.0f), opacity)); - } - }; } diff --git a/src/graph-manager.cpp b/src/graph-manager.cpp index ceeec7f..659b04d 100644 --- a/src/graph-manager.cpp +++ b/src/graph-manager.cpp @@ -53,7 +53,7 @@ namespace VISEQ::GRAPH{ void GraphManager::addNode(SPTR_Node node){ std::cout << "added node " << node->id << std::endl; nodes.insert(nodes.end(), node); - node->update(); + nodes.back()->update(); } void GraphManager::addConnection(WPTR_Node from, WPTR_Node to){ @@ -64,10 +64,17 @@ namespace VISEQ::GRAPH{ edges.back()->edgeType = et; edges.back()->start = from; edges.back()->end = to; + from.lock()->update(); + to.lock()->update(); edges.back()->start_conn = from.lock()->connectors.back(); edges.back()->end_conn = to.lock()->connectors.back(); + + from.lock()->connections.push_back(edges.back()); to.lock()->connections.push_back(edges.back()); + + from.lock()->connectors.back()->partner = to.lock()->getConnector(); + to.lock()->connectors.back()->partner = from.lock()->getConnector(); } } @@ -354,13 +361,11 @@ namespace VISEQ::GRAPH{ float v1_v2_distance = v1_position.dist(&v2_position); if(v1_v2_distance < 100) c->switches_offset = v1_v2_distance/2.3f; - Vec2Df from_to_handle = c->start.lock()->position - ((c->start.lock()->position - c->end.lock()->position)).norm()*45.0f; //.norm() * (c->start.lock()->radius + c->switches_offset); - Vec2Df to_from_handle = c->end.lock()->position - ((c->end.lock()->position - c->start.lock()->position)).norm()*45.0f; //.norm() * (c->end.lock()->radius + c->switches_offset); + Vec2Df from_to_handle = c->start.lock()->position - ((c->start.lock()->position - c->end.lock()->position)).norm()*45.0f; + Vec2Df to_from_handle = c->end.lock()->position - ((c->end.lock()->position - c->start.lock()->position)).norm()*45.0f; Vec2Df middle_handle_2 = c->end.lock()->position - ((c->end.lock()->position - c->start.lock()->position)).norm()*65.0f; Vec2Df middle_handle = c->start.lock()->position - ((c->start.lock()->position - c->end.lock()->position)).norm()*65.0f; Vec2Df center_handle = c->end.lock()->position - ((c->end.lock()->position - c->start.lock()->position))*0.5f; - //Vec2Df flip_handle = middle_handle + (v1_position - v2_position).norm().orth() * (v1_v2_distance < 120.0f ? Clamp((120.0f - v1_v2_distance)*0.2, 0.f, 20.f) : 1.0f); - //Vec2Df flip_handle_2 = middle_handle_2 + (v1_position - v2_position).norm().orth() * (v1_v2_distance < 120.0f ? Clamp((120.0f - v1_v2_distance)*-0.2, -20.f, 0.f) : 1.0f); Vec2Df delete_position = center_handle + (c->start.lock()->position - c->end.lock()->position).norm().orth() * 12.0f; Vec2Df split_position = center_handle - (c->start.lock()->position - c->end.lock()->position).norm().orth() * 12.0f; @@ -374,15 +379,6 @@ namespace VISEQ::GRAPH{ float opacity_from_normalized = Clamp((float)opacity_from / 255.0f, .0f, 1.0f); float opacity_to_normalized = Clamp((float)opacity_to / 255.0f, .0f, 1.0f); - // float midi_gate_v1 = 0.0f; - // float midi_gate_v2 = 0.0f; - - // if(c->start.lock()->getNodeType() == NodeType::MIDINODE){ - // midi_gate_v1 = Clamp((4.f / 1000.f) * std::dynamic_pointer_cast(c->start.lock())->getNotes().gate, 1.f, 4.f); - // } - // if(c->end.lock()->getNodeType() == NodeType::MIDINODE){ - // midi_gate_v2 = Clamp((4.f / 1000.f) * std::dynamic_pointer_cast(c->end.lock())->getNotes().gate, 1.f, 4.f); - // } // Line with small connector circles if(c->end.lock()->getNodeType() == NodeType::MIDINODE && c->start.lock()->getNodeType() == NodeType::MIDINODE){ @@ -404,12 +400,6 @@ namespace VISEQ::GRAPH{ DrawTextPro(GetFontDefault(), std::format("{:.1f}",d).c_str(), text_position, (Vector2){0,0}, rotation, 10.0f, 2.0f, VS_COLOR_PINK); if( (int)d % 60 == 0) DrawTextPro(GetFontDefault(), frac.c_str(), text_position_frac, (Vector2){0,0}, rotation, 10.0f, 2.0f, VS_COLOR_PINK); } - // if(midi_gate_v1 == 4.0f) col = VS_COLOR_RED; - // DrawCircle(v1_position.x, v1_position.y, midi_gate_v1, col); - // - // col = {229, 181, 103, 255}; - // if(midi_gate_v2 == 4.0f) col = VS_COLOR_RED; - // DrawCircle(v2_position.x, v2_position.y, midi_gate_v2, col); if(!c->start.lock()->picked_up && !c->end.lock()->picked_up){ // On/Off switches on both sides diff --git a/src/interaction-manager.cpp b/src/interaction-manager.cpp index c2b73aa..64fcbd9 100644 --- a/src/interaction-manager.cpp +++ b/src/interaction-manager.cpp @@ -149,8 +149,8 @@ namespace VISEQ::INTERACTION{ auto connector = std::dynamic_pointer_cast(e.item); if(found && partner != e){ auto connector_to = std::dynamic_pointer_cast(partner.item); - connector->partner = connector_to; - connector_to->partner = connector; + //connector->partner = connector_to; + //connector_to->partner = connector; gm->addConnection(std::dynamic_pointer_cast(connector->parent.lock()), std::dynamic_pointer_cast(connector_to->parent.lock())); } else if (partner != e){ if(KEYS_DOWN.alt){ diff --git a/src/node.cpp b/src/node.cpp index bc0a15d..bd735e9 100644 --- a/src/node.cpp +++ b/src/node.cpp @@ -66,6 +66,16 @@ namespace VISEQ::GRAPH::NODES { in_selection_rect = CheckCollisionPointRec(position, state->selection); } + std::weak_ptr Node::getConnector(){ + for(auto c : connectors){ + if(c->partner.expired()) { + return c; + } + } + addConnector(); + return connectors.back(); + } + void Node::draw(Vec2Df mp, Camera2D cam) {} void Node::draw() { diff --git a/src/node.h b/src/node.h index 55502b4..f02e66c 100644 --- a/src/node.h +++ b/src/node.h @@ -44,6 +44,7 @@ namespace VISEQ::GRAPH::NODES { std::shared_ptr getPtr(); virtual bool hovering() override; void addConnector(); + std::weak_ptr getConnector(); void removeConnector(std::weak_ptr connector); virtual NodeType getNodeType() const; void deselect() override;