aboutsummaryrefslogtreecommitdiff
path: root/src/game
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-06-08 16:06:03 +0200
committerHampusM <hampus@hampusmat.com>2022-06-13 17:57:01 +0200
commit3f9004b598fc8006576db9b8d2ae4e080101101b (patch)
tree97108db2a08253417139bd76741add2dd126f58d /src/game
parent2d9661790db30eb169d07d36b485943c598253b9 (diff)
refactor: give game responsibility of statusline
Diffstat (limited to 'src/game')
-rw-r--r--src/game/game.cpp16
-rw-r--r--src/game/game.hpp4
-rw-r--r--src/game/status_manager.cpp12
-rw-r--r--src/game/status_manager.hpp13
4 files changed, 22 insertions, 23 deletions
diff --git a/src/game/game.cpp b/src/game/game.cpp
index 8d72324..3127d40 100644
--- a/src/game/game.cpp
+++ b/src/game/game.cpp
@@ -1,5 +1,6 @@
#include "game.hpp"
+#include "engine/data/bounds.hpp"
#include "util/algorithm.hpp"
#include <fmt/core.h>
@@ -10,13 +11,15 @@
#include <utility>
Game::Game(
+ IStatusLineFactory statusline_factory,
std::shared_ptr<IScene> scene,
std::shared_ptr<ICursorController> cursor_controller,
std::shared_ptr<IGenerationTracker> generation_tracker,
std::shared_ptr<IStatusManager> status_manager,
std::shared_ptr<IUserInputObserver> user_input_observer,
std::shared_ptr<ICellHelper> cell_helper) noexcept
- : _scene(std::move(scene)),
+ : _statusline_factory(std::move(statusline_factory)),
+ _scene(std::move(scene)),
_cursor_controller(std::move(cursor_controller)),
_generation_tracker(std::move(generation_tracker)),
_status_manager(std::move(status_manager)),
@@ -27,9 +30,14 @@ Game::Game(
void Game::on_start() noexcept
{
- _scene->register_component(_status_manager->get_statusline(), Vector2({0, 0}));
+ const auto scene_size = _scene->size();
+
+ std::shared_ptr<IStatusLine> statusline =
+ _statusline_factory(Bounds({.width = scene_size.get_width(), .height = 1}));
+
+ _scene->register_component(statusline, Vector2({0, 0}));
- _status_manager->initialize();
+ _status_manager->bind(statusline);
_status_manager->set_section_title(StatusLineSection::A, "");
_status_manager->set_section_title(StatusLineSection::B, "X: ");
@@ -42,8 +50,6 @@ void Game::on_start() noexcept
_status_manager->set_section_title(StatusLineSection::G, "Living cells: ");
_status_manager->set_section_title(StatusLineSection::H, "Window size: ");
- const auto scene_size = _scene->size();
-
const auto center_position = Vector2(
{.x = static_cast<Vector2::Value>(scene_size.get_width()) / 2,
.y = static_cast<Vector2::Value>(scene_size.get_height()) / 2});
diff --git a/src/game/game.hpp b/src/game/game.hpp
index d629400..8363c4d 100644
--- a/src/game/game.hpp
+++ b/src/game/game.hpp
@@ -8,6 +8,7 @@
#include "interfaces/matrix.hpp"
#include "interfaces/scene.hpp"
#include "interfaces/status_manager.hpp"
+#include "interfaces/statusline.hpp"
#include "engine/data/vector2.hpp"
@@ -25,6 +26,7 @@ class Game : public IGame
{
public:
Game(
+ IStatusLineFactory statusline_factory,
std::shared_ptr<IScene> scene,
std::shared_ptr<ICursorController> cursor_controller,
std::shared_ptr<IGenerationTracker> generation_tracker,
@@ -39,6 +41,8 @@ public:
void on_exit() const noexcept override;
private:
+ IStatusLineFactory _statusline_factory;
+
std::shared_ptr<IScene> _scene;
std::shared_ptr<ICursorController> _cursor_controller;
std::shared_ptr<IGenerationTracker> _generation_tracker;
diff --git a/src/game/status_manager.cpp b/src/game/status_manager.cpp
index c7d80e9..b4496ba 100644
--- a/src/game/status_manager.cpp
+++ b/src/game/status_manager.cpp
@@ -4,14 +4,10 @@
#include <utility>
-StatusManager::StatusManager(std::shared_ptr<IStatusLine> statusline) noexcept
- : _statusline(std::move(statusline))
-
+void StatusManager::bind(const std::shared_ptr<IStatusLine> &statusline) noexcept
{
-}
+ _statusline = statusline;
-void StatusManager::initialize() noexcept
-{
_statusline->set_section_length(StatusLineSection::A, 5);
_statusline->set_section_length(StatusLineSection::B, 15);
_statusline->set_section_length(StatusLineSection::C, 15);
@@ -46,7 +42,3 @@ void StatusManager::set_section_body(
_statusline->set_status(section, body, section_title_length + 1);
}
-auto StatusManager::get_statusline() const noexcept -> std::shared_ptr<IStatusLine>
-{
- return _statusline;
-}
diff --git a/src/game/status_manager.hpp b/src/game/status_manager.hpp
index 245e888..85faf3c 100644
--- a/src/game/status_manager.hpp
+++ b/src/game/status_manager.hpp
@@ -1,20 +1,19 @@
#pragma once
-#include "interfaces/generation_tracker.hpp"
#include "interfaces/status_manager.hpp"
#include "interfaces/statusline.hpp"
-#include "engine/data/vector2.hpp"
+#include <yacppdic/auto_wirable.hpp>
#include <memory>
+#include <string_view>
#include <unordered_map>
-class StatusManager : public IStatusManager
+class StatusManager : public IStatusManager,
+ public yacppdic::AutoWirable<IStatusManager, StatusManager>
{
public:
- explicit StatusManager(std::shared_ptr<IStatusLine> statusline) noexcept;
-
- void initialize() noexcept override;
+ void bind(const std::shared_ptr<IStatusLine> &statusline) noexcept override;
void set_section_title(
const StatusLineSection &section,
@@ -24,8 +23,6 @@ public:
const StatusLineSection &section,
const std::string_view &body) noexcept override;
- auto get_statusline() const noexcept -> std::shared_ptr<IStatusLine> override;
-
private:
std::shared_ptr<IStatusLine> _statusline;