From 37b5f7c8bd0b4c0e297614577edb7b634c13d700 Mon Sep 17 00:00:00 2001 From: "Emil A. Overbeck" Date: Sun, 19 Jul 2026 03:17:57 +0200 Subject: WASD bindings --- requirements/milestones.org | 5 +++-- src/engine/app.cpp | 11 +++++++---- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/requirements/milestones.org b/requirements/milestones.org index a2cabe8..87b198b 100644 --- a/requirements/milestones.org +++ b/requirements/milestones.org @@ -17,7 +17,7 @@ Goal: Container builds, SDL3 window opens, clears to a color. - [X] Containerfile with all dependencies pre-built - [X] meson.build at project root, compiles and links SDL3 + Box2D + all deps - [X] =src/main.cpp= -- SDL3 creates a window, clears to dark blue-gray -- [X] Camera: 2D orthographic, pan (arrows/middle-drag), zoom (scroll) +- [X] Camera: 2D orthographic, pan (arrows or WASD/middle-drag), zoom (scroll) - [X] Input system: polling keyboard/mouse state - [X] Podman build + run workflow @@ -203,7 +203,8 @@ Goal: Everything feels good. Controls are responsive. Visuals are clear. - [ ] Repair tool: right-click damaged piece, pay resources to restore HP - [ ] Recycle: shift+click to remove piece, recover partial resources -- [X] Camera feel: pan (arrows / middle-drag), scroll zoom (basic; edge-scroll TBD) +- [X] Camera feel: pan (arrows or WASD / middle-drag), scroll zoom + (basic; edge-scroll TBD) - [~] Visual feedback: fire glow done (burning struts flicker orange); no per-damage-state art yet. Forts ships damage-state textures (=materials/wood_panel_damaged_1..3.tga=, =bracing-d1/d2=, =armor-d1/d2=) diff --git a/src/engine/app.cpp b/src/engine/app.cpp index 2108316..fa1155c 100644 --- a/src/engine/app.cpp +++ b/src/engine/app.cpp @@ -32,10 +32,13 @@ App::~App() { } static void update_camera(Camera& cam, const Input& input, float dt) { - if (input.key_down(SDLK_LEFT)) cam.pan({-cam.pan_speed * dt / cam.zoom(), 0.0f}); - if (input.key_down(SDLK_RIGHT)) cam.pan({ cam.pan_speed * dt / cam.zoom(), 0.0f}); - if (input.key_down(SDLK_UP)) cam.pan({0.0f, cam.pan_speed * dt / cam.zoom()}); - if (input.key_down(SDLK_DOWN)) cam.pan({0.0f, -cam.pan_speed * dt / cam.zoom()}); + // WASD mirrors the arrow keys. Build modes are on the number row, so the + // letters are free. + const float step = cam.pan_speed * dt / cam.zoom(); + if (input.key_down(SDLK_LEFT) || input.key_down(SDLK_A)) cam.pan({-step, 0.0f}); + if (input.key_down(SDLK_RIGHT) || input.key_down(SDLK_D)) cam.pan({ step, 0.0f}); + if (input.key_down(SDLK_UP) || input.key_down(SDLK_W)) cam.pan({0.0f, step}); + if (input.key_down(SDLK_DOWN) || input.key_down(SDLK_S)) cam.pan({0.0f, -step}); if (input.mouse_down(SDL_BUTTON_MIDDLE)) { auto d = input.mouse_delta(); cam.pan({-d.x / cam.zoom(), d.y / cam.zoom()}); -- cgit v1.3