Running again after weak_ptr refactoring. No connecting of nodes atm. Copy/Paste might not work, too.

This commit is contained in:
Sebastian
2024-12-04 01:43:06 +01:00
parent 1fde652495
commit 036c6f4723
11 changed files with 150 additions and 104 deletions
+31 -40
View File
@@ -8,7 +8,6 @@
#include "canvas.h"
#include "graph-manager.h"
#include "midi-node.h"
#include "mouse.h"
#include "node.h"
#include "raylib.h"
#include "signal-manager.h"
@@ -20,27 +19,27 @@
using json = nlohmann::json;
namespace VISEQ::APP {
class AppManager;
void to_json(json& j, const AppManager& A);
void from_json(const json& j, AppManager& A);
class AppManager{
public:
AppManager() : im(gm->getPtr(), sm->getPtr(), canvas), ui(sm->getPtr(), gm->getPtr()) {}
AppManager() : sm(&gm, &mutex), im(&gm, &sm, canvas), mouse(&gm), ui(&sm, &gm) {}
std::mutex mutex;
std::shared_ptr<APP::State> state = APP::State::get();
std::shared_ptr<CANVAS::Canvas> canvas = std::make_shared<CANVAS::Canvas>();
VISEQ::GRAPH::GraphManager gm;
VISEQ::SIGNAL::SignalManager sm;
//VISEQ::GRAPH::GraphManager gm;
//VISEQ::SIGNAL::SignalManager sm;
std::shared_ptr<GraphManager> gm = std::make_shared<GraphManager>();
std::shared_ptr<SIGNAL::SignalManager> sm = std::make_shared<SIGNAL::SignalManager>(gm->getPtr(), &mutex);
VISEQ::INTERACTION::InteractionManager im;
VISEQ::APP::Mouse mouse;
// VISEQ::APP::Mouse mouse;
UI::AppUI ui;
NLOHMANN_DEFINE_TYPE_INTRUSIVE(AppManager, gm, sm);
void init(){
canvas->camera.target = (Vector2){ state->settings.width/2.0f, state->settings.height/2.0f };
canvas->camera.offset = (Vector2){ state->settings.width/2.0f, state->settings.height/2.0f };
@@ -55,7 +54,7 @@ namespace VISEQ::APP {
}
void startSignals(){
sm.startSignalThread();
sm->startSignalThread();
}
void loadState(){
@@ -81,8 +80,8 @@ namespace VISEQ::APP {
for(auto n : graph.at("graphmanager").at("nodes")){
std::shared_ptr<MidiNode> mn = n;
gm.addNode(mn);
//app.gm.nodes.push_back(mn);
gm->addNode(mn);
//app.gm->nodes.push_back(mn);
std::cout << std::format("adding node {}", mn->id) << std::endl;
}
@@ -90,57 +89,57 @@ namespace VISEQ::APP {
int start_id = e.at("start").get<int>();
int end_id = e.at("end").get<int>();
VEC_WPTR_Node start = gm.getNodesByID(start_id);
VEC_WPTR_Node end = gm.getNodesByID(end_id);
VEC_WPTR_Node start = gm->getNodesByID(start_id);
VEC_WPTR_Node end = gm->getNodesByID(end_id);
// VEC_SPTR_Node start = gm.nodes | RANGE_FILTER([start_id](SPTR_Node n){return n->id == start_id;}) | std::ranges::to<VEC_SPTR_Node>();
// VEC_SPTR_Node end = gm.nodes | RANGE_FILTER([end_id](SPTR_Node n){return n->id == end_id;}) | std::ranges::to<VEC_SPTR_Node>();
// VEC_SPTR_Node start = gm->nodes | RANGE_FILTER([start_id](SPTR_Node n){return n->id == start_id;}) | std::ranges::to<VEC_SPTR_Node>();
// VEC_SPTR_Node end = gm->nodes | RANGE_FILTER([end_id](SPTR_Node n){return n->id == end_id;}) | std::ranges::to<VEC_SPTR_Node>();
if(!start.empty() && !end.empty()) {
std::cout << std::format("connection {} to {}", start_id, end_id) << std::endl;
gm.addConnection(start.front(), end.front());
gm->addConnection(start.front(), end.front());
}
}
gm.lastEdge().lock()->newId(highest_id);
gm->lastEdge().lock()->newId(highest_id);
for(auto s : graph.at("signalmanager").at("signals")){
int start_id = s.at("start").get<int>();
int next_id = s.at("next").get<int>();
int last_id = s.at("last").get<int>();
std::shared_ptr<VISEQ::SIGNAL::Signal> ms = s;
VEC_WPTR_Node start = gm.getNodesByID(start_id);
VEC_WPTR_Node last = gm.getNodesByID(last_id);
VEC_WPTR_Node next = gm.getNodesByID(next_id);
VEC_WPTR_Node start = gm->getNodesByID(start_id);
VEC_WPTR_Node last = gm->getNodesByID(last_id);
VEC_WPTR_Node next = gm->getNodesByID(next_id);
ms->start = start.front();
ms->next = next.front();
ms->last = last.front();
sm.signals.push_back(ms);
sm->signals.push_back(ms);
std::cout << std::format("adding signal with start node {}", start_id) << std::endl;
}
} else {
for(int i = 0; i < 4; ++i){
gm.addMidiNode(Vec2Df{(float)i * state->settings.grid*4 + 7 * state->settings.grid, 2 * state->settings.grid*4});
gm->addMidiNode(Vec2Df{(float)i * state->settings.grid*4 + 7 * state->settings.grid, 2 * state->settings.grid*4});
}
for(int i = 3; i >= 0; --i){
gm.addMidiNode(Vec2Df{(float)i * state->settings.grid*4 + 7 * state->settings.grid, 3 * state->settings.grid*4});
gm->addMidiNode(Vec2Df{(float)i * state->settings.grid*4 + 7 * state->settings.grid, 3 * state->settings.grid*4});
}
for(int i = 0; i < 8; ++i){
gm.addConnection(gm.getNode(i), gm.getNode((i+1) % 8));
gm->addConnection(gm->getNode(i), gm->getNode((i+1) % 8));
}
sm.addSignalAtNode(gm.getFirstNode());
sm->addSignalAtNode(gm->getFirstNode());
}
}
void updateMidiPorts(){
for(auto&n : gm.getMidiNodes()){
for(auto&n : gm->getMidiNodes()){
auto nc = std::dynamic_pointer_cast<MidiNode>(n.lock());
for(auto& mo : sm.midi.midi_out_ports){
for(auto& mo : sm->midi.midi_out_ports){
if(!nc->midi_outs.contains(mo.number) && mo.enabled){
nc->midi_outs[mo.number] = {mo.number, mo.port.port_name, false};
}
@@ -154,13 +153,12 @@ namespace VISEQ::APP {
void update(){
state->update(canvas->camera);
canvas->update();
gm.update();
gm->update();
mutex.lock();
updateMidiPorts();
mutex.unlock();
mouse.update();
im.update();
}
@@ -171,9 +169,9 @@ namespace VISEQ::APP {
canvas->drawStart();
canvas->draw();
gm.drawNodes(SCREEN_MOUSE, canvas->camera);
gm.drawEdges(SCREEN_MOUSE, canvas->camera);
sm.drawSignals(SCREEN_MOUSE, canvas->camera);
gm->drawNodes(SCREEN_MOUSE, canvas->camera);
gm->drawEdges(SCREEN_MOUSE, canvas->camera);
sm->drawSignals(SCREEN_MOUSE, canvas->camera);
im.draw();
@@ -188,13 +186,6 @@ namespace VISEQ::APP {
mutex.unlock();
}
/*inline void to_json(json& j, const AppManager& A){*/
/* j = json{{"graphmanager", A.gm}, {"signalmanager", A.sm}};*/
/*}*/
/**/
/*inline void from_json(const json& j, AppManager& A){*/
/* j.at("graphmanager").get_to(A.gm); // = json{{"graphmanager", A.gm}, {"signalmanager", A.sm}};*/
/*}*/
};
}