From 0e6f2c72568e90a5ab2409c73b756d1a5e135bd5 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sat, 28 Dec 2024 01:02:29 +0100 Subject: [PATCH] Values and indicators match now --- src/midi-node.h | 2 +- src/node-handle.h | 36 ++++++++++++++++++++---------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/midi-node.h b/src/midi-node.h index 7a6c40b..7f2f9be 100644 --- a/src/midi-node.h +++ b/src/midi-node.h @@ -76,7 +76,7 @@ namespace VISEQ::GRAPH::NODES { float orbit_5 = orbit_4 + 30.0f; midiNoteHandles.emplace_back(std::make_shared>(midiNote.note, position, VS_COLOR_GREEN, "NOTE", orbit_5, 12)); - midiNoteHandles.emplace_back(std::make_shared>(midiNote.channel, position, VS_COLOR_PINK, "CHANNEL", orbit_1, 1, 1, 16, 40, 150)); + midiNoteHandles.emplace_back(std::make_shared>(midiNote.channel, position, VS_COLOR_PINK, "CHANNEL", orbit_1, 16, 1, 16, 40, 150)); midiNoteHandles.emplace_back(std::make_shared>(midiNote.gate, position, VS_COLOR_RED, "GATE", orbit_3, 30, 10, 30000, 40, 300)); midiNoteHandles.emplace_back(std::make_shared>(midiNote.velocity, position, VS_COLOR_PURPLE, "VELOCITY", orbit_4, 32)); diff --git a/src/node-handle.h b/src/node-handle.h index 102287d..948763b 100644 --- a/src/node-handle.h +++ b/src/node-handle.h @@ -43,6 +43,8 @@ namespace VISEQ::GRAPH::NODES{ int steps = 1; float angle_g = 0; + float angle_start = 0; + Vec2Df minP; Vec2Df maxP; @@ -62,13 +64,18 @@ namespace VISEQ::GRAPH::NODES{ } virtual void drag(Vec2Df mouse_pos) override { - float range = maxValue - minValue; - float stepping = 360 / range; - if(KEYS_DOWN.shift) stepping = steps; - float angle = Vector2Angle((SCREEN_MOUSE - parentPosition), Vector2(0,1)) * RAD2DEG; - float stepped_angle = (round(angle / stepping) * stepping) * DEG2RAD; - //position = parentPosition.orbitAlongVector(SCREEN_MOUSE, orbit) - parentPosition; - position = parentPosition.orbitAtAngle(orbit, stepped_angle) - parentPosition; + float range = (maxValue - minValue) + 1; + float stepping = 360.0f / range; + + if(KEYS_DOWN.shift) stepping = 360.0f/steps; + + float angle = Vector2Angle((SCREEN_MOUSE - parentPosition), Vector2(0,1)) * RAD2DEG; + + if(KEYS_PRESSED.ctrl) angle_start = angle; + if(KEYS_DOWN.ctrl) angle = angle_start + (angle - angle_start) / 10; + + float stepped_angle = (round(angle / stepping) * stepping) * DEG2RAD; + position = parentPosition.orbitAtAngle(orbit, stepped_angle) - parentPosition; } void lock(){ @@ -86,10 +93,11 @@ namespace VISEQ::GRAPH::NODES{ } void updateAssignedValue(){ - //T value = (T)Remap((float)(parentPosition + position).dist(parentPosition), minDistance, maxDistance, minValue, maxValue); float angle = 360 - (Vector2Angle(position, Vector2(0,1)) * RAD2DEG + 180); + float range = (maxValue - minValue) + 1; + float stepping = 360.0f / range; angle_g = angle; - T value = (T)Remap(angle, 0, 360, minValue, maxValue); + T value = (T)Remap(angle, 0, 359 - stepping, minValue, maxValue); assignedValueRef = value; } @@ -118,14 +126,10 @@ namespace VISEQ::GRAPH::NODES{ Color dcol = ColorBrightness(col, -0.5f); Color dyncol = show ? col : dcol; - //DrawLineV(minP, maxP, dcol); - //DrawLineV(parentPosition, minP, VS_COLOR_LIGHTGREY); - //DrawCircleV(minP, 3.0f, dyncol); - //DrawCircleV(maxP, 3.0f, dyncol); if(steps > 0){ - for(int i = 0; i < 360; i += steps){ - Vec2Df pos = parentPosition.orbitAtAngle(orbit, DEG2RAD * i); - Vec2Df pos1 = parentPosition.orbitAtAngle(orbit - 4.0f, DEG2RAD * i); + for(int i = 0; i < steps; i++){ + Vec2Df pos = parentPosition.orbitAtAngle(orbit, DEG2RAD * i * (360.0f/steps)); + Vec2Df pos1 = parentPosition.orbitAtAngle(orbit - 2.0f, DEG2RAD * i * (360.0f/steps)); //DrawCircleV(pos, 1.0f, dyncol); DrawLineV(pos, pos1, dyncol); }