aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/crepe/api/SceneManager.cpp17
-rw-r--r--src/crepe/api/SceneManager.h6
-rw-r--r--src/crepe/api/SceneManager.hpp8
-rw-r--r--src/example/scene_manager.cpp8
4 files changed, 22 insertions, 17 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
diff --git a/src/example/scene_manager.cpp b/src/example/scene_manager.cpp
index f1fe86a..9d832eb 100644
--- a/src/example/scene_manager.cpp
+++ b/src/example/scene_manager.cpp
@@ -40,9 +40,9 @@ int main() {
scene_mgr.add_scene<concreteScene2>("scene2");
// Load scene1 to the queue
- scene_mgr.load_scene("scene1");
+ scene_mgr.set_next_scene("scene1");
// Empty the queue (now scene1 is loaded)
- scene_mgr.empty_queue();
+ scene_mgr.load_next_scene();
// Get the Metadata components of each GameObject of Scene1
ComponentManager & component_mgr = ComponentManager::get_instance();
@@ -57,9 +57,9 @@ int main() {
}
// Load scene2 to the queue
- scene_mgr.load_scene("scene2");
+ scene_mgr.set_next_scene("scene2");
// Empty the queue (now scene2 is loaded)
- scene_mgr.empty_queue();
+ scene_mgr.load_next_scene();
// Get the Metadata components of each GameObject of Scene2
metadata = component_mgr.get_components_by_type<Metadata>();