Files
settled-reach/docs/diagrams/ui/hud-layout.d2
T
jpmschweitzerandClaude Opus 4.6 1e556ccca2 docs(diagrams): add decision diagrams across all domains
16 d2 diagrams covering architecture (IPC bridge, system tiers,
testability, audio bus), data flow (perception, dialogue, eavesdrop
pipelines), entity (knowledge graph, NPC generation, dialogue tags),
state (simulation tiers, movement stances, knowledge confidence), and
UI (HUD layout, interaction flow, fog layers). PNG output for universal
viewer compatibility. Removes test SVG from font debugging.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:57:07 +01:00

147 lines
4.7 KiB
Plaintext

# HUD Layout and Z-Stack — D-049, D-048, D-061, D-076
# 8-layer z-stack, insert overlay, dialogue box constraints.
# Dual-scale grid context: 64x64px visual tiles (D-066).
vars: {
color-screen: "#1a1e24"
color-panel: "#2a3040"
color-text: "#c8d0e0"
color-nav: "#c8d8f0"
color-stroke: "#333340"
}
direction: down
zstack: Rendering Z-Stack (D-049)\n8 layers — bottom to top {
style.fill: ${color-screen}
style.stroke: ${color-nav}
style.font-color: ${color-text}
l0: Layer 0 — Floor Tiles\n(zone identity · movement surface) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
l1: Layer 1 — Floor Objects\n(cosmetic · walked over) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
l2: Layer 2 — Furniture / Placed Objects\n(y-sorted with entities) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
l3: Layer 3 — Entity Sprites\n(y-sorted · D-033 relationship color\n24x32px footprint in 64x64 tile) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
}
l4: Layer 4 — Overhead / Wall Tops\n(pipes · ducts · fixtures · signage\nsemi-transparent partial occlusion) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
l5: Layer 5 — Fog of Perception\n(vision cone mask · fog shader\naffects layers 0-4) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
}
l6: Layer 6 — Insert Overlay\n(lattice HUD · bloom-rendered\nNOT affected by fog\nInteraction labels render here) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
}
l7: Layer 7 — Monologue / UI\n(always visible · top of stack\nDialogue box and response options) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
style.bold: true
}
}
insert_overlay: Insert Overlay Design (D-048) {
style.fill: ${color-screen}
style.stroke: ${color-nav}
style.font-color: ${color-text}
bloom: Soft bloom shader\n~2-3px gaussian · ~40% blend {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
smuggler_overlay: Smuggler\nthinner · sparser (baseline lattice) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
detective_overlay: Detective\ndenser · crisper (augmented lattice) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
}
insert_off: Insert OFF behavior (OQ-07)\nCursor shape changes\nInteraction labels hidden {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
style.stroke-dash: 4
}
}
dialogue_box: Dialogue Box (D-061, D-076) {
style.fill: ${color-screen}
style.stroke: ${color-nav}
style.font-color: ${color-text}
position: Bottom of screen\nmax 20% height {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
max_width: Max-width 1200px\n(centered · ~62% of 1920px) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
log: Unified conversation log\n(active + overheard — chronological) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
}
speaker_format: Speaker to Target format\nper-character name colours {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
responses: Response options below log\nmax 3 visible {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
no_portraits: No portraits\n(NPC is on screen) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
timeout: Entry timeout\n15s + 3s fade (configurable) {
style.fill: ${color-panel}
style.stroke: ${color-stroke}
style.font-color: ${color-text}
}
}
monologue_position: Monologue floats ABOVE dialogue box\n(z-layer 7 — spatial separation\ncharacter thinks while NPC speaks) {
style.fill: ${color-panel}
style.stroke: ${color-nav}
style.font-color: ${color-text}
style.border-radius: 4
}
zstack.l5 -> insert_overlay: "does NOT affect" {
style.stroke: ${color-nav}
style.stroke-dash: 4
}
zstack.l6 -> insert_overlay: "rendered at" { style.stroke: ${color-nav} }
zstack.l7 -> dialogue_box: "rendered at" { style.stroke: ${color-nav} }
dialogue_box -> monologue_position: "monologue above" { style.stroke: ${color-nav} }