aboutsummaryrefslogtreecommitdiff
path: root/src/Core/StateManager.h
diff options
context:
space:
mode:
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;
+ };
+}