engine/include/scene_manager.h

58 lines
1.4 KiB
C
Raw Normal View History

2024-03-31 10:11:22 +00:00
#pragma once
2022-11-29 14:22:03 +00:00
2022-11-30 00:46:03 +00:00
#include <memory>
2023-04-29 14:22:25 +00:00
#include <vector>
2023-05-01 13:13:35 +00:00
#include "resource_manager.h"
#include "scene.h"
2022-11-30 00:46:03 +00:00
2022-11-29 14:22:03 +00:00
namespace engine {
2023-04-29 14:22:25 +00:00
class Application;
class SceneManager {
2023-11-05 01:04:05 +00:00
public:
SceneManager(Application* app);
~SceneManager();
SceneManager(const SceneManager&) = delete;
SceneManager& operator=(const SceneManager&) = delete;
// creates an empty scene and sets it as active
Scene* CreateEmptyScene();
// nullptr deactivates the active scene
void SetActiveScene(Scene* scene)
{
if (scene == nullptr) {
active_scene_index_ = -1;
}
else {
// linear search for scene
int index = 0;
for (const auto& unique_scene : scenes_) {
if (unique_scene.get() == scene) {
break;
}
++index;
}
2023-12-12 09:56:37 +00:00
if (static_cast<size_t>(index) >= scenes_.size()) {
2023-11-05 01:04:05 +00:00
throw std::runtime_error("Failed to find active scene!");
}
else {
active_scene_index_ = index;
}
}
}
// returns active scene, nullptr if no scene active
Scene* UpdateActiveScene(float ts);
Scene* GetActiveScene() { return scenes_.at(active_scene_index_).get(); }
private:
Application* const app_;
std::vector<std::unique_ptr<Scene>> scenes_;
int active_scene_index_ = -1;
2023-04-29 14:22:25 +00:00
};
2022-11-29 14:22:03 +00:00
2024-03-31 10:11:22 +00:00
} // namespace engine