feat(client): D-252 view/movement split — body from leg velocity, view is the mouse (T-1093)
D-252 (new record, amends D-054/D-249, resolves Q-084's walk-vs-aim split): Facing is view-only; movement no longer writes it. Client side: the rig's moving-body yaw now always derives from leg velocity (the wire octant is the VIEW and must never rotate the body — the follow-only commit flag generalizes and disappears); the layered head/torso look-at runs during any movement, WASD included; the ~100ms post-step re-assert mitigation is removed as dead (server-side facing_from_delta removal lands separately). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -208,26 +208,6 @@ func queue_move_step(tile_delta: Vector2i) -> bool:
|
||||
# so no throttle — the server's handle_toggle_stance has no cooldown, so the sandbox
|
||||
# follower can burst the exact ladder distance and trust it (server validates). No-op
|
||||
# while input is suppressed (dialogue / free camera), matching movement.
|
||||
## T-1088 follow-facing: unconditionally re-send the CURRENT facing octant.
|
||||
## The server overwrites Facing from the move delta on every accepted step
|
||||
## (movement.rs facing_from_delta), and the change-gated send above never
|
||||
## re-asserts an unchanged octant — during a path-follow the vision cone would
|
||||
## stick path-forward until the mouse crossed an octant boundary. The follower
|
||||
## calls this ~2 server ticks after each emitted step (same-tick re-asserts
|
||||
## lose: movement wins within a tick). Suppression-guarded like all sends.
|
||||
func reassert_facing() -> void:
|
||||
if GameState.dialogue_active or GameState.free_camera_mode:
|
||||
return
|
||||
_last_sent_octant = facing_octant
|
||||
input_queue.append(
|
||||
{
|
||||
"action": Action.SET_FACING,
|
||||
"timestamp_msec": Time.get_ticks_msec(),
|
||||
"action_data": {"facing": facing_octant},
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
func queue_stance_toggle(up: bool) -> void:
|
||||
if GameState.dialogue_active or GameState.free_camera_mode:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user