Game Project
Loading...
Searching...
No Matches
SceneManager.h
1#pragma once
2#include <memory>
3#include <unordered_map>
4#include <stack>
5#include <json.hpp>
6#include <filesystem>
7#include <fstream>
8#include "../core/SceneTypes.h"
9#include "../factories/SceneFactory.h"
10#include "../core/Scene.h"
11
13{
14 GameState scene_state_;
15 int scene_id_ = 0;
16 std::string scene_name_;
17 std::shared_ptr<Scene> scene_ = nullptr;
18 SceneData scene_data_;
19};
20class SceneManager
21{
22public:
23 SceneManager() = default;
24
25 void Init(const std::string& scene_folder);
26
27
28 // For switching and adding scenes
29 void AddScene(int id, std::shared_ptr<Scene> scene);
30 void ChangeScene(int id);
31 // For overlaying scenes
32 void PushScene(std::shared_ptr<Scene> scene);
33 void PopScene();
34
35 void HandleInput(sf::RenderWindow& window);
36 void Update(float delta_time);
37 void Render(sf::RenderWindow& window);
38
39 template<typename Func>
40 void ForActiveScene(Func func) // Calls update, render and handleInput functions with the active scene (top of stack or current)
41 {
42 if (current_scene_.scene_ == nullptr)
43 {
44 return;
45 }
46
47 if (!scene_stack_.empty())
48 {
49 func(scene_stack_.top().get());
50 }
51 else
52 {
53 func(current_scene_.scene_.get());
54 }
55 }
56
57 GameState GetActiveGameState() const { return current_scene_.scene_state_; }
58 int GetActiveSceneID() const { return current_scene_.scene_id_; }
59 const std::unordered_map<int, std::shared_ptr<Scene>>& GetScenes() const { return scenes_; }
60
61private:
62 std::unordered_map<int, std::shared_ptr<Scene>> scenes_; // Map of game states to their scenes
63 std::stack<std::shared_ptr<Scene>> scene_stack_; // Stack for overlay scenes
64 ActiveScene current_scene_;
65};
Definition SceneManager.h:13
Definition SceneTypes.h:13