refactor(simulation): simplify vision cone to forward-only 120° arc

Remove the peripheral sector (100° half-angle, reduced range) and blind
spot classification. The server now sends only tiles within the 120°
forward cone; the client renders previously-explored tiles behind the
player with a light fog overlay instead.

This eliminates complexity in both the cone classifier and the snapshot
protocol while preserving the core information asymmetry — you still
can't see behind you, and the monologue system (D-016) still bridges
the perceptual gap.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-28 12:19:38 +01:00
co-authored by Claude Opus 4.6
parent 0bb38dd3d9
commit 2016e9a725
4 changed files with 44 additions and 3266 deletions
+6 -6
View File
@@ -590,10 +590,10 @@ fn npc_behind_wall_excluded_from_multi_entity_snapshot() {
));
// NPC 1: behind wall (should be hidden)
world.spawn((crate::npc::Npc, TilePosition::new(16, 13, 0)));
// NPC 2: to the side, no wall (should be visible)
// NPC 2: NW diagonal, in forward cone (should be visible)
world.spawn((crate::npc::Npc, TilePosition::new(14, 14, 0)));
// NPC 3: also visible
world.spawn((crate::npc::Npc, TilePosition::new(18, 15, 0)));
// NPC 3: NE diagonal, in forward cone (should be visible)
world.spawn((crate::npc::Npc, TilePosition::new(18, 14, 0)));
run_observer_pipeline(&mut world);
@@ -1911,7 +1911,7 @@ fn equidistant_npcs_produce_stable_snapshot_ordering() {
let mut world = setup_world(32, 32);
let mut registry = EntityRegistry::new(0);
// Three NPCs equidistant from observer at (16,16) — all 2 tiles away.
// Three NPCs equidistant from observer at (16,16) — all within forward cone.
// Spawn order: npc_a, npc_b, npc_c → ascending stable_ids.
let npc_a = world
.spawn((crate::npc::Npc, TilePosition::new(16, 14, 0)))
@@ -1919,12 +1919,12 @@ fn equidistant_npcs_produce_stable_snapshot_ordering() {
let npc_a_sid = registry.register(npc_a);
let npc_b = world
.spawn((crate::npc::Npc, TilePosition::new(14, 16, 0)))
.spawn((crate::npc::Npc, TilePosition::new(14, 14, 0)))
.id();
let npc_b_sid = registry.register(npc_b);
let npc_c = world
.spawn((crate::npc::Npc, TilePosition::new(18, 16, 0)))
.spawn((crate::npc::Npc, TilePosition::new(18, 14, 0)))
.id();
let npc_c_sid = registry.register(npc_c);