feat(simulation): D-252 — Facing is view-only; NPC gaze moves to path-follow intent (T-1093)

apply_move no longer writes Facing (was the only movement-facing coupling,
player-only); the player's view changes solely via explicit SetFacing.
NPC path-follow now sets Facing to the step direction — a strict improvement
recorded as a D-252 correction: NPCs previously never received Facing from
movement, their cones sat at spawn direction while walking. Bump-to-turn
retired (blocked moves change nothing) with a regression test for each
semantic. Wire schema unchanged; player_facing docs now say view/aim.
Gauntlet fixtures regenerated (facing octants now reflect view-only
semantics); client replay + live-roundtrip suites green against the new
server.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-06 21:07:18 +02:00
co-authored by Claude Fable 5
parent 629c0a9b1e
commit 0c91ef28ba
11 changed files with 2317 additions and 349 deletions
+6 -2
View File
@@ -86,7 +86,10 @@ pub struct ObserverSnapshot {
pub tick: u64,
/// Game time data for client HUD display (D-031)
pub game_time: GameTime,
/// Player character's facing direction for vision cone (D-015)
/// Player character's view direction — the vision-cone heading (D-015).
/// View-only since D-252: this is the aim (SetFacing / mouse octant), NOT
/// the movement direction. The client derives body heading from position
/// deltas (D-248); accepted moves no longer rotate this.
pub player_facing: FacingDirection,
/// Player's current movement stance for HUD display (#449, D-053).
/// Defaults to Walk when stance component is absent.
@@ -364,8 +367,9 @@ pub struct InventoryItem {
pub slot: u8,
}
/// 8-directional facing direction, matching movement system.
/// 8-directional facing direction — the view/aim heading, not movement.
/// Used for vision cone computation (D-015) and snapshot wire format.
/// View-only since D-252: set via SetFacing, never by accepted moves.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default, Serialize, Deserialize)]
pub enum FacingDirection {
#[default]