## Movement harness — shared types and MovementModule concept. ## Mirrors gun_interface.nim structure. import gun_harness/gun_interface export gun_interface.WorldState type MoveCommand* = tuple[speed: float, turnRate: float] ## speed: target speed in px/tick, clamped to ±8 by bot API ## turnRate: body turn rate in degrees/tick ## MovementModule concept — any type T implementing computeMove is valid. template isMovementModule*(T: typedesc): bool = compiles( block: var m: T let ws = WorldState() let cmd: MoveCommand = m.computeMove(ws) )