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
+4 -2
View File
@@ -15,8 +15,10 @@ use crate::bridge::types::{FacingDirection, VisibilitySector};
use crate::perception::shadowcast::VisibilityMap;
use bevy_ecs::prelude::*;
/// Component tracking which direction an entity faces.
/// Updated by the input system when an entity moves.
/// Component tracking which direction an entity faces — the view/aim heading,
/// not the movement direction (view-only since D-252). Set explicitly: the
/// player's via `handle_set_facing` (SetFacing input), an NPC's via the
/// path-follow system's step-direction intent (`simulation::path_follow`).
#[derive(Component, Debug, Clone, Copy, PartialEq, Eq)]
pub struct Facing(pub FacingDirection);