node deletion with connection deletion and signal redistribution implemented
This commit is contained in:
+16
-14
@@ -2,6 +2,7 @@
|
||||
|
||||
#include "connection-manager.h"
|
||||
#include "datatypes.h"
|
||||
#include "node-manager.h"
|
||||
#include "signal.h"
|
||||
#include "node.h"
|
||||
#include "midi.h"
|
||||
@@ -13,12 +14,13 @@ class SignalManager{
|
||||
|
||||
public:
|
||||
SignalManager() {}
|
||||
SignalManager(ConnectionManager *cm, std::mutex *mutex) : mutex(mutex), cm(cm) {}
|
||||
SignalManager(NodeManager *nm, ConnectionManager *cm, std::mutex *mutex) : mutex(mutex), cm(cm), nm(nm) {}
|
||||
|
||||
Midi midi;
|
||||
|
||||
std::mutex *mutex;
|
||||
ConnectionManager *cm;
|
||||
NodeManager *nm;
|
||||
|
||||
std::vector<Signal> signals;
|
||||
|
||||
@@ -40,7 +42,7 @@ class SignalManager{
|
||||
|
||||
void reset(){
|
||||
for(auto &s : signals){
|
||||
s.position = s.start->position + Vec2D<float>{0.1, 0.1};
|
||||
s.position = nm->nodes[s.start].position + Vec2D<float>{0.1, 0.1};
|
||||
s.next = s.start;
|
||||
s.last = s.start;
|
||||
}
|
||||
@@ -56,12 +58,12 @@ class SignalManager{
|
||||
loop = false;
|
||||
}
|
||||
|
||||
void addSignalAtNode(Node *node){
|
||||
Color c = {(unsigned char)(232 - (rand() % 120)), (unsigned char)(125 + (int)(rand() % 120)), 62, 255};
|
||||
signals.emplace(signals.end(), Signal(node->position.x+1, node->position.y+1, 5.0f, 0, c)); // position + 1 or else it does not render. why? no idea!
|
||||
signals.back().next = node;
|
||||
signals.back().last = node;
|
||||
signals.back().start = node;
|
||||
void addSignalAtNode(int node_id){
|
||||
Color c = {(unsigned char)(232 - (rand() % 120)), 50, (unsigned char)(20 + (int)(rand() % 120)), 255};
|
||||
signals.emplace(signals.end(), Signal(nm->nodes[node_id].position.x+1, nm->nodes[node_id].position.y+1, 5.0f, 0, c)); // position + 1 or else it does not render. why? no idea!
|
||||
signals.back().next = node_id;
|
||||
signals.back().last = node_id;
|
||||
signals.back().start = node_id;
|
||||
}
|
||||
|
||||
void removeSignal(int n){
|
||||
@@ -76,14 +78,14 @@ class SignalManager{
|
||||
mutex->lock();
|
||||
if(play){
|
||||
for(auto& s : signals){
|
||||
s.direction = (s.next->position - s.position).norm();
|
||||
s.direction = (nm->nodes[s.next].position - s.position).norm();
|
||||
s.update(diff.count());
|
||||
if(s.position.dist(&s.next->position) < 1.0f) {
|
||||
Node* n = cm->next(s.next, s.last);
|
||||
if(s.position.dist(&nm->nodes[s.next].position) < 1.0f) {
|
||||
int n = cm->next(s.next, s.last);
|
||||
|
||||
if(n != s.next && n != nullptr) {
|
||||
for(auto &m : s.next->midi_outs){
|
||||
if(m.second.enabled) midi.note(m.second.i, s.next->midi_channel, s.next->midi_note, s.next->midi_velocity, s.next->midi_gate);
|
||||
if(n != s.next && n != -1) {
|
||||
for(auto &m : nm->nodes[s.next].midi_outs){
|
||||
if(m.second.enabled) midi.note(m.second.i, nm->nodes[s.next].midi_channel, nm->nodes[s.next].midi_note, nm->nodes[s.next].midi_velocity, nm->nodes[s.next].midi_gate);
|
||||
}
|
||||
s.last = s.next;
|
||||
s.next = n;
|
||||
|
||||
Reference in New Issue
Block a user