diff options
| author | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-31 15:30:23 +0100 |
|---|---|---|
| committer | Stanislaw Halik <sthalik@misaki.pl> | 2022-10-31 15:30:23 +0100 |
| commit | 089f188a5b68c87f2be32b465624841fd3c2b44f (patch) | |
| tree | e9ae36eba2c5d462e95e38c682aa24dcf01fc4d3 /editor/camera.cpp | |
| parent | 870d87b3b93d34207301c0b3fb084b275599dcb5 (diff) | |
shortcuts work
Diffstat (limited to 'editor/camera.cpp')
| -rw-r--r-- | editor/camera.cpp | 56 |
1 files changed, 28 insertions, 28 deletions
diff --git a/editor/camera.cpp b/editor/camera.cpp index 8929c97e..c03808d7 100644 --- a/editor/camera.cpp +++ b/editor/camera.cpp @@ -5,45 +5,45 @@ namespace floormat { -void app::do_camera(float dt) +void app::do_camera(float dt, const enum_bitset<key>& cmds) { - if (keys[key::camera_reset]) + if (cmds[key::camera_reset]) { reset_camera_offset(); + update_cursor_tile(cursor.pixel); do_mouse_move(); + return; } - else - { - 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}; + Vector2d dir{}; - if (dir != Vector2d{}) - { - auto& shader = M->shader(); - const auto sz = M->window_size(); - constexpr double screens_per_second = 0.75; + if (cmds[key::camera_up]) + dir += Vector2d{0, -1}; + else if (cmds[key::camera_down]) + dir += Vector2d{0, 1}; + if (cmds[key::camera_left]) + dir += Vector2d{-1, 0}; + else if (cmds[key::camera_right]) + dir += Vector2d{1, 0}; - const double pixels_per_second = sz.length() / screens_per_second; - auto camera_offset = shader.camera_offset(); - const auto max_camera_offset = Vector2d(sz * 10); + if (dir != Vector2d{}) + { + auto& shader = M->shader(); + const auto sz = M->window_size(); + constexpr double screens_per_second = 0.75; - camera_offset -= dir.normalized() * (double)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]); + const double pixels_per_second = sz.length() / screens_per_second; + auto camera_offset = shader.camera_offset(); + const auto max_camera_offset = Vector2d(sz * 10); - shader.set_camera_offset(camera_offset); + camera_offset -= dir.normalized() * (double)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]); - update_cursor_tile(cursor.pixel); - do_mouse_move(); - } + shader.set_camera_offset(camera_offset); + + update_cursor_tile(cursor.pixel); + do_mouse_move(); } } |
