62 lines
1.3 KiB
C++
62 lines
1.3 KiB
C++
#ifndef __STATE_HPP_
|
|
#define __STATE_HPP_
|
|
|
|
#include "config.hpp"
|
|
#include "physics.hpp"
|
|
#include "presets.hpp"
|
|
#include "puzzle.hpp"
|
|
|
|
#include <raymath.h>
|
|
|
|
class StateManager {
|
|
public:
|
|
MassSpringSystem &mass_springs;
|
|
|
|
int current_preset;
|
|
State current_state;
|
|
State previous_state;
|
|
|
|
bool edited = false;
|
|
|
|
std::unordered_set<State> winning_states;
|
|
std::unordered_set<State> visited_states;
|
|
|
|
public:
|
|
StateManager(MassSpringSystem &mass_springs)
|
|
: mass_springs(mass_springs), current_preset(0),
|
|
current_state(generators[current_preset]()),
|
|
previous_state(current_state), edited(false) {
|
|
mass_springs.AddMass(MASS, false, current_state);
|
|
}
|
|
|
|
StateManager(const StateManager ©) = delete;
|
|
StateManager &operator=(const StateManager ©) = delete;
|
|
StateManager(StateManager &&move) = delete;
|
|
StateManager &operator=(StateManager &&move) = delete;
|
|
|
|
~StateManager() {}
|
|
|
|
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 CurrentGenerator() -> StateGenerator;
|
|
|
|
auto CurrentWinCondition() -> WinCondition;
|
|
};
|
|
|
|
#endif
|