diff options
Diffstat (limited to 'src/crepe')
| -rw-r--r-- | src/crepe/api/SceneManager.cpp | 17 | ||||
| -rw-r--r-- | src/crepe/api/SceneManager.h | 6 | ||||
| -rw-r--r-- | src/crepe/api/SceneManager.hpp | 8 | 
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  |