From 4d31a85d2d50f876f5a4ee61ab7089c6aeb91361 Mon Sep 17 00:00:00 2001 From: Nathan Date: Wed, 8 Apr 2026 12:30:30 -0500 Subject: [PATCH] test --- src/example_apps/RubiksApp/RubiksApp.cpp | 71 ++++++++++++++++++++++++ src/example_apps/RubiksApp/RubiksApp.h | 29 ++++++++++ src/example_apps/RubiksApp/default.nix | 56 +++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 src/example_apps/RubiksApp/RubiksApp.cpp create mode 100644 src/example_apps/RubiksApp/RubiksApp.h create mode 100644 src/example_apps/RubiksApp/default.nix diff --git a/src/example_apps/RubiksApp/RubiksApp.cpp b/src/example_apps/RubiksApp/RubiksApp.cpp new file mode 100644 index 0000000..d840e5d --- /dev/null +++ b/src/example_apps/RubiksApp/RubiksApp.cpp @@ -0,0 +1,71 @@ +#include "SandboxEmbed.h" + +bool SandboxEmbed::onEvent(const Archimedes::Event& event) { + + unsigned int type = getEventType(event); + + if(type == getEventType(Archimedes::DoLoadModuleEvent())) { + + Archimedes::DoLoadModuleEvent& e = (Archimedes::DoLoadModuleEvent&) event; + + startModule(e.module); + + return true; + + } else if(type == getEventType(Archimedes::DoUnloadModuleEvent())) { + + Archimedes::DoUnloadModuleEvent& e = (Archimedes::DoUnloadModuleEvent&) event; + + stopModule(e.module); + + return true; + + } else if(type == getEventType(Archimedes::LoadModuleEvent())) { + + return true; + } else if(type == getEventType(Archimedes::UnloadModuleEvent())) { + + return true; + } else if(type == getEventType(Archimedes::AnonymousEvent())) { + return true; + } + + return false; +} + +void SandboxEmbed::run() { + + for(std::string m : runOrder) { + modules[m]->onLoad(); + } + + + // Main loop + while (!done && !runOrder.empty()) { + + for(std::string m : runOrder) { + modules[m]->run(); + } + + handleEvents(); + + for(std::string m : toClose) { + unload(m); + } + toClose.clear(); + + for(auto m : toOpen) { + static Archimedes::Module* n; + if(std::holds_alternative(m)) { + n = load(std::get(m)); + } else { + n = load(std::get(m)); + } + if(n) { + n->onLoad(); + n = nullptr; + } + } + toOpen.clear(); + } +} diff --git a/src/example_apps/RubiksApp/RubiksApp.h b/src/example_apps/RubiksApp/RubiksApp.h new file mode 100644 index 0000000..d699e89 --- /dev/null +++ b/src/example_apps/RubiksApp/RubiksApp.h @@ -0,0 +1,29 @@ +#define ENTRYPOINT +#include "Archimedes.h" + +#include "modules/Archimedes-Modules/Sandbox/Sandbox.h" + +class SandboxEmbed : public Archimedes::App { + + private: + + void printHelp() override {}; + + bool onEvent(const Archimedes::Event&) override; + + public: + SandboxEmbed() { + Archimedes::Module* m = (Archimedes::Module*) new Sandbox(Get(), nullptr); + + load(m); + }; + ~SandboxEmbed() {}; + + void handleArgs(const int& argc, char* argv[]) override {}; + + void run() override; + +}; + +#define APP_TYPE SandboxEmbed +#include "endApp.h" diff --git a/src/example_apps/RubiksApp/default.nix b/src/example_apps/RubiksApp/default.nix new file mode 100644 index 0000000..17f88e3 --- /dev/null +++ b/src/example_apps/RubiksApp/default.nix @@ -0,0 +1,56 @@ +{ inputs, ... }: { + + + perSystem = { system, pkgs, self', ... }: { + packages.exampleApps_RubiksApp = pkgs.stdenvNoCC.mkDerivation { + + name = "Rubiks"; + + src = inputs.src; + + imgui = inputs.imgui; + + nativeBuildInputs = with pkgs; [ + clang + ]; + + buildInputs = with pkgs; [ + glfw + glew + + glm + nlohmann_json + curl + + stb + ]; + + buildPhase = '' + clang++ \ + example_apps/RubiksApp/*.cpp \ + modules/Archimedes-Modules/Rubiks/*.cpp \ + modules/WindowModule/*.cpp \ + modules/ImguiModule/*.cpp \ + $imgui/backends/imgui_impl_glfw.cpp \ + $imgui/backends/imgui_impl_opengl3.cpp \ + $imgui/misc/cpp/*.cpp \ + $imgui/*.cpp \ + -DRENDERER_OPENGL=1 \ + -DWINDOW_GLFW=1 \ + -I include -I $imgui -I . \ + -lEGL -lGL -lglfw -lGLEW \ + $(curl-config --cflags) \ + $(curl-config --libs) \ + -Wall \ + -o $name + ''; + + installPhase = '' + mkdir -p $out/bin + cp $name $out/bin + ''; + + }; }; + + +}