hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/core/state_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/state_manager.h')
-rw-r--r--src/core/state_manager.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/core/state_manager.h b/src/core/state_manager.h
new file mode 100644
index 0000000..7d5e734
--- /dev/null
+++ b/src/core/state_manager.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 delta_time);
+ void render();
+ void on_event(Event& event);
+
+ void register_state(const std::string& state_name, std::unique_ptr<State> state);
+ void switch_to_state(const std::string& state_name);
+
+ std::string get_current_state_name() const { return m_current_state_name; }
+ State* get_current_state() const { return m_current_state; }
+
+ State* get_state(const std::string& state_name);
+ bool has_state(const std::string& state_name) const;
+ private:
+ void create_states();
+ void destroy_states();
+
+ private:
+ State* m_current_state = nullptr;
+ std::string m_current_state_name = "";
+
+ std::unordered_map<std::string, std::unique_ptr<State>> m_states;
+ };
+}