Config nodes change midi notes. Better would be midi nodes read from config nodes.

This commit is contained in:
Sebastian
2024-12-07 15:28:33 +01:00
parent 36273ba7ac
commit 3b0e7e986f
3 changed files with 98 additions and 42 deletions
+35 -11
View File
@@ -1,8 +1,12 @@
#pragma once
#include "datatypes.h"
#include "edge.h"
#include "midi-node.h"
#include "node.h"
#include "raymath.h"
#include <memory>
#include <vector>
namespace VISEQ::GRAPH::NODES {
@@ -38,28 +42,48 @@ namespace VISEQ::GRAPH::NODES {
mode = state->node_mode;
}
std::vector<std::weak_ptr<MidiNode>> getConnectedMidiNodes(){
auto midi_conns = connections | RANGE_FILTER([](EDGES::SPTR_Edge c){ return c->start.lock()->getNodeType() == NodeType::MIDINODE || c->end.lock()->getNodeType() == NodeType::MIDINODE;}) | std::ranges::to<std::vector<std::shared_ptr<EDGES::Edge>>>();
std::vector<std::weak_ptr<MidiNode>> midi_nodes;
for(auto e : midi_conns){
if(e->start.lock()->getNodeType() == NodeType::MIDINODE) midi_nodes.push_back(std::dynamic_pointer_cast<MidiNode>(e->start.lock()));
if(e->end.lock()->getNodeType() == NodeType::MIDINODE) midi_nodes.push_back(std::dynamic_pointer_cast<MidiNode>(e->end.lock()));
}
return midi_nodes;
}
void interact(){
float wheel = GetMouseWheelMove();
auto midi_nodes = getConnectedMidiNodes();
if(KEYS_DOWN.ctrl && !KEYS_DOWN.alt){
switch(state->node_mode){
case 0:{
midiNote.note += wheel;
for(auto mn : midi_nodes){
mn.lock()->modMidiNote(wheel);
}
break;}
case 1:{
midiCC.value += wheel;
for(auto mn : midi_nodes){
mn.lock()->modMidiCC(wheel);
}
break;}
case 2:{
midiPitchBend.value += wheel;
for(auto mn : midi_nodes){
mn.lock()->modMidiPitchBend(wheel);
}
break;}
};
if(midiNote.note < 0 ) midiNote.note = VISEQ::MIDI::Notes.size()-1;
if(midiNote.note >= (int)VISEQ::MIDI::Notes.size()) midiNote.note = 0;
if(midiNote.note < -127 ) midiNote.note = -127;
if(midiNote.note > 127 ) midiNote.note = 127;
if(midiCC.value < 0 ) midiCC.value = 127;
if(midiCC.value > 127 ) midiCC.value = 0;
if(midiCC.value < -127 ) midiCC.value = -127;
if(midiCC.value > 127 ) midiCC.value = 127;
if(midiPitchBend.value < 0 ) midiPitchBend.value = 0;
if(midiPitchBend.value < -16383 ) midiPitchBend.value = -16383;
if(midiPitchBend.value > 16383 ) midiPitchBend.value = 16383;
} else if(KEYS_DOWN.shift && !KEYS_DOWN.alt) {
@@ -136,16 +160,16 @@ namespace VISEQ::GRAPH::NODES {
} else {
switch(mode){
case 0:{
int offset = MeasureText(MIDI::Notes[(int)midiNote.note].c_str(), 12);
DrawText(MIDI::Notes[midiNote.note].c_str(), position.x-offset/2.0f, position.y-5, 12, WHITE );
int offset = MeasureText(std::format("{:+}", midiNote.note).c_str(), 12);
DrawText(std::format("{:+}", midiNote.note).c_str(), position.x-offset/2.0f, position.y-5, 12, WHITE );
break;}
case 1:{
int offset = MeasureText(std::format("{}", midiCC.value).c_str(), 12);
DrawText(std::format("{}", midiCC.value).c_str(), position.x-offset/2.0f, position.y-5, 12, WHITE );
int offset = MeasureText(std::format("{:+}", midiCC.value).c_str(), 12);
DrawText(std::format("{:+}", midiCC.value).c_str(), position.x-offset/2.0f, position.y-5, 12, WHITE );
break;}
case 2:{
int offset = MeasureText(std::format("{}", midiPitchBend.value).c_str(), 12);
DrawText(std::format("{}", midiPitchBend.value).c_str(), position.x-offset/2.0f, position.y-5, 12, WHITE );
int offset = MeasureText(std::format("{:+}", midiPitchBend.value).c_str(), 12);
DrawText(std::format("{:+}", midiPitchBend.value).c_str(), position.x-offset/2.0f, position.y-5, 12, WHITE );
break;}
}
}