diff options
author | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-21 01:06:11 +0200 |
---|---|---|
committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-21 01:06:11 +0200 |
commit | c6ab4f8b8fafe13207794a0debe1a374960e0d6b (patch) | |
tree | 068821d3f0879158f6a15e74f80aae62400bd196 /main/camera.cpp | |
parent | 3a48b0e1d0a3ac40d1e34c4957040486b1d3191a (diff) |
fix camera & cursor tile
Diffstat (limited to 'main/camera.cpp')
-rw-r--r-- | main/camera.cpp | 53 |
1 files changed, 28 insertions, 25 deletions
diff --git a/main/camera.cpp b/main/camera.cpp index fd31066e..a063b619 100644 --- a/main/camera.cpp +++ b/main/camera.cpp @@ -5,33 +5,37 @@ namespace floormat { void app::do_camera(double dt) { - constexpr double screens_per_second = 1; - const auto pixels_per_second = windowSize().length() / screens_per_second; - auto camera_offset = _shader.camera_offset(); - Vector2d dir{}; - - if (keys[key::camera_up]) - dir += Vector2d{0, 1}; - else if (keys[key::camera_down]) - dir += Vector2d{0, -1}; - if (keys[key::camera_left]) - dir += Vector2d{1, 0}; - else if (keys[key::camera_right]) - dir += Vector2d{-1, 0}; - - if (dir != Vector2d{}) + if (keys[key::camera_reset]) + reset_camera_offset(); + else { - camera_offset += dir.normalized() * dt * pixels_per_second; + Vector2d dir{}; - const auto max_camera_offset = Vector2d(windowSize() * 10); - camera_offset[0] = std::clamp(camera_offset[0], -max_camera_offset[0], max_camera_offset[0]); - camera_offset[1] = std::clamp(camera_offset[1], -max_camera_offset[1], max_camera_offset[1]); - } - _shader.set_camera_offset(camera_offset); + if (keys[key::camera_up]) + dir += Vector2d{0, 1}; + else if (keys[key::camera_down]) + dir += Vector2d{0, -1}; + if (keys[key::camera_left]) + dir += Vector2d{1, 0}; + else if (keys[key::camera_right]) + dir += Vector2d{-1, 0}; - if (keys[key::camera_reset]) - reset_camera_offset(); + if (dir != Vector2d{}) + { + constexpr double screens_per_second = 1; + const auto pixels_per_second = windowSize().length() / screens_per_second; + auto camera_offset = _shader.camera_offset(); + const auto max_camera_offset = Vector2d(windowSize() * 10); + + camera_offset += dir.normalized() * dt * pixels_per_second; + camera_offset[0] = std::clamp(camera_offset[0], -max_camera_offset[0], max_camera_offset[0]); + camera_offset[1] = std::clamp(camera_offset[1], -max_camera_offset[1], max_camera_offset[1]); + _shader.set_camera_offset(camera_offset); + } + else + return; + } recalc_cursor_tile(); } @@ -42,12 +46,11 @@ void app::reset_camera_offset() #else _shader.set_camera_offset({}); #endif - recalc_cursor_tile(); } void app::recalc_cursor_tile() { - if (_cursor_pixel) + if (_cursor_pixel && !_cursor_in_imgui) _cursor_tile = pixel_to_tile(Vector2d(*_cursor_pixel)); else _cursor_tile = std::nullopt; |