aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoek Le Blansch <loek@pipeframe.xyz>2024-12-18 13:03:49 +0100
committerLoek Le Blansch <loek@pipeframe.xyz>2024-12-18 13:03:49 +0100
commit38c5e1bb819d2bf06b9d8c387726fa285a9a3065 (patch)
tree8e68d4c576d51b90e413cab08e60e37759d3d5bd /src
parent81404db80bbf9463c3d535ae389e7fbb753a902c (diff)
add test + fix audio crash
Diffstat (limited to 'src')
-rw-r--r--src/crepe/api/LoopManager.h19
-rw-r--r--src/example/CMakeLists.txt1
-rw-r--r--src/example/audio-crash.cpp47
3 files changed, 58 insertions, 9 deletions
diff --git a/src/crepe/api/LoopManager.h b/src/crepe/api/LoopManager.h
index 1d23cbf..124cd3a 100644
--- a/src/crepe/api/LoopManager.h
+++ b/src/crepe/api/LoopManager.h
@@ -71,9 +71,19 @@ private:
private:
//! Global context
Mediator mediator;
+ /**
+ * \brief Collection of System instances
+ *
+ * This map holds System instances indexed by the system's class typeid. It is filled in the
+ * constructor of LoopManager using LoopManager::load_system.
+ */
+ std::unordered_map<std::type_index, std::unique_ptr<System>> systems;
//! SDLContext instance
SDLContext sdl_context{mediator};
+ //! Resource manager instance
+ ResourceManager resource_manager{mediator};
+
//! Component manager instance
ComponentManager component_manager{mediator};
//! Scene manager instance
@@ -82,8 +92,6 @@ private:
LoopTimerManager loop_timer{mediator};
//! EventManager instance
EventManager event_manager{mediator};
- //! Resource manager instance
- ResourceManager resource_manager{mediator};
//! Save manager instance
SaveManager save_manager{mediator};
@@ -95,13 +103,6 @@ private:
*/
bool on_shutdown(const ShutDownEvent & e);
/**
- * \brief Collection of System instances
- *
- * This map holds System instances indexed by the system's class typeid. It is filled in the
- * constructor of LoopManager using LoopManager::load_system.
- */
- std::unordered_map<std::type_index, std::unique_ptr<System>> systems;
- /**
* \brief Initialize a system
* \tparam T System type (must be derivative of \c System)
*/
diff --git a/src/example/CMakeLists.txt b/src/example/CMakeLists.txt
index f62414e..3a196e1 100644
--- a/src/example/CMakeLists.txt
+++ b/src/example/CMakeLists.txt
@@ -22,3 +22,4 @@ add_example(button)
add_example(loadfont)
add_example(FontExample)
add_example(AITest)
+add_example(audio-crash)
diff --git a/src/example/audio-crash.cpp b/src/example/audio-crash.cpp
new file mode 100644
index 0000000..6c1052e
--- /dev/null
+++ b/src/example/audio-crash.cpp
@@ -0,0 +1,47 @@
+#include <crepe/api/LoopManager.h>
+#include <crepe/api/Scene.h>
+#include <crepe/api/Camera.h>
+#include <crepe/api/AudioSource.h>
+#include <crepe/api/Config.h>
+
+#define private public
+#include <crepe/api/Script.h>
+
+using namespace crepe;
+using namespace std;
+
+class Auto : public Script {
+ unsigned i = 0;
+ void init() {
+ AudioSource & sound = get_component<AudioSource>();
+ sound.play();
+ }
+
+ void update() {
+ if (++i < 50) return;
+ EventManager & evmgr = this->mediator->event_manager;
+ evmgr.trigger_event<ShutDownEvent>();
+ }
+};
+
+class Bug : public Scene {
+ virtual std::string get_name() const override { return "bug"; }
+ void load_scene() override {
+ GameObject camera = new_object("camera");
+ camera.add_component<Camera>(ivec2{10, 10}, vec2{1, 1}, Camera::Data{ });
+
+ GameObject sound = new_object("sound");
+ sound.add_component<AudioSource>(Asset{"mwe/audio/bgm.ogg"});
+ sound.add_component<BehaviorScript>().set_script<Auto>();
+ }
+};
+
+int main() {
+ Config & config = Config::get_instance();
+ config.log.level = Log::Level::TRACE;
+
+ LoopManager example;
+ example.add_scene<Bug>();
+ example.start();
+ return 0;
+}