working again

This commit is contained in:
Sebastian
2026-05-04 22:24:29 +02:00
parent cae4acfdef
commit dc0003232a
6 changed files with 84 additions and 120 deletions
-2
View File
@@ -133,7 +133,6 @@ namespace VISEQ::INTERACTION{
bool connect_once = false;
state->mouse_z = canvas->z_index;
std::cout << state->event_queue.size() << " ";
for(auto e : state->event_queue){
if(!connect_once && e.action == APP::Interaction::CONNECT){
@@ -169,7 +168,6 @@ namespace VISEQ::INTERACTION{
while(state->event_queue.size() > 0 && !exit){
auto e = state->event_queue.front();
std::cout << e.action;
if(e.action == APP::Interaction::CLICK){
gm->addToSelection();
}
+1 -1
View File
@@ -287,7 +287,7 @@ namespace VISEQ::GRAPH::NODES {
if(selected) DrawCircleLinesV(position, radius+8, (Color){158, 255, 210, 255});
bool modified = false;
if(mode >= 0 && mode < 6){
if(selected && mode >= 0 && mode < 6){
for(auto mh : midiHandles[(Handles)mode]){
mh->unlock();
mh->draw();
-98
View File
@@ -1,98 +0,0 @@
#include "node-handle.h"
namespace VISEQ::GRAPH::NODES {
template<typename T>
void NodeHandle<T>::init(){
position = parentPosition.orbitAtAngle(orbit, 0) - parentPosition;
}
template<typename T>
float NodeHandle<T>::distance(){
return (parentPosition + position).dist(parentPosition);
}
template<typename T>
void NodeHandle<T>::drag(Vec2Df mouse_pos) {
float range = (maxValue - minValue) + 1;
float stepping = 360.0f / range;
if(KEYS_DOWN.shift) stepping = stepping * steps;
float angle = Vector2Angle((SCREEN_MOUSE - parentPosition), Vector2(0,1)) * RAD2DEG - 180; // -180 because round(180 / 33.75) * 33.75 is not 0
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 + 180) * DEG2RAD; // see above. -180 + 180 to get 0 right round(0 / 33.75) * 33.75 is still 0
position = parentPosition.orbitAtAngle(orbit, stepped_angle) - parentPosition;
}
template<typename T>
void NodeHandle<T>::lock(){
visible = false;
locked = true;
}
template<typename T>
void NodeHandle<T>::unlock(){
visible = true;
locked = false;
}
template<typename T>
bool NodeHandle<T>::hovering() {
return CheckCollisionPointCircle(SCREEN_MOUSE, position + parentPosition, radius);
}
template<typename T>
void NodeHandle<T>::update(Vec2Df pos) {
if(!locked && visible){
if(hovering()) state->pushEvent({getPtr(), APP::Interaction::HOVER});
if(hovering() && clicked()) state->pushEvent({getPtr(), APP::Interaction::PICKUP});
if(pickedUp()) state->pushEvent({getPtr(), APP::Interaction::DRAG});
}
if(picked_up && released()) state->pushEvent({getPtr(), APP::Interaction::PUTDOWN});
parentPosition = pos;
if(!locked && visible) updateAssignedValue();
minP = parentPosition.orbitAlongVector((parentPosition + position), minDistance);
maxP = parentPosition.orbitAlongVector((parentPosition + position), maxDistance);
}
template<typename T>
void NodeHandle<T>::draw() {
if(!locked && visible){
bool show = hovering() || picked_up;
Color dcol = ColorBrightness(col, -0.5f);
Color dyncol = show ? col : dcol;
Color dGrey = ColorBrightness(VS_COLOR_GREY, -0.2f);
Color dynGrey = show ? VS_COLOR_GREY : dGrey;
if(steps > 0){
for(int i = 0; i < steps; i++){
Vec2Df pos = parentPosition.orbitAtAngle(orbit, DEG2RAD * i * (360.0f/steps));
Vec2Df pos1 = parentPosition.orbitAtAngle(orbit - 3.0f, DEG2RAD * i * (360.0f/steps));
DrawLineV(pos, pos1, dynGrey);
}
}
float r = (parentPosition + position).dist(parentPosition);
DrawRing(parentPosition, r - 5, r + 5, 0, 360, 90, ColorAlpha(dyncol, 0.1));
DrawRing(parentPosition, r - 5, r + 5, -90, angle_g - 90, 90, ColorAlpha(dyncol, 0.3));
DrawCircleV(position + parentPosition, radius, dyncol);
//VISEQ::HELPER::DrawSuperText(std::format("{}", assignedValueRef), position + parentPosition, position + parentPosition + Vec2Df(50,0), 1, 0, 8, dyncol);
/*if(show) {*/
/* std::string text = std::format("{}", assignedValueRef);*/
/* DrawCenteredText(text, parentPosition, 12, ColorBrightness(dyncol, 0.75f));*/
/*}*/
}
}
template<typename T>
bool NodeHandle<T>::select() {
return false;
}
}
+83 -16
View File
@@ -70,13 +70,44 @@ namespace VISEQ::GRAPH::NODES{
bool locked = true;
bool visible = false;
void init();
void init(){
position = parentPosition.orbitAtAngle(orbit, 0) - parentPosition;
}
void assignValue(T &value){
assignedValueRef = value;
}
float distance(){
return (parentPosition + position).dist(parentPosition);
}
virtual void drag(Vec2Df mouse_pos) override {
float range = (maxValue - minValue) + 1;
float stepping = 360.0f / range;
void assignValue(T &value, float min, float max, float minDistance, float maxDistance){
if(KEYS_DOWN.shift) stepping = stepping * steps;
float angle = Vector2Angle((SCREEN_MOUSE - parentPosition), Vector2(0,1)) * RAD2DEG - 180; // -180 because round(180 / 33.75) * 33.75 is not 0
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 + 180) * DEG2RAD; // see above. -180 + 180 to get 0 right round(0 / 33.75) * 33.75 is still 0
position = parentPosition.orbitAtAngle(orbit, stepped_angle) - parentPosition;
}
void lock(){
visible = false;
locked = true;
}
void unlock(){
visible = true;
locked = false;
}
void assignValue(T &value, float min, float max, float minDistance, float maxDistance){
assignedValueRef = value;
}
@@ -93,22 +124,58 @@ namespace VISEQ::GRAPH::NODES{
}
assignedValueRef = value;
}
float distance();
virtual void drag(Vec2Df mouse_pos) override;
virtual bool hovering() override {
return CheckCollisionPointCircle(SCREEN_MOUSE, position + parentPosition, radius);
}
virtual void update(Vec2Df pos) override {
if(!locked && visible){
if(hovering()) state->pushEvent({getPtr(), APP::Interaction::HOVER});
if(hovering() && clicked()) state->pushEvent({getPtr(), APP::Interaction::PICKUP});
if(pickedUp()) state->pushEvent({getPtr(), APP::Interaction::DRAG});
}
if(picked_up && released()) state->pushEvent({getPtr(), APP::Interaction::PUTDOWN});
parentPosition = pos;
if(!locked && visible) updateAssignedValue();
minP = parentPosition.orbitAlongVector((parentPosition + position), minDistance);
maxP = parentPosition.orbitAlongVector((parentPosition + position), maxDistance);
}
virtual void draw() override {
if(!locked && visible){
bool show = hovering() || picked_up;
Color dcol = ColorBrightness(col, -0.5f);
Color dyncol = show ? col : dcol;
Color dGrey = ColorBrightness(VS_COLOR_GREY, -0.2f);
Color dynGrey = show ? VS_COLOR_GREY : dGrey;
if(steps > 0){
for(int i = 0; i < steps; i++){
Vec2Df pos = parentPosition.orbitAtAngle(orbit, DEG2RAD * i * (360.0f/steps));
Vec2Df pos1 = parentPosition.orbitAtAngle(orbit - 3.0f, DEG2RAD * i * (360.0f/steps));
DrawLineV(pos, pos1, dynGrey);
}
}
float r = (parentPosition + position).dist(parentPosition);
DrawRing(parentPosition, r - 5, r + 5, 0, 360, 90, ColorAlpha(dyncol, 0.1));
DrawRing(parentPosition, r - 5, r + 5, -90, angle_g - 90, 90, ColorAlpha(dyncol, 0.3));
DrawCircleV(position + parentPosition, radius, dyncol);
//VISEQ::HELPER::DrawSuperText(std::format("{}", assignedValueRef), position + parentPosition, position + parentPosition + Vec2Df(50,0), 1, 0, 8, dyncol);
/*if(show) {*/
/* std::string text = std::format("{}", assignedValueRef);*/
/* DrawCenteredText(text, parentPosition, 12, ColorBrightness(dyncol, 0.75f));*/
/*}*/
}
}
void lock();
void unlock();
virtual bool hovering() override;
virtual void update(Vec2Df pos) override;
virtual void draw() override;
virtual bool select() override;
virtual bool select() override {
return false;
}
NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(NodeHandle, position, name);
};
-2
View File
@@ -8,12 +8,10 @@
namespace VISEQ::APP{
void State::pushEvent(InteractionEvent e){
std::cout << "push event" << std::endl;
event_queue.push_back(e);
}
InteractionEvent State::pullEvent(){
std::cout << "pull event" << std::endl;
if(!event_queue.empty()){
InteractionEvent e = event_queue.front();
event_queue.pop_front();