aboutsummaryrefslogtreecommitdiff
path: root/src/commands/move_cursor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/commands/move_cursor.cpp')
-rw-r--r--src/commands/move_cursor.cpp37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/commands/move_cursor.cpp b/src/commands/move_cursor.cpp
new file mode 100644
index 0000000..8dd7db7
--- /dev/null
+++ b/src/commands/move_cursor.cpp
@@ -0,0 +1,37 @@
+#include "move_cursor.hpp"
+
+#include "strings.hpp"
+
+#include <fmt/core.h>
+
+MoveCursorCommand::MoveCursorCommand(
+ const Vector2 &direction, const std::shared_ptr<ICursorController> &cursor_controller,
+ const std::shared_ptr<IScene> &scene, const std::shared_ptr<IWindow> &window) noexcept
+ : _direction(direction),
+ _cursor_controller(cursor_controller),
+ _scene(scene),
+ _window(window)
+
+{
+}
+
+void MoveCursorCommand::execute() noexcept
+{
+ constexpr int32_t amount = 1;
+
+ const auto new_position =
+ _cursor_controller->where().to_direction(_direction, amount);
+
+ const auto window_size = _window->size();
+
+ if (window_size.validate_coords(new_position) != CoordsValidation::VALID)
+ {
+ return;
+ }
+
+ _cursor_controller->move_to(new_position);
+
+ _scene->write_status(fmt::format(STATUS_BAR_COORDINATES,
+ fmt::arg("x", new_position.get_x()),
+ fmt::arg("y", new_position.get_y())));
+}