aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-02-28 21:30:30 +0100
committerHampusM <hampus@hampusmat.com>2022-06-13 17:56:54 +0200
commitede689d23e57c9b701ab19aa9112a0b2368865c9 (patch)
treee8c7afc7b2e5caf43b1b0c52356c0596021f25cb /src/game
parentf0883534b3303cf2b74f3ab51efe16615d2561a9 (diff)
feat: add input handler & quitting with 'q'
Diffstat (limited to 'src/game')
-rw-r--r--src/game/game.cpp23
-rw-r--r--src/game/game.hpp7
2 files changed, 23 insertions, 7 deletions
diff --git a/src/game/game.cpp b/src/game/game.cpp
index 2c99c6a..2b09470 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -1,15 +1,28 @@
#include "game.hpp"
-#include <chrono>
-#include <thread>
-
-Game::Game(std::shared_ptr<IScene> scene) : _scene(std::move(scene)) {}
+Game::Game(std::shared_ptr<IScene> scene, std::shared_ptr<IInputHandler> input_handler)
+ : _scene(std::move(scene)), _input_handler(std::move(input_handler))
+{
+}
void Game::run()
{
_scene->enter();
- std::this_thread::sleep_for(std::chrono::seconds(3));
+ _input_handler->enter_raw_mode();
+
+ auto scene = _scene;
+ auto input_handler = _input_handler;
+
+ _input_handler->attach('q',
+ [&input_handler, &scene]()
+ {
+ input_handler->leave_raw_mode();
+ scene->leave();
+ exit(EXIT_SUCCESS);
+ });
+
+ _input_handler->listen();
_scene->leave();
}
diff --git a/src/game/game.hpp b/src/game/game.hpp
index e7d91d6..bc37c91 100644
--- a/src/game/game.hpp
+++ b/src/game/game.hpp
@@ -2,17 +2,20 @@
#include "DI/auto_wirable.hpp"
#include "interfaces/game.hpp"
+#include "interfaces/input.hpp"
#include "interfaces/scene.hpp"
#include <memory>
-class Game : public IGame, public AutoWirable<IGame, Game, IScene>
+class Game : public IGame, public AutoWirable<IGame, Game, IScene, IInputHandler>
{
public:
- explicit Game(std::shared_ptr<IScene> scene);
+ explicit Game(std::shared_ptr<IScene> scene,
+ std::shared_ptr<IInputHandler> input_handler);
void run() override;
private:
std::shared_ptr<IScene> _scene;
+ std::shared_ptr<IInputHandler> _input_handler;
};