summaryrefslogtreecommitdiffhomepage
path: root/main/camera.cpp
diff options
context:
space:
mode:
authorStanislaw Halik <sthalik@misaki.pl>2022-10-16 20:37:06 +0200
committerStanislaw Halik <sthalik@misaki.pl>2022-10-16 20:37:06 +0200
commit6e40ad6aa2eb43066d939f5e1c920b2a8cbf49a1 (patch)
treef920e30aa337e2bbd210016bee5ad3826d074508 /main/camera.cpp
parent7f26f8fd7f3171eda4a194d8fd5ffcbba80dd31f (diff)
a
Diffstat (limited to 'main/camera.cpp')
-rw-r--r--main/camera.cpp23
1 files changed, 21 insertions, 2 deletions
diff --git a/main/camera.cpp b/main/camera.cpp
index 967e1496..2bbadd00 100644
--- a/main/camera.cpp
+++ b/main/camera.cpp
@@ -5,7 +5,7 @@ namespace floormat {
void app::do_camera(float dt)
{
- constexpr float pixels_per_second = 512;
+ constexpr float pixels_per_second = 256;
if (keys[key::camera_up])
camera_offset += Vector2(0, 1) * dt * pixels_per_second;
else if (keys[key::camera_down])
@@ -23,7 +23,7 @@ void app::do_camera(float dt)
void app::reset_camera_offset()
{
- camera_offset = _shader.project({TILE_MAX_DIM*TILE_SIZE[0]/2.f, TILE_MAX_DIM*TILE_SIZE[1]/2.f, 0});
+ camera_offset = project({TILE_MAX_DIM*TILE_SIZE[0]/2.f, TILE_MAX_DIM*TILE_SIZE[1]/2.f, 0});
//camera_offset = {};
}
@@ -32,4 +32,23 @@ void app::update_window_scale(Vector2i sz)
_shader.set_scale(Vector2{sz});
}
+Vector2 app::pixel_to_tile(Vector2 position) const
+{
+ const auto px = position - Vector2{windowSize()}*.5f - camera_offset;
+ return unproject(px) / Vector2{TILE_SIZE[0]*.5f, TILE_SIZE[1]*.5f} + Vector2{.5f, .5f};
+}
+
+void app::draw_cursor_tile()
+{
+ if (_cursor_pos)
+ {
+ const auto tile = pixel_to_tile(Vector2(*_cursor_pos));
+ if (std::min(tile[0], tile[1]) >= 0 && std::max(tile[0], tile[1]) < (int)TILE_MAX_DIM)
+ {
+ const auto x = std::uint8_t(tile[0]), y = std::uint8_t(tile[1]);
+ draw_wireframe_quad({x, y});
+ }
+ }
+}
+
} // namespace floormat