diff options
author | cflip <cflip@cflip.net> | 2022-03-24 08:30:01 -0600 |
---|---|---|
committer | cflip <cflip@cflip.net> | 2022-03-24 08:30:01 -0600 |
commit | 31d273c11bfd83a490ca538ba67d0a75f1d22cd7 (patch) | |
tree | 8b629348c1ed9de810bddbcffcba8b6918aa41eb /src/main.cpp | |
parent | 10b41cc429b5c14023fa3bee0b09040fef1b2929 (diff) |
Add camera panning with arrow keys
Diffstat (limited to 'src/main.cpp')
-rw-r--r-- | src/main.cpp | 51 |
1 files changed, 48 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp index 1d68272..436660c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,6 +4,8 @@ #include "util.h" #include "window.h" +#include <SDL_keycode.h> + int main(int argc, char** argv) { constexpr int Height = 240; @@ -29,6 +31,13 @@ int main(int argc, char** argv) Point2D hoveredTile = { 0, 0 }; bool isDragging = false; + bool up = false; + bool down = false; + bool left = false; + bool right = false; + + const int cameraMoveSpeed = 3; + window.onMouseDown([&](int button, int x, int y) { if (button == 1) { int mx = x / Scale + xOffs; @@ -66,11 +75,42 @@ int main(int argc, char** argv) }); window.onKeyDown([&](int keycode) { - if (keycode == 's') { + switch (keycode) { + case SDLK_UP: + up = true; + break; + case SDLK_DOWN: + down = true; + break; + case SDLK_LEFT: + left = true; + break; + case SDLK_RIGHT: + right = true; + break; + case 's': level.save(); - } - if (keycode == 'l') { + break; + case 'l': level.load(); + break; + } + }); + + window.onKeyUp([&](int keycode) { + switch (keycode) { + case SDLK_UP: + up = false; + break; + case SDLK_DOWN: + down = false; + break; + case SDLK_LEFT: + left = false; + break; + case SDLK_RIGHT: + right = false; + break; } }); @@ -78,6 +118,11 @@ int main(int argc, char** argv) window.update(); bitmap.clear(0xff224466); + if (up) yOffs -= cameraMoveSpeed; + if (down) yOffs += cameraMoveSpeed; + if (left) xOffs -= cameraMoveSpeed; + if (right) xOffs += cameraMoveSpeed; + level.update(); level.draw(bitmap, xOffs, yOffs); |