From 6119f1428b3615e4738a121c6acf343942107fd9 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sat, 5 Mar 2022 13:26:55 +0100 Subject: refactor: move input config to own file & improve cleanup --- src/game/game.cpp | 41 ++++------------------------------------- src/game/game.hpp | 9 ++++----- src/game/input_configurator.cpp | 33 +++++++++++++++++++++++++++++++++ src/game/input_configurator.hpp | 36 ++++++++++++++++++++++++++++++++++++ src/game/input_configurator.tpp | 17 +++++++++++++++++ 5 files changed, 94 insertions(+), 42 deletions(-) create mode 100644 src/game/input_configurator.cpp create mode 100644 src/game/input_configurator.hpp create mode 100644 src/game/input_configurator.tpp (limited to 'src/game') diff --git a/src/game/game.cpp b/src/game/game.cpp index 559f9a0..0773f2c 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -2,46 +2,13 @@ #include -Game::Game(std::shared_ptr cursor_controller) - : _cursor_controller(std::move(cursor_controller)) +Game::Game(std::shared_ptr input_configurator) + : _input_configurator(std::move(input_configurator)) { } -void Game::run(IScene &scene, IInputHandler &input_handler) +void Game::run(IScene & /*scene*/, IInputHandler &input_handler) { - input_handler.attach('q', - [&input_handler, &scene]() - { - input_handler.leave_raw_mode(); - scene.leave(); - exit(EXIT_SUCCESS); - }); - - auto cursor_controller = _cursor_controller; - - input_handler.attach('k', - [&cursor_controller]() - { - cursor_controller->move(1U); - }); - - input_handler.attach('j', - [&cursor_controller]() - { - cursor_controller->move(1U); - }); - - input_handler.attach('h', - [&cursor_controller]() - { - cursor_controller->move(1U); - }); - - input_handler.attach('l', - [&cursor_controller]() - { - cursor_controller->move(1U); - }); - + _input_configurator->configure(input_handler); input_handler.listen(); } diff --git a/src/game/game.hpp b/src/game/game.hpp index c52399d..ea8145a 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -3,19 +3,18 @@ #include "DI/auto_wirable.hpp" #include "interfaces/game.hpp" #include "interfaces/input.hpp" +#include "interfaces/input_configurator.hpp" #include "interfaces/scene.hpp" -#include "engine/user/cursor.hpp" - #include -class Game : public IGame, public AutoWirable +class Game : public IGame, public AutoWirable { public: - explicit Game(std::shared_ptr cursor_controller); + explicit Game(std::shared_ptr input_configurator); void run(IScene &scene, IInputHandler &input_handler) override; private: - std::shared_ptr _cursor_controller; + std::shared_ptr _input_configurator; }; diff --git a/src/game/input_configurator.cpp b/src/game/input_configurator.cpp new file mode 100644 index 0000000..4daee21 --- /dev/null +++ b/src/game/input_configurator.cpp @@ -0,0 +1,33 @@ +#include "input_configurator.hpp" + +namespace InputActions +{ + +void exit_success() +{ + exit(EXIT_SUCCESS); +} + +} // namespace InputActions + +InputConfigurator::InputConfigurator(std::shared_ptr cursor_controller) + : _cursor_controller(std::move(cursor_controller)) +{ +} + +void InputConfigurator::configure(IInputHandler &input_handler) +{ + input_handler.attach('q', InputActions::exit_success); + + input_handler.attach('k', + InputActions::move_cursor(*_cursor_controller)); + + input_handler.attach('j', + InputActions::move_cursor(*_cursor_controller)); + + input_handler.attach('h', + InputActions::move_cursor(*_cursor_controller)); + + input_handler.attach( + 'l', InputActions::move_cursor(*_cursor_controller)); +} diff --git a/src/game/input_configurator.hpp b/src/game/input_configurator.hpp new file mode 100644 index 0000000..217c21e --- /dev/null +++ b/src/game/input_configurator.hpp @@ -0,0 +1,36 @@ +#pragma once + +#include "DI/auto_wirable.hpp" +#include "interfaces/direction.hpp" +#include "interfaces/input.hpp" +#include "interfaces/input_configurator.hpp" + +#include "engine/user/cursor.hpp" + +#include +#include + +namespace InputActions +{ + +template +auto move_cursor(CursorController cursor_controller); + +void exit_success(); + +} // namespace InputActions + +class InputConfigurator + : public IInputConfigurator, + public AutoWirable +{ +public: + explicit InputConfigurator(std::shared_ptr cursor_controller); + + void configure(IInputHandler &input_handler) override; + +private: + std::shared_ptr _cursor_controller; +}; + +#include "input_configurator.tpp" diff --git a/src/game/input_configurator.tpp b/src/game/input_configurator.tpp new file mode 100644 index 0000000..f3c9482 --- /dev/null +++ b/src/game/input_configurator.tpp @@ -0,0 +1,17 @@ +#pragma once + +#include "input_configurator.hpp" + +namespace InputActions +{ + +template +auto move_cursor(CursorController cursor_controller) +{ + return [cursor_controller]() + { + cursor_controller.move(1U); + }; +} + +} // namespace InputActions -- cgit v1.2.3-18-g5258