aboutsummaryrefslogtreecommitdiff
path: root/src/crepe
diff options
context:
space:
mode:
Diffstat (limited to 'src/crepe')
-rw-r--r--src/crepe/api/SceneManager.cpp17
-rw-r--r--src/crepe/api/SceneManager.h6
-rw-r--r--src/crepe/api/SceneManager.hpp8
3 files changed, 18 insertions, 13 deletions
diff --git a/src/crepe/api/SceneManager.cpp b/src/crepe/api/SceneManager.cpp
index 6fc8f9b..08f036d 100644
--- a/src/crepe/api/SceneManager.cpp
+++ b/src/crepe/api/SceneManager.cpp
@@ -12,17 +12,16 @@ SceneManager & SceneManager::get_instance() {
return instance;
}
-// Push the next scene onto the queue
-void SceneManager::load_scene(const std::string & name) { next_scene.push(name); }
-
-// Load a new scene from the queue (if there is one)
-void SceneManager::empty_queue() {
- while (!next_scene.empty()) {
- string name = next_scene.front();
- next_scene.pop();
+// Set the next scene (this scene will be loaded at the end of the frame)
+void SceneManager::set_next_scene(const std::string & name) {
+ next_scene = name;
+}
+// Load a new scene (if there is one)
+void SceneManager::load_next_scene() {
+ if (!next_scene.empty()) {
for (auto & scene : scenes) {
- if (scene->name == name) {
+ if (scene->name == next_scene) {
// Delete all components of the current scene
ComponentManager & mgr = ComponentManager::get_instance();
mgr.delete_all_components();
diff --git a/src/crepe/api/SceneManager.h b/src/crepe/api/SceneManager.h
index b7d5150..eaf1ba1 100644
--- a/src/crepe/api/SceneManager.h
+++ b/src/crepe/api/SceneManager.h
@@ -20,15 +20,15 @@ public:
public:
template <typename T>
void add_scene(const std::string & name);
- void load_scene(const std::string & name);
- void empty_queue();
+ void set_next_scene(const std::string & name);
+ void load_next_scene();
private:
SceneManager();
private:
std::vector<std::unique_ptr<Scene>> scenes;
- std::queue<std::string> next_scene;
+ std::string next_scene;
};
} // namespace crepe
diff --git a/src/crepe/api/SceneManager.hpp b/src/crepe/api/SceneManager.hpp
index 82787ed..e2ba2da 100644
--- a/src/crepe/api/SceneManager.hpp
+++ b/src/crepe/api/SceneManager.hpp
@@ -5,8 +5,14 @@ namespace crepe {
// Add a new concrete scene to the scene manager
template <typename T>
void SceneManager::add_scene(const std::string & name) {
- static_assert(std::is_base_of<Scene, T>::value, "T must be derived from Scene");
+ static_assert(std::is_base_of<Scene, T>::value,
+ "T must be derived from Scene");
scenes.emplace_back(make_unique<T>(name));
+
+ // The first scene added, is the one that will be loaded at the beginning
+ if (next_scene.empty()) {
+ next_scene = name;
+ }
}
} // namespace crepe