state save/load working! signal pause/play button added, and speed control is now better.
This commit is contained in:
+32
-6
@@ -83,12 +83,13 @@ int main(){
|
||||
std::ifstream f("state.json");
|
||||
json graph = json::parse(f);
|
||||
|
||||
app.settings = graph.at("settings");
|
||||
|
||||
// app.gm = graph["graphmanager"].get<VISEQ::GRAPH::GraphManager>();
|
||||
for(auto n : graph.at("graphmanager").at("nodes")){
|
||||
std::shared_ptr<MidiNode> mn = n;
|
||||
app.gm.nodes.push_back(mn);
|
||||
/*app.gm.addMidiNode(n.at("position").get<Vec2Df>());*/
|
||||
/*app.gm.nodes.back().midi_note_channel = n.at("midi_note_channel").get<int>();*/
|
||||
std::cout << std::format("adding node {}", mn->id) << std::endl;
|
||||
}
|
||||
|
||||
for(auto e : graph.at("graphmanager").at("edges")){
|
||||
@@ -98,10 +99,30 @@ int main(){
|
||||
VEC_SPTR_Node start = app.gm.nodes | RANGE_FILTER([start_id](SPTR_Node n){return n->id == start_id;}) | std::ranges::to<VEC_SPTR_Node>();
|
||||
VEC_SPTR_Node end = app.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()) app.gm.addConnection(start.front(), end.front());
|
||||
if(!start.empty() && !end.empty()) {
|
||||
std::cout << std::format("connection {} to {}", start_id, end_id) << std::endl;
|
||||
app.gm.addConnection(start.front(), end.front());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
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_SPTR_Node start = app.gm.nodes | RANGE_FILTER([start_id](SPTR_Node n){return n->id == start_id;}) | std::ranges::to<VEC_SPTR_Node>();
|
||||
VEC_SPTR_Node last = app.gm.nodes | RANGE_FILTER([last_id](SPTR_Node n){return n->id == last_id;}) | std::ranges::to<VEC_SPTR_Node>();
|
||||
VEC_SPTR_Node next = app.gm.nodes | RANGE_FILTER([next_id](SPTR_Node n){return n->id == next_id;}) | std::ranges::to<VEC_SPTR_Node>();
|
||||
ms->start = start.front();
|
||||
ms->next = next.front();
|
||||
ms->last = last.front();
|
||||
app.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){
|
||||
app.gm.addMidiNode(Vec2Df{(float)i * app.settings.grid*4 + 7 * app.settings.grid, 2 * app.settings.grid*4});
|
||||
@@ -211,14 +232,17 @@ int main(){
|
||||
}
|
||||
|
||||
if(mouse_released){
|
||||
int n_selected = 0;
|
||||
for(auto& n : app.gm.nodes){
|
||||
if(CheckCollisionPointRec(n->position, selection)) {
|
||||
n->selected = true;
|
||||
n->in_rect = false;
|
||||
n_selected++;
|
||||
} else {
|
||||
if(!IsKeyDown(KEY_LEFT_SHIFT)) n->selected = false;
|
||||
}
|
||||
}
|
||||
if(n_selected > 0) copied_nodes.clear();
|
||||
selection = (Rectangle){0,0,0,0};
|
||||
}
|
||||
break;
|
||||
@@ -308,7 +332,9 @@ int main(){
|
||||
} else if(!hovering_connectors.empty()){
|
||||
app.gm.addConnection(connecting_nodes.front(), hovering_connectors.front());
|
||||
} else {
|
||||
SPTR_Node new_node = app.gm.addMidiNode(mouse_pos);
|
||||
//SPTR_Node new_node = app.gm.addMidiNode(mouse_pos);
|
||||
SPTR_Node new_node = app.gm.copyNode(std::dynamic_pointer_cast<MidiNode>(connecting_nodes.front()), mouse_pos);
|
||||
new_node->connecting = false;
|
||||
app.gm.addConnection(connecting_nodes.front(), new_node);
|
||||
}
|
||||
}
|
||||
@@ -421,8 +447,8 @@ int main(){
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
//std::ofstream file("state.json");
|
||||
//file << json(app);
|
||||
std::ofstream file("state.json");
|
||||
file << json(app);
|
||||
|
||||
std::cout << std::setw(4) << json(app) << std::endl;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user