aboutsummaryrefslogtreecommitdiff
path: root/src/Core/StateManager.h
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-14 00:02:01 +0200
committerhachem <im@hachem.wtf>2025-08-14 00:02:01 +0200
commit641db1c86bf624527173b0323bd3c832338c3662 (patch)
tree188fe41c2351b8b426b8904ea23faec68f4144a4 /src/Core/StateManager.h
parent6afeab30f84bc19fc4fc3dd842e7b093d4c5a9fa (diff)
[add]: State manager
Diffstat (limited to 'src/Core/StateManager.h')
-rw-r--r--src/Core/StateManager.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/Core/StateManager.h b/src/Core/StateManager.h
new file mode 100644
index 0000000..06370f3
--- /dev/null
+++ b/src/Core/StateManager.h
@@ -0,0 +1,39 @@
+#pragma once
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+
+#include "State.h"
+
+namespace Donut
+{
+ class StateManager
+ {
+ public:
+ ~StateManager() = default;
+ void Shutdown();
+
+ void Update(float deltaTime);
+ void Render();
+ void OnEvent(Event& event);
+
+ void RegisterState(const std::string& stateName, std::unique_ptr<State> state);
+ void SwitchToState(const std::string& stateName);
+
+ std::string GetCurrentStateName() const { return m_CurrentStateName; }
+ State* GetCurrentState() const { return m_CurrentState; }
+
+ State* GetState(const std::string& stateName);
+ bool HasState(const std::string& stateName) const;
+ private:
+ void CreateStates();
+ void DestroyStates();
+
+ private:
+ State* m_CurrentState = nullptr;
+ std::string m_CurrentStateName = "";
+
+ std::unordered_map<std::string, std::unique_ptr<State>> m_States;
+ };
+}