conversion to smart pointers done but still buggy
This commit is contained in:
+28
-25
@@ -2,10 +2,12 @@
|
||||
|
||||
#include "datatypes.h"
|
||||
#include "graph-manager.h"
|
||||
#include "midi-node.h"
|
||||
#include "signal.h"
|
||||
#include "midi.h"
|
||||
|
||||
#include <chrono>
|
||||
#include <memory>
|
||||
#include <thread>
|
||||
|
||||
class SignalManager{
|
||||
@@ -19,11 +21,11 @@ class SignalManager{
|
||||
std::mutex *mutex;
|
||||
GraphManager *gm;
|
||||
|
||||
std::vector<Signal> signals;
|
||||
std::vector<std::shared_ptr<Signal>> signals;
|
||||
|
||||
bool loop = true;
|
||||
bool play = false;
|
||||
|
||||
|
||||
void pause(){
|
||||
play = false;
|
||||
}
|
||||
@@ -39,9 +41,9 @@ class SignalManager{
|
||||
|
||||
void reset(){
|
||||
for(auto &s : signals){
|
||||
s.position = gm->node(s.start)->position + Vec2D<float>{0.1, 0.1};
|
||||
s.next = s.start;
|
||||
s.last = s.start;
|
||||
s->position = s->start->position + Vec2D<float>{0.1, 0.1};
|
||||
s->next = s->start;
|
||||
s->last = s->start;
|
||||
}
|
||||
gm->reset();
|
||||
}
|
||||
@@ -55,12 +57,12 @@ class SignalManager{
|
||||
loop = false;
|
||||
}
|
||||
|
||||
void addSignalAtNode(int node_id){
|
||||
void addSignalAtNode(std::shared_ptr<Node> node){
|
||||
Color c = {(unsigned char)(20 + (rand() % 200)), 100, (unsigned char)(20 + (int)(rand() % 200)), 200};
|
||||
signals.emplace(signals.end(), Signal(gm->node(node_id)->position.x+1, gm->node(node_id)->position.y+1, 8.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;
|
||||
signals.emplace_back(std::make_shared<Signal>(node->position, 8.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 removeSignal(int n){
|
||||
@@ -75,22 +77,23 @@ class SignalManager{
|
||||
mutex->lock();
|
||||
if(play){
|
||||
for(auto& s : signals){
|
||||
s.direction = (gm->node(s.next)->position - s.position).norm();
|
||||
s.update(diff.count());
|
||||
if(s.position.dist(&gm->node(s.next)->position) < 0.6f) {
|
||||
int n = gm->next(s.next, s.last);
|
||||
gm->triggerNode(s.next);
|
||||
s->direction = (s->next->position - s->position).norm();
|
||||
s->update(diff.count());
|
||||
if(s->position.dist(s->next->position) < 0.6f) {
|
||||
std::shared_ptr<Node> next_node = gm->next(s->next, s->last);
|
||||
s->next->trigger();
|
||||
|
||||
if(n != s.next && n != -1) {
|
||||
for(auto &m : gm->node(s.next)->midi_outs){
|
||||
if(next_node != s->next && next_node != std::shared_ptr<Node>(nullptr) && s->next->getNodeType() == NodeType::MIDINODE) {
|
||||
auto midinode = std::dynamic_pointer_cast<MidiNode>(s->next);
|
||||
for(auto &m : midinode->midi_outs){
|
||||
if(m.second.enabled) {
|
||||
if(gm->node(s.next)->send_note) midi.note(m.second.i, gm->node(s.next)->midi_note_channel, gm->node(s.next)->midi_note, gm->node(s.next)->midi_velocity, gm->node(s.next)->midi_gate);
|
||||
if(gm->node(s.next)->send_cc) midi.cc(m.second.i, gm->node(s.next)->midi_cc_channel, gm->node(s.next)->midi_cc, gm->node(s.next)->midi_cc_value);
|
||||
if(gm->node(s.next)->send_pitch_bend) midi.pitch_bend(m.second.i, gm->node(s.next)->midi_pitch_bend_channel, gm->node(s.next)->midi_pitch_bend);
|
||||
if(midinode->send_note) midi.note(m.second.i, midinode->midi_note_channel, midinode->midi_note, midinode->midi_velocity, midinode->midi_gate);
|
||||
if(midinode->send_cc) midi.cc(m.second.i, midinode->midi_cc_channel, midinode->midi_cc, midinode->midi_cc_value);
|
||||
if(midinode->send_pitch_bend) midi.pitch_bend(m.second.i, midinode->midi_pitch_bend_channel, midinode->midi_pitch_bend);
|
||||
}
|
||||
}
|
||||
s.last = s.next;
|
||||
s.next = n;
|
||||
s->last = s->next;
|
||||
s->next = next_node;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -102,10 +105,10 @@ class SignalManager{
|
||||
}
|
||||
}
|
||||
|
||||
void drawSignals(Vec2D<float> *mouse_pos, Camera2D *camera){
|
||||
for(auto& s : signals){
|
||||
void drawSignals(Vec2D<float> mouse_pos, Camera2D camera){
|
||||
for(auto s : signals){
|
||||
mutex->lock();
|
||||
s.draw(mouse_pos, camera);
|
||||
s->draw(mouse_pos, camera);
|
||||
mutex->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user