aboutsummaryrefslogtreecommitdiff
path: root/src/engine
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-03-23 19:41:31 +0100
committerHampusM <hampus@hampusmat.com>2022-06-13 17:56:57 +0200
commit486ca3846b46dc229e5807968578809766ec1991 (patch)
tree65a4b7a746d6305666af06f8a1975c76244085a7 /src/engine
parentb8e86ce397dc07320c02f6a5f592c7c6a4421c86 (diff)
feat: implement generations & multithreading
Diffstat (limited to 'src/engine')
-rw-r--r--src/engine/engine.cpp12
-rw-r--r--src/engine/graphics/scene.cpp20
-rw-r--r--src/engine/graphics/scene.hpp6
-rw-r--r--src/engine/user/input.hpp4
4 files changed, 14 insertions, 28 deletions
diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp
index e463f28..c988c33 100644
--- a/src/engine/engine.cpp
+++ b/src/engine/engine.cpp
@@ -2,6 +2,7 @@
#include "util/function.hpp"
+#include <thread>
#include <utility>
CLIGameEngine::CLIGameEngine(IGameFactory game_factory, ISceneFactory scene_factory,
@@ -38,7 +39,16 @@ void CLIGameEngine::start() noexcept
_configure_input(game->get_input_config());
- _input_handler->listen();
+ std::thread listen_input_thread(normalize_lambda(
+ [this]()
+ {
+ _input_handler->listen();
+ }));
+
+ while (true)
+ {
+ game->on_update();
+ }
}
void CLIGameEngine::_configure_input(
diff --git a/src/engine/graphics/scene.cpp b/src/engine/graphics/scene.cpp
index 4e382fe..24c174f 100644
--- a/src/engine/graphics/scene.cpp
+++ b/src/engine/graphics/scene.cpp
@@ -45,26 +45,6 @@ void Scene::leave() noexcept
_is_shown = false;
}
-void Scene::write_status(const std::string_view &str) noexcept
-{
- const auto previous_position = _cursor_controller->where();
-
- const auto window_size = _window->size();
-
- _cursor_controller->move_to(
- Vector2({.x = 2, .y = static_cast<Vector2::Value>(window_size.get_height())}),
- true);
-
- auto background_color = get_background_esc_seq(STATUSBAR_COLOR);
-
- fmt::print("{}", background_color);
- fmt::print(ERASE_ENTIRE_LINE, fmt::arg("esc", ESC));
- fmt::print(fmt::runtime(str.data()));
- fmt::print(RESET_ALL_MODES, fmt::arg("esc", ESC));
-
- _cursor_controller->move_to(previous_position, true);
-}
-
const std::shared_ptr<IMatrix<std::string_view>> &Scene::get_matrix() const noexcept
{
return _matrix;
diff --git a/src/engine/graphics/scene.hpp b/src/engine/graphics/scene.hpp
index 1f1c51c..c4f6d67 100644
--- a/src/engine/graphics/scene.hpp
+++ b/src/engine/graphics/scene.hpp
@@ -12,10 +12,6 @@
constexpr fmt::string_view ENABLE_ALT_BUFFER = "{esc}[?1049h";
constexpr fmt::string_view DISABLE_ALT_BUFFER = "{esc}[?1049l";
-constexpr fmt::string_view ERASE_ENTIRE_LINE = "{esc}[2K";
-
-constexpr uint32_t STATUSBAR_COLOR = 0x1A1A1AU;
-
class Scene : public IScene
{
public:
@@ -27,8 +23,6 @@ public:
void leave() noexcept override;
- void write_status(const std::string_view &str) noexcept override;
-
[[nodiscard]] const std::shared_ptr<IMatrix<std::string_view>> &
get_matrix() const noexcept override;
diff --git a/src/engine/user/input.hpp b/src/engine/user/input.hpp
index 6a9edfd..51f3fcb 100644
--- a/src/engine/user/input.hpp
+++ b/src/engine/user/input.hpp
@@ -29,7 +29,9 @@ public:
void leave_raw_mode() noexcept override;
private:
- std::array<std::vector<std::shared_ptr<ISubscriber<Context>>>, CHAR_MAX> _subscribers;
+ std::array<std::vector<std::shared_ptr<ISubscriber<Context>>>,
+ static_cast<std::size_t>(CHAR_MAX * 2U)>
+ _subscribers;
std::shared_ptr<termios> _original_termios = nullptr;