From 521ef3688069f5fc6b06a835454404fddaca6e80 Mon Sep 17 00:00:00 2001 From: HampusM Date: Sun, 12 Jun 2022 18:23:10 +0200 Subject: fix: add statusline length check --- src/engine/engine.cpp | 14 +++++++++++++- src/game/game.cpp | 19 ++++++++++++++++--- src/game/game.hpp | 2 +- src/interfaces/game.hpp | 2 +- 4 files changed, 31 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index ed75394..b0456a3 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2,7 +2,10 @@ #include "util/function.hpp" +#include + #include +#include #include #include @@ -30,7 +33,16 @@ void CLIGameEngine::start() noexcept auto game = _game_factory(_scene, _cursor_controller, _user_input_observer); - game->on_start(); + try + { + game->on_start(); + } + catch (const std::exception &error) + { + _scene->leave(); + fmt::print("Error: {}\n", error.what()); + return; + } std::atexit(normalize_lambda( [this, &game]() diff --git a/src/game/game.cpp b/src/game/game.cpp index 2f6c09c..e969fe1 100644 --- a/src/game/game.cpp +++ b/src/game/game.cpp @@ -16,6 +16,7 @@ #include #include #include +#include #include Game::Game( @@ -42,7 +43,7 @@ Game::Game( { } -void Game::on_start() noexcept +void Game::on_start() { const auto scene_size = _scene->size(); @@ -55,8 +56,20 @@ void Game::on_start() noexcept const auto statusline_section_d_length = 20; const auto statusline_section_e_length = 25; const auto statusline_section_f_length = 30; - const auto statusline_section_g_length = 30; - const auto statusline_section_h_length = 20; + const auto statusline_section_g_length = 20; + const auto statusline_section_h_length = 3; + + const auto statusline_section_length_total = + statusline_section_a_length + statusline_section_b_length + + statusline_section_c_length + statusline_section_d_length + + statusline_section_e_length + statusline_section_f_length + + statusline_section_g_length + statusline_section_h_length; + + if (statusline_section_length_total > scene_size.get_width()) + { + throw std::runtime_error( + "To small window terminal size. The statusline doesn't fit"); + } statusline->set_section_length(StatusLineSection::A, statusline_section_a_length); statusline->set_section_length(StatusLineSection::B, statusline_section_b_length); diff --git a/src/game/game.hpp b/src/game/game.hpp index e69ce46..ed5a00f 100644 --- a/src/game/game.hpp +++ b/src/game/game.hpp @@ -64,7 +64,7 @@ public: std::shared_ptr cell_helper, std::shared_ptr rle_reader) noexcept; - void on_start() noexcept override; + void on_start() override; void on_update() noexcept override; diff --git a/src/interfaces/game.hpp b/src/interfaces/game.hpp index b6d7f36..6d0251f 100644 --- a/src/interfaces/game.hpp +++ b/src/interfaces/game.hpp @@ -14,7 +14,7 @@ class IGame public: virtual ~IGame() noexcept = default; - virtual void on_start() noexcept = 0; + virtual void on_start() = 0; virtual void on_update() noexcept = 0; -- cgit v1.2.3-18-g5258