feat(client): add fog entity visualization and wire Sprint 7 UI (#431, #434)

Fog entity cognitive delay rendering (D-059/D-060): sonar-style sound
pings (3 concentric rings, 1.5s fade), unrecognized grey blobs with
breathing pulse, D-033 color transition at 50% recognition progress,
±0.5 tile position drift. FogEntities node at z:950 between fog
shader and InsertOverlay.

Protocol v7 bump to match server PR #23 (pending_recognitions field).
Wires dialogue box and fog entities into game loop with mock test data.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-16 01:19:24 +01:00
co-authored by Claude Opus 4.6
parent 2d56131221
commit 2659de0c28
7 changed files with 276 additions and 2 deletions
+17 -1
View File
@@ -11,7 +11,7 @@ class_name Protocol
## Protocol version — must match server PROTOCOL_VERSION in bridge/types.rs.
## Reject snapshots where version != this value.
const PROTOCOL_VERSION: int = 6
const PROTOCOL_VERSION: int = 7
# -- Decode: bytes from server → GDScript types --------------------------------
@@ -122,6 +122,21 @@ static func decode_snapshot(bytes: PackedByteArray) -> Variant:
"slot": int(raw_item.get("slot", 0)),
})
# v7: pending_recognitions (#431, D-059/D-060) — cognitive delay fog entities
var pending_recognitions: Array = []
var raw_recognitions: Variant = raw.get("pending_recognitions")
if raw_recognitions is Array:
for raw_pr in raw_recognitions:
if raw_pr is Dictionary and raw_pr.has("entity_id") and raw_pr.has("x") and raw_pr.has("y"):
pending_recognitions.append({
"entity_id": int(raw_pr["entity_id"]),
"x": float(raw_pr["x"]),
"y": float(raw_pr["y"]),
"z": int(raw_pr.get("z", 0)),
"remaining_ticks": int(raw_pr.get("remaining_ticks", 0)),
"total_delay_ticks": int(raw_pr.get("total_delay_ticks", 1)),
})
return {
"tick": tick,
"entities": entities,
@@ -134,6 +149,7 @@ static func decode_snapshot(bytes: PackedByteArray) -> Variant:
"visible_tiles": visible_tiles,
"nearby_interactions": nearby_interactions,
"current_monologue": current_monologue,
"pending_recognitions": pending_recognitions,
}