#pragma once #include "datatypes.h" #include "node-manager.h" #include "connection-manager.h" #include "signal-manager.h" #include "ui.h" class AppState{ public: AppState() : sm(&cm, &mutex), ui(&settings, &nm, &cm, &sm) {} enum States {IDLE, CONFIG}; AppSettings settings; States state; std::mutex mutex; ConnectionManager cm; SignalManager sm; NodeManager nm; AppUI ui; void updateMidiPorts(){ for(auto&n : nm.nodes){ for(auto& mo : sm.midi.midi_out_ports){ if(!n.midi_outs.contains(mo.number) && mo.enabled){ n.midi_outs[mo.number] = {mo.number, mo.port.port_name, false}; } if(n.midi_outs.contains(mo.number) && !mo.enabled){ n.midi_outs.erase(mo.number); } } } } void draw(Vec2D *mouse_pos, Camera2D *camera){ mutex.lock(); updateMidiPorts(); nm.drawNodes(mouse_pos, camera); cm.drawConnections(mouse_pos, camera); sm.drawSignals(mouse_pos, camera); mutex.unlock(); } void drawUI(Vec2D *mouse_pos, Camera2D *camera){ mutex.lock(); ui.draw(mouse_pos, camera); mutex.unlock(); } };