diff --git a/include/utils/App/App.h b/include/utils/App/App.h index 3a63237..857af87 100644 --- a/include/utils/App/App.h +++ b/include/utils/App/App.h @@ -117,14 +117,21 @@ namespace Archimedes { //insert temporarily to avoid circular dependencies runOrder.insert(roInsert, m->getName()); - for(auto it = runOrder.begin(); it != runOrder.end(); it++) { - - if(m->deps.find(*it) == m->deps.end()) { - if(std::holds_alternative(m->deps[*it])) - m->depsInstances[*it] = load(std::get(m->deps[*it])); - else - m->depsInstances[*it] = load(std::get(m->deps[*it])); + bool skip = false; + for(auto it : m->deps) { + for(auto s : runOrder) { + if(s == it.first) { + skip = true; + } } + + if(skip) + continue; + + if(std::holds_alternative(it.second)) + m->depsInstances[it.first] = load(std::get(it.second)); + else + m->depsInstances[it.first] = load(std::get(it.second)); } //reinsert once final order has been reached @@ -132,6 +139,9 @@ namespace Archimedes { runOrder.insert(roInsert, m->getName()); + for(auto s : runOrder) + std::cout << s << std::endl; + return m; } diff --git a/src/example_apps/ImguiEmbed/ImguiEmbed.cpp b/src/example_apps/ImguiEmbed/ImguiEmbed.cpp index 003b646..dcde452 100644 --- a/src/example_apps/ImguiEmbed/ImguiEmbed.cpp +++ b/src/example_apps/ImguiEmbed/ImguiEmbed.cpp @@ -2,30 +2,26 @@ void ImguiEmbed::run() { - for(auto* m : modules) { - std::cout << "Loading Module: " << m->getName() << std::endl; - //if(m->getName() != "WindowModule") - m->onLoad(); - } + for(auto m : runOrder) + modules[m]->onLoad(); // Main loop - while (!done && !modules.empty()) { + while (!done && !runOrder.empty()) { - for(auto* m : modules) { - //std::cout << "Running Module: " << m->getName() << std::endl; - //if(m->getName() != "WindowModule") - m->run(); + for(auto m : runOrder) { + modules[m]->run(); } - for(auto it = toClose.begin(); it != toClose.end(); it++) { - unload(it); + for(auto m : toClose) { + unload(m); } toClose.clear(); - for(std::string s : toOpen) { - load(s, modules.begin()); + for(std::string m : toOpen) { + load(m); } toOpen.clear(); } + } diff --git a/src/example_apps/ImguiEmbed/ImguiEmbed.h b/src/example_apps/ImguiEmbed/ImguiEmbed.h index 5710ed0..065ef25 100644 --- a/src/example_apps/ImguiEmbed/ImguiEmbed.h +++ b/src/example_apps/ImguiEmbed/ImguiEmbed.h @@ -13,7 +13,7 @@ class ImguiEmbed : public Archimedes::App { ImguiEmbed() { Archimedes::Module* m = (Archimedes::Module*) new TestImgui(nullptr, Get()); - load(m, {}); + load(m); }; ~ImguiEmbed() {}; diff --git a/src/example_apps/MinimalApp/MinimalApp.cpp b/src/example_apps/MinimalApp/MinimalApp.cpp index b3d3d3b..b8a939f 100644 --- a/src/example_apps/MinimalApp/MinimalApp.cpp +++ b/src/example_apps/MinimalApp/MinimalApp.cpp @@ -2,17 +2,19 @@ void MinimalApp::run() { - for(auto m : runOrder) + for(std::string m : runOrder) { + std::cout << "onLoad module: " << m << std::endl; modules[m]->onLoad(); + } // Main loop while (!done && !runOrder.empty()) { - for(auto m : runOrder) { + for(std::string m : runOrder) { modules[m]->run(); } - for(auto m : toClose) { + for(std::string m : toClose) { unload(m); } toClose.clear(); diff --git a/src/example_apps/MinimalApp/MinimalApp.h b/src/example_apps/MinimalApp/MinimalApp.h index b1e3487..18cdd65 100644 --- a/src/example_apps/MinimalApp/MinimalApp.h +++ b/src/example_apps/MinimalApp/MinimalApp.h @@ -13,8 +13,10 @@ class MinimalApp : public Archimedes::App { void handleArgs(const int& argc, char* argv[]) { if(argc > 1) { - for(int i = 1; i < argc; i++) + for(int i = 1; i < argc; i++) { + std::cout << "Attempting to load: " << argv[i] << std::endl; load(dynamicLoad(argv[i])); + } } else { std::cout << "No modules to load\n"; end();