better states

This commit is contained in:
Sebastian
2024-10-24 21:05:05 +02:00
parent 79c3de9d97
commit 95e762cb8b
2 changed files with 24 additions and 42 deletions
+22 -42
View File
@@ -124,10 +124,10 @@ int main(){
Vec2D<float> cam_drag_offset;
Vec2D<float> cam_mouse_drag_offset;
Node* connecting_from = nullptr;
double drag_timer = GetTime();
enum InteractionState {HOVER_CANVAS, HOVER_NODE, HOVER_CONNECTOR, DRAG_NODE, CONNECT_NODE};
Vec2D<float> select_start;
Rectangle selection;
@@ -146,6 +146,10 @@ int main(){
bool mouse_clicked = IsMouseButtonPressed(MOUSE_BUTTON_LEFT);
bool mouse_released = IsMouseButtonReleased(MOUSE_BUTTON_LEFT);
bool mouse_right_down = IsMouseButtonDown(MOUSE_BUTTON_RIGHT);
bool mouse_right_clicked = IsMouseButtonPressed(MOUSE_BUTTON_RIGHT);
bool mouse_right_released = IsMouseButtonReleased(MOUSE_BUTTON_RIGHT);
for(auto &n : nodes){
n.hovering = false;
n.hover_connect = false;
@@ -156,7 +160,11 @@ int main(){
auto hovering_nodes = nodes | std::ranges::views::filter([&mouse_pos](Node n) { return CheckCollisionPointCircle(mouse_pos, n.position, n.radius);});
auto hovering_connectors = nodes | std::ranges::views::filter([&mouse_pos](Node n) { return CheckCollisionPointCircle(mouse_pos, (n.position - ((n.position - mouse_pos)).norm() * (n.radius + 14.0f)), 8.0f);});
if(IsMouseButtonDown(MOUSE_BUTTON_RIGHT)){
if(hovering_nodes.empty() && IsMouseButtonDown(MOUSE_BUTTON_RIGHT)){
Vector2 delta = GetMouseDelta();
delta = Vector2Scale(delta, -1.0f/camera.zoom);
camera.target = Vector2Add(camera.target, delta);
@@ -165,7 +173,9 @@ int main(){
float wheel = GetMouseWheelMove();
if(wheel != 0){
if(!hovering_nodes.empty() && IsKeyDown(KEY_LEFT_CONTROL)){
hovering_nodes.front().midi_note = (hovering_nodes.front().midi_note + 1) % midi.midiNotes.size();
hovering_nodes.front().midi_note += wheel;
if(hovering_nodes.front().midi_note < 0 ) hovering_nodes.front().midi_note = midi.midiNotes.size()-1;
if(hovering_nodes.front().midi_note >= midi.midiNotes.size() ) hovering_nodes.front().midi_note = 0;
} else {
Vector2 mouseWorldPos = GetScreenToWorld2D(GetMousePosition(), camera);
camera.offset = GetMousePosition();
@@ -181,7 +191,7 @@ int main(){
}
BeginDrawing();
DrawFPS(app.width - 300, 50);
DrawFPS(20, app.height - 100);
ClearBackground((Color){46,46,46});
BeginMode2D(camera);
@@ -193,10 +203,10 @@ int main(){
}
}
for(auto &h : hovering_connectors){
h.hover_connect = true;
}
if(dragging_nodes.empty() && connecting_nodes.empty()) {
if(!hovering_connectors.empty()){
@@ -244,11 +254,11 @@ int main(){
if(mouse_clicked){
drag_timer = GetTime();
}
if(mouse_down && GetTime() - drag_timer > 0.07){
if(mouse_right_down && GetTime() - drag_timer > 0.1){
hovering_nodes.front().drag_offset = hovering_nodes.front().position - mouse_pos;
hovering_nodes.front().dragging = true;
}
if(mouse_released && GetTime() - drag_timer <= 0.07){
if(mouse_right_released && GetTime() - drag_timer <= 0.1){
hovering_nodes.front().config = true;
}
}
@@ -295,52 +305,22 @@ int main(){
cm.addConnection(&connecting_nodes.front(), &hovering_nodes.front());
} else if(!hovering_connectors.empty()){
cm.addConnection(&connecting_nodes.front(), &hovering_connectors.front());
} else {
nodes.emplace_back(mouse_pos.x, mouse_pos.y, 15.0f);
cm.addConnection(&connecting_nodes.front(), &nodes.back());
}
connecting_nodes.front().connecting = false;
}
}
for(auto& n : nodes){
/*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 = (n.position - mouse_pos).length();*/
/**/
/*// connect nodes*/
/*if( (dist <= n.radius + 25.0f && dist > n.radius) || n.connecting){*/
/* n.hover_connect = true;*/
/*} else {*/
/* n.hover_connect = false;*/
/*}*/
/**/
/*if(dist_connector <= 8.0f && mouse_clicked && !connecting) {*/
/* connecting_from = &n;*/
/* n.connecting = true;*/
/* connecting = true;*/
/*}*/
/**/
/*if(n.connecting && mouse_down){*/
/* DrawLine(connector_position.x, connector_position.y, mouse_pos.x, mouse_pos.y, (Color){229, 181, 103, 255});*/
/*}*/
/**/
/*if(mouse_released && n.connecting) {*/
/* n.connecting = false;*/
/* //connecting_from = nullptr;*/
/*}*/
/**/
/*if(mouse_released && (n.hover_connect || n.dragging)) {*/
/* if(&n != connecting_from && connecting_from != nullptr){*/
/* cm.addConnection(connecting_from, &n);*/
/* connecting_from = nullptr;*/
/* }*/
/*}*/
n.draw(&mouse_pos, &camera);
}
cm.drawConnections(&mouse_pos, &camera);
sm.drawSignals(&mouse_pos, &camera);
midi.update();
midi.update();
EndMode2D();
// Main Config Window
+2
View File
@@ -17,6 +17,8 @@ class Signal : public Movable{
Node *next;
Node *last;
Node *start;
bool at_target = false;
int target_node_id = 1;
int source_node_id = 0;