435e1c95d2
Work-Package: M02-GMP-MOVEMENT-001 Agent: sindo-main-codex Tests: local movement and player input regressions; asset-free scene; renderer dry-run; coordinate, streaming, documentation and coordination gates Fidelity: preserves current sandbox speed, acceleration, sprint and camera-relative flight behavior; build-12340 parity remains unverified
84 lines
3.3 KiB
Markdown
84 lines
3.3 KiB
Markdown
# M02-GMP-MOVEMENT-001 — Local movement state/controller
|
|
|
|
<!-- OPENWC_CLAIM:M02-GMP-MOVEMENT-001:sindo-main-codex:2026-07-16 -->
|
|
|
|
## Ownership
|
|
|
|
- Target: M02
|
|
- Program: GMP
|
|
- Owner/Agent ID: sindo-main-codex
|
|
- Branch: `work/sindo-main-codex/m02-local-movement`
|
|
- Lease expires UTC: 2026-07-16
|
|
- Integrator: M02 milestone integrator
|
|
|
|
## Outcome
|
|
|
|
Move local velocity, sandbox flight state, acceleration and directional speed
|
|
calculation from `ThirdPersonWowController` into a scene-free,
|
|
independently-testable local movement controller without changing current
|
|
sandbox motion.
|
|
|
|
## Non-goals
|
|
|
|
- Extract terrain queries, camera rig, character presentation or animation.
|
|
- Add jump/fall/swim, server prediction or reconciliation.
|
|
- Change current movement speeds, acceleration, camera-relative flight or ground snap.
|
|
- Gate debug movement by build profile; that remains a separate M02 package.
|
|
- Mark M02 complete or edit its checklist/Evidence.
|
|
|
|
## Paths
|
|
|
|
- Exclusive: `src/gameplay/movement/`,
|
|
`src/tools/verify_local_player_movement.gd`,
|
|
`docs/modules/local-player-movement.md`, this claim
|
|
- Shared/hotspots: `src/scenes/player/third_person_wow_controller.gd`,
|
|
`src/tools/verify_player_input.gd`, `docs/modules/player-input.md`,
|
|
`docs/modules/README.md`
|
|
- Generated/ignored: local `.godot`, native DLL, generated ADT resources and renderer corpus
|
|
|
|
## Contracts and data
|
|
|
|
- Public API: stateful `LocalPlayerMovementController`
|
|
- Inputs: immutable `MoveIntent`, local Godot movement basis and physics delta seconds
|
|
- Outputs: local Godot displacement and read-only velocity/flight state
|
|
- Schema/cache/coordinate contracts: unchanged
|
|
- Consumer: current sandbox player scene; later gameplay composition root
|
|
|
|
## Dependencies
|
|
|
|
- Requires: merged input seam on master `14dead1`
|
|
- Blocks: terrain query and camera/presentation extraction from the player hotspot
|
|
- External state: none; unit tests use synthetic intents and bases
|
|
|
|
## Verification
|
|
|
|
- Commands: dedicated pure movement verifier, player-input regression, asset-free
|
|
scene smoke, coordinate/StreamingFocus gates, renderer dry-run and repository gates
|
|
- Fixtures: identity/rotated/pitched bases, acceleration steps, sprint and flight transitions
|
|
- Fidelity evidence: exact current 7.0/4.5/4.5 speeds, 28.0 acceleration,
|
|
6x sandbox sprint and camera-relative free flight are regression-locked only
|
|
- Performance budget: one small state update per physics tick; no allocation, I/O or scene lookup
|
|
|
|
## Documentation deliverables
|
|
|
|
- Inline public API docs for movement state/configuration and update methods
|
|
- Local movement module specification with data-flow, state and sequence diagrams
|
|
- Updated player-input consumer diagram/status and module registry
|
|
|
|
## Simplicity and naming
|
|
|
|
- Important name: `LocalPlayerMovementController`
|
|
- Simplest approach: one stateful RefCounted owning velocity and flight toggle
|
|
- Rejected complexity: generic locomotion framework, ECS component hierarchy and event bus
|
|
- Unavoidable complexity: movement basis remains an explicit local-space input
|
|
so the pure controller does not discover player/camera Nodes
|
|
- Measured optimization evidence: not applicable
|
|
|
|
## Status
|
|
|
|
- State: active
|
|
- Done: claim and isolated worktree from updated master
|
|
- Next: implement controller, migrate scene consumer, test and document
|
|
- Blocked by:
|
|
|