#ifndef __STATE_HPP_ #define __STATE_HPP_ #include "config.hpp" #include "physics.hpp" #include "puzzle.hpp" #include #include #include class StateManager { public: ThreadedPhysics &physics; std::vector presets; std::unordered_map states; std::unordered_set winning_states; std::unordered_set visited_states; int current_preset; State starting_state; State current_state; State previous_state; bool edited = false; public: StateManager(ThreadedPhysics &_physics, const std::string &preset_file) : physics(_physics), presets({State()}), current_preset(0), edited(false) { ParsePresetFile(preset_file); current_state = presets.at(current_preset); ClearGraph(); } StateManager(const StateManager ©) = delete; StateManager &operator=(const StateManager ©) = delete; StateManager(StateManager &&move) = delete; StateManager &operator=(StateManager &&move) = delete; ~StateManager() {} private: auto ParsePresetFile(const std::string &preset_file) -> void; public: auto LoadPreset(int preset) -> void; auto ResetState() -> void; auto PreviousPreset() -> void; auto NextPreset() -> void; auto FillGraph() -> void; auto UpdateGraph() -> void; auto ClearGraph() -> void; auto FindWinningStates() -> void; auto CurrentMassIndex() const -> std::size_t; }; #endif