#pragma once #include "memory.h" #include "state.h" #include #include 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, Scope 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> m_states; }; }