R-Type
R-Type project
SceneManager.hpp
1 /*
2 ** EPITECH PROJECT, 2022
3 ** gameEngine2
4 ** File description:
5 ** SceneManager
6 */
7 
8 #ifndef SCENEMANAGER_HPP_
9 #define SCENEMANAGER_HPP_
10 
11 #include <vector>
12 #include <memory>
13 #include "Scene.hpp"
14 #include "KapEngineSettings.hpp"
15 
16 namespace KapEngine {
17  class KEngine;
18 
19  namespace SceneManagement {
20  class Scene;
21  }
22 }
23 
24 namespace KapEngine {
30  namespace SceneManagement {
31 
32  class SceneManager {
33  public:
34  SceneManager(KEngine &engine);
35  ~SceneManager();
36 
37  void addScene(std::shared_ptr<Scene> scene);
38  void addScene(std::string const& sceneName);
39 
40  void removeScene(std::string const& sceneName);
41  void removeScene(std::size_t const& id);
42 
43  void loadScene(std::size_t const& index);
44  void loadScene(std::string const& sceneName);
45 
46  #if KAPENGINE_BETA_ACTIVE && KAPENGINE_THREAD_ACTIVE
47  void __update(std::size_t const& indexThread);
48  #else
49  void __update();
50  #endif
51 
52  KEngine &getEngine() {
53  return _engine;
54  }
55 
56  bool sceneExists(std::size_t const& index);
57  bool sceneExists(std::string const& sceneName);
58 
59  Scene &getScene(std::string const& name);
60  Scene &getScene(std::size_t const& index);
61  Scene &getCurrentScene();
62 
63  std::size_t getSceneIndex(std::string const& sceneName);
64  std::size_t getSceneIndexInList(std::size_t id);
65  std::size_t getSceneIndexInList(std::string const& sceneName);
66 
67  std::size_t getCurrentSceneId() const {
68  PROFILER_FUNC_START();
69  PROFILER_FUNC_END();
70  return _indexScene;
71  }
72 
73  std::shared_ptr<Scene> createScene(std::string const& name);
74 
75  std::vector<std::shared_ptr<Scene>> &getAllScenes() {
76  PROFILER_FUNC_START();
77  PROFILER_FUNC_END();
78  return _scenes;
79  }
80 
81  protected:
82  private:
83  std::size_t _indexScene = 0;
84  std::size_t _maxIndex = 0;
85  std::vector<std::shared_ptr<Scene>> _scenes;
86  KEngine &_engine;
87 
88  std::string getSceneName(std::size_t index);
89 
90  #if KAPENGINE_BETA_ACTIVE
91  #if KAPENGINE_THREAD_ACTIVE
92  std::mutex _mutex;
93  #endif
94  #endif
95 
96  };
97 
98  }
99 
100 }
101 
102 #endif /* !SCENEMANAGER_HPP_ */
KapEngine::SceneManagement::SceneManager
Definition: SceneManager.hpp:32
KapEngine
main namespace
Definition: Component.hpp:17
KapEngine::SceneManagement::Scene
Definition: Scene.hpp:37
KapEngine::KEngine
Class of engine.
Definition: Engine.hpp:60