aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--requirements/milestones.org5
-rw-r--r--src/engine/app.cpp11
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()});