This commit is contained in:
Sebastian
2024-10-18 01:27:14 +02:00
parent add8749bb9
commit d1542870d5
4 changed files with 27 additions and 12 deletions
+1 -1
View File
@@ -23,7 +23,7 @@ class ConnectionManager{
p.active = false; p.active = false;
paths.push_back(&p); paths.push_back(&p);
} }
if(p.v1 == last || p.v2 == last) last_ok = true; if(((p.v1 == last && p.v2_v1) || (p.v2 == last && p.v1_v2))) last_ok = true;
} }
if(paths.empty() && last_ok) return last; if(paths.empty() && last_ok) return last;
+4
View File
@@ -16,6 +16,7 @@ class Connection{
bool v2_v1 = true; bool v2_v1 = true;
bool active = false; bool active = false;
bool remove = false; bool remove = false;
bool config = false;
void draw(){ void draw(){
Vec2D<float> v1_position = v1->position - ((v1->position - v2->position)).norm() * (v1->radius + 10.0f); Vec2D<float> v1_position = v1->position - ((v1->position - v2->position)).norm() * (v1->radius + 10.0f);
@@ -28,10 +29,13 @@ class Connection{
Vec2D<float> from_to_handle = v1->position - ((v1->position - v2->position)).norm() * (v1->radius + 35); Vec2D<float> from_to_handle = v1->position - ((v1->position - v2->position)).norm() * (v1->radius + 35);
Vec2D<float> to_from_handle = v2->position - ((v2->position - v1->position)).norm() * (v2->radius + 35); Vec2D<float> to_from_handle = v2->position - ((v2->position - v1->position)).norm() * (v2->radius + 35);
Vec2D<float> middle_handle = v2->position - ((v2->position - v1->position))*0.5f; Vec2D<float> middle_handle = v2->position - ((v2->position - v1->position))*0.5f;
Vec2D<float> config_handle = v2->position - ((v2->position - v1->position))*0.66f;
if(ViButton(from_to_handle.x, from_to_handle.y, 8.0f, v1_v2 ? (Color){232, 125, 62, 255} : (Color){232, 50, 32, 255} )) v1_v2 = !v1_v2; if(ViButton(from_to_handle.x, from_to_handle.y, 8.0f, v1_v2 ? (Color){232, 125, 62, 255} : (Color){232, 50, 32, 255} )) v1_v2 = !v1_v2;
if(ViButton(to_from_handle.x, to_from_handle.y, 8.0f, v2_v1 ? (Color){232, 125, 62, 255} : (Color){232, 50, 32, 255} )) v2_v1 = !v2_v1; if(ViButton(to_from_handle.x, to_from_handle.y, 8.0f, v2_v1 ? (Color){232, 125, 62, 255} : (Color){232, 50, 32, 255} )) v2_v1 = !v2_v1;
if(ViButton(middle_handle.x, middle_handle.y, 8.0f, (Color){232, 50, 32, 255} )) remove = true; if(ViButton(middle_handle.x, middle_handle.y, 8.0f, (Color){232, 50, 32, 255} )) remove = true;
if(ViButton(config_handle.x, config_handle.y, 8.0f, (Color){158, 134, 200, 255})) config = !config;
} }
}; };
+14 -5
View File
@@ -39,6 +39,7 @@
#include "connection-manager.h" #include "connection-manager.h"
libremidi::observer obs; libremidi::observer obs;
std::vector<libremidi::midi_out> midi_outs;
libremidi::midi_out midi_out; libremidi::midi_out midi_out;
std::vector<libremidi::input_port> midi_in_ports; std::vector<libremidi::input_port> midi_in_ports;
@@ -138,7 +139,7 @@ int main(){
bool dragging = false; bool dragging = false;
for(auto& n : nodes){ for(auto& n : nodes){
Vec2D<float> connector_position = n.position - ((n.position - mouse_pos)).norm() * (n.radius + 10.0f); Vec2D<float> connector_position = n.position - ((n.position - mouse_pos)).norm() * (n.radius + 14.0f);
float dist_connector = (connector_position - mouse_pos).length(); float dist_connector = (connector_position - mouse_pos).length();
float dist = (n.position - mouse_pos).length(); float dist = (n.position - mouse_pos).length();
@@ -150,7 +151,7 @@ int main(){
n.hover_connect = false; n.hover_connect = false;
} }
if(dist_connector <= 6.0f && mouse_clicked && !connecting) { if(dist_connector <= 8.0f && mouse_clicked && !connecting) {
connecting_from = &n; connecting_from = &n;
n.connecting = true; n.connecting = true;
connecting = true; connecting = true;
@@ -228,13 +229,21 @@ int main(){
for(auto& n : nodes){ for(auto& n : nodes){
if(n.config){ if(n.config){
n.config = !GuiWindowBox((Rectangle){n.position.x + 10, n.position.y + 10,200,300}, "config");
int option = n.mode; int option = n.mode;
GuiComboBox((Rectangle){ 20, 100, 240, 20 }, "Round Robin;Random", &option); GuiComboBox((Rectangle){ n.position.x + 20, n.position.y + 40, 200, 20 }, "Round Robin;Random", &option);
n.mode = (Distribution)option; n.mode = (Distribution)option;
if(GuiButton((Rectangle){20, 140, 240, 20 }, "button")){
} }
} }
for(auto& c : cm.connections){
if(c.config){
Vec2D<float> config_handle = c.v2->position - ((c.v2->position - c.v1->position))*0.75f;
c.config = !GuiWindowBox((Rectangle){config_handle.x + 10, config_handle.y + 10, 200, 300}, "connection");
GuiToggle((Rectangle){config_handle.x + 10, config_handle.y + 50, 80, 20}, "v1v2", &c.v1_v2);
GuiToggle((Rectangle){config_handle.x + 100, config_handle.y + 50, 80, 20}, "v2v1", &c.v2_v1);
}
} }
EndDrawing(); EndDrawing();
+5 -3
View File
@@ -5,7 +5,7 @@
#include "datatypes.h" #include "datatypes.h"
#include "moveable.h" #include "moveable.h"
#define R 10.0f #define R 14.0f
class Node : public Movable{ class Node : public Movable{
@@ -32,14 +32,16 @@ class Node : public Movable{
if(!hover_move) DrawCircle(position.x, position.y, radius, (Color){180, 210, 115, 255}); if(!hover_move) DrawCircle(position.x, position.y, radius, (Color){180, 210, 115, 255});
if(hover_move) DrawCircle(position.x, position.y, radius, (Color){108, 153, 187, 255}); if(hover_move) DrawCircle(position.x, position.y, radius, (Color){108, 153, 187, 255});
if(mode == Distribution::RANDOM) DrawCircle(position.x, position.y, radius/2.0f, (Color){229, 181, 103, 255});
Vec2D<float> connector = position - ((position - *mouse)).norm() * (radius + R); Vec2D<float> connector = position - ((position - *mouse)).norm() * (radius + R);
if(hover_connect){ if(hover_connect){
DrawCircleLines(position.x, position.y, radius + R, (Color){108, 153, 187, 255}); DrawCircleLines(position.x, position.y, radius + R, (Color){108, 153, 187, 255});
DrawCircle(connector.x, connector.y, 6.0f, (Color){108, 153, 187, 255}); DrawCircle(connector.x, connector.y, 8.0f, (Color){108, 153, 187, 255});
} else { } else {
DrawCircleLines(position.x, position.y, radius + R, (Color){108, 153, 187, 50}); DrawCircleLines(position.x, position.y, radius + R, (Color){108, 153, 187, 50});
DrawCircle(connector.x, connector.y, 6.0f, (Color){108, 153, 187, 50}); DrawCircle(connector.x, connector.y, 8.0f, (Color){108, 153, 187, 50});
} }
} }
}; };