small refactor

This commit is contained in:
2026-02-28 17:57:24 +01:00
parent 3f71603961
commit 77ae78a36e
37 changed files with 4393 additions and 3680 deletions

View File

@ -1,158 +1,151 @@
#ifndef __INPUT_HPP_
#define __INPUT_HPP_
#ifndef INPUT_HPP_
#define INPUT_HPP_
#include "camera.hpp"
#include "config.hpp"
#include "state.hpp"
#include "state_manager.hpp"
#include <functional>
#include <raylib.h>
#include <raymath.h>
class InputHandler {
struct GenericHandler {
std::function<void(InputHandler &)> handler;
};
class input_handler
{
struct generic_handler
{
std::function<void(input_handler&)> handler;
};
struct MouseHandler : GenericHandler {
MouseButton button;
};
struct mouse_handler : generic_handler
{
MouseButton button;
};
struct KeyboardHandler : GenericHandler {
KeyboardKey key;
};
struct keyboard_handler : generic_handler
{
KeyboardKey key;
};
private:
std::vector<GenericHandler> generic_handlers;
std::vector<MouseHandler> mouse_pressed_handlers;
std::vector<MouseHandler> mouse_released_handlers;
std::vector<KeyboardHandler> key_pressed_handlers;
std::vector<KeyboardHandler> key_released_handlers;
std::vector<generic_handler> generic_handlers;
std::vector<mouse_handler> mouse_pressed_handlers;
std::vector<mouse_handler> mouse_released_handlers;
std::vector<keyboard_handler> key_pressed_handlers;
std::vector<keyboard_handler> key_released_handlers;
public:
StateManager &state;
OrbitCamera3D &camera;
state_manager& state;
orbit_camera& camera;
bool disable = false;
bool disable = false;
// Block selection
int hov_x = -1;
int hov_y = -1;
int sel_x = 0;
int sel_y = 0;
// Block selection
int hov_x = -1;
int hov_y = -1;
int sel_x = 0;
int sel_y = 0;
// Editing
bool editing = false;
bool has_block_add_xy = false;
int block_add_x = -1;
int block_add_y = -1;
// Editing
bool editing = false;
bool has_block_add_xy = false;
int block_add_x = -1;
int block_add_y = -1;
// Graph display
bool mark_path = false;
bool mark_solutions = false;
bool connect_solutions = false;
// Graph display
bool mark_path = false;
bool mark_solutions = false;
bool connect_solutions = false;
// Camera
bool camera_lock = true;
bool camera_mass_center_lock = false;
bool camera_panning = false;
bool camera_rotating = false;
// Camera
bool camera_lock = true;
bool camera_mass_center_lock = false;
bool camera_panning = false;
bool camera_rotating = false;
// Mouse dragging
Vector2 mouse = Vector2Zero();
Vector2 last_mouse = Vector2Zero();
// Mouse dragging
Vector2 mouse = Vector2Zero();
Vector2 last_mouse = Vector2Zero();
public:
InputHandler(StateManager &_state, OrbitCamera3D &_camera)
: state(_state), camera(_camera) {
InitHandlers();
}
input_handler(state_manager& _state, orbit_camera& _camera) : state(_state), camera(_camera)
{
init_handlers();
}
InputHandler(const InputHandler &copy) = delete;
InputHandler &operator=(const InputHandler &copy) = delete;
InputHandler(InputHandler &&move) = delete;
InputHandler &operator=(InputHandler &&move) = delete;
~InputHandler() {}
input_handler(const input_handler& copy) = delete;
auto operator=(const input_handler& copy) -> input_handler& = delete;
input_handler(input_handler&& move) = delete;
auto operator=(input_handler&& move) -> input_handler& = delete;
private:
auto InitHandlers() -> void;
auto init_handlers() -> void;
public:
// Helpers
auto MouseInMenuPane() -> bool;
auto MouseInBoardPane() -> bool;
auto MouseInGraphPane() -> bool;
// Helpers
[[nodiscard]] auto mouse_in_menu_pane() const -> bool;
[[nodiscard]] auto mouse_in_board_pane() const -> bool;
[[nodiscard]] auto mouse_in_graph_pane() const -> bool;
// Mouse actions
auto MouseHover() -> void;
auto CameraStartPan() -> void;
auto CameraPan() -> void;
auto CameraStopPan() -> void;
auto CameraStartRotate() -> void;
auto CameraRotate() -> void;
auto CameraStopRotate() -> void;
auto CameraZoom() -> void;
auto CameraFov() -> void;
auto SelectBlock() -> void;
auto StartAddBlock() -> void;
auto ClearAddBlock() -> void;
auto AddBlock() -> void;
auto RemoveBlock() -> void;
auto PlaceGoal() -> void;
// Mouse actions
auto mouse_hover() -> void;
auto camera_start_pan() -> void;
auto camera_pan() const -> void;
auto camera_stop_pan() -> void;
auto camera_start_rotate() -> void;
auto camera_rotate() const -> void;
auto camera_stop_rotate() -> void;
auto camera_zoom() const -> void;
auto camera_fov() const -> void;
auto select_block() -> void;
auto start_add_block() -> void;
auto clear_add_block() -> void;
auto add_block() -> void;
auto remove_block() -> void;
auto place_goal() const -> void;
// Key actions
auto ToggleCameraLock() -> void;
auto ToggleCameraMassCenterLock() -> void;
auto ToggleCameraProjection() -> void;
auto MoveBlockNor() -> void;
auto MoveBlockWes() -> void;
auto MoveBlockSou() -> void;
auto MoveBlockEas() -> void;
auto PrintState() const -> void;
auto PreviousPreset() -> void;
auto NextPreset() -> void;
auto ResetState() -> void;
auto FillGraph() -> void;
auto ClearGraph() -> void;
auto ToggleMarkSolutions() -> void;
auto ToggleConnectSolutions() -> void;
auto ToggleMarkPath() -> void;
auto MakeOptimalMove() -> void;
auto GoToWorstState() -> void;
auto GoToNearestTarget() -> void;
auto UndoLastMove() -> void;
auto ToggleRestrictedMovement() -> void;
auto ToggleTargetBlock() -> void;
auto ToggleWallBlock() -> void;
auto RemoveBoardColumn() -> void;
auto AddBoardColumn() -> void;
auto RemoveBoardRow() -> void;
auto AddBoardRow() -> void;
auto ToggleEditing() -> void;
auto ClearGoal() -> void;
// Key actions
auto toggle_camera_lock() -> void;
auto toggle_camera_mass_center_lock() -> void;
auto toggle_camera_projection() const -> void;
auto move_block_nor() -> void;
auto move_block_wes() -> void;
auto move_block_sou() -> void;
auto move_block_eas() -> void;
auto print_state() const -> void;
auto load_previous_preset() -> void;
auto load_next_preset() -> void;
auto goto_starting_state() -> void;
auto populate_graph() const -> void;
auto clear_graph() const -> void;
auto toggle_mark_solutions() -> void;
auto toggle_connect_solutions() -> void;
auto toggle_mark_path() -> void;
auto goto_optimal_next_state() const -> void;
auto goto_most_distant_state() const -> void;
auto goto_closest_target_state() const -> void;
auto goto_previous_state() const -> void;
auto toggle_restricted_movement() const -> void;
auto toggle_target_block() const -> void;
auto toggle_wall_block() const -> void;
auto remove_board_column() const -> void;
auto add_board_column() const -> void;
auto remove_board_row() const -> void;
auto add_board_row() const -> void;
auto toggle_editing() -> void;
auto clear_goal() const -> void;
// General
auto RegisterGenericHandler(std::function<void(InputHandler &)> handler)
-> void;
// General
auto register_generic_handler(const std::function<void(input_handler&)>& handler) -> void;
auto RegisterMousePressedHandler(MouseButton button,
std::function<void(InputHandler &)> handler)
-> void;
auto register_mouse_pressed_handler(MouseButton button, const std::function<void(input_handler&)>& handler) -> void;
auto RegisterMouseReleasedHandler(MouseButton button,
std::function<void(InputHandler &)> handler)
-> void;
auto register_mouse_released_handler(MouseButton button, const std::function<void(input_handler&)>& handler)
-> void;
auto RegisterKeyPressedHandler(KeyboardKey key,
std::function<void(InputHandler &)> handler)
-> void;
auto register_key_pressed_handler(KeyboardKey key, const std::function<void(input_handler&)>& handler) -> void;
auto RegisterKeyReleasedHandler(KeyboardKey key,
std::function<void(InputHandler &)> handler)
-> void;
auto register_key_released_handler(KeyboardKey key, const std::function<void(input_handler&)>& handler) -> void;
auto HandleInput() -> void;
auto handle_input() -> void;
};
#endif