connectors need fixing

This commit is contained in:
Sebastian
2026-06-28 23:45:54 +02:00
parent 03b2989130
commit e9c8cc9aea
5 changed files with 23 additions and 24 deletions
-2
View File
@@ -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));
}
};
}
+10 -20
View File
@@ -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<MidiNode>(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<MidiNode>(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
+2 -2
View File
@@ -149,8 +149,8 @@ namespace VISEQ::INTERACTION{
auto connector = std::dynamic_pointer_cast<Connector>(e.item);
if(found && partner != e){
auto connector_to = std::dynamic_pointer_cast<Connector>(partner.item);
connector->partner = connector_to;
connector_to->partner = connector;
//connector->partner = connector_to;
//connector_to->partner = connector;
gm->addConnection(std::dynamic_pointer_cast<Node>(connector->parent.lock()), std::dynamic_pointer_cast<Node>(connector_to->parent.lock()));
} else if (partner != e){
if(KEYS_DOWN.alt){
+10
View File
@@ -66,6 +66,16 @@ namespace VISEQ::GRAPH::NODES {
in_selection_rect = CheckCollisionPointRec(position, state->selection);
}
std::weak_ptr<Connector> 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() {
+1
View File
@@ -44,6 +44,7 @@ namespace VISEQ::GRAPH::NODES {
std::shared_ptr<Node> getPtr();
virtual bool hovering() override;
void addConnector();
std::weak_ptr<Connector> getConnector();
void removeConnector(std::weak_ptr<Connector> connector);
virtual NodeType getNodeType() const;
void deselect() override;