Files
security-game/docs/adr/0008-cone-focus-and-head-ring.md
T
zwitschi 2b631ae6d9 Add ADRs 0007–0010 for locomotion, focus ring, radial menu, NPC presentation
- 0007: input layers so WASD/look never fire person-verbs; freeze while modal
- 0008: cone focus + billboarded head ring; no type names in the world
- 0009: doughnut action menu (LMB/Space open, click or A/D then Space, Esc/RMB
  cancel); emergency stays on R
- 0010: keep procedural rigs, add face/hair/neck; no Mixamo this pass
Linked from architecture.md, PLAN.md, TODO.md, MEMORY.md.
2026-10-31 15:04:12 +01:00

2.6 KiB

ADR-0008: Cone focus and head ring

  • Status: Accepted
  • Date: TBD

Context

The prototype picks a person with an 8 m physics ray from the camera. The collider is a capsule. A few pixels off the body, or a bob during a walk, clears the target. The HUD then prints a name and hint, but nothing in the world shows who is selected. Tab already cycles people within 12 m as an aim-free path.

The next pass needs the player to look at a person, know they have them, and only then open an action menu. A hairline ray is too brittle for that, and a HUD line is easy to miss in a crowd.

Decision

Focus is a cone, not a ray.

  • People within about 10 m whose head projects inside a screen-space circle around the crosshair (about 90 px / 10 degrees) are candidates.
  • If several heads sit in the circle, pick the one closest to the center; if tied, the nearer one.
  • The person must be in front of the camera. A short ray to the head skips people fully hidden by the building.
  • A few frames of grace keep walk-bob from dropping focus.
  • Tab still cycles people inside 12 m and sets the same focused person.

When someone is in focus, draw a thin ring around their head, attached to the avatar Head node, billboarded so it stays a circle on screen. Pale gold while idle; brighter and slightly larger while the action menu is open on that person. Optional display_name under the ring. One ring at a time.

The world must not show the internal type name (Trespasser, Violent Threat). The debug overlay (F) can still print it.

Consequences

Positive

  • Looking near a person is enough; the player does not have to pin a capsule.
  • The ring is visible in the scene, so the HUD is not the only focus cue.
  • Tab remains the accessibility path and shares the same focused person.
  • The action menu (ADR-0009) has a clear subject.

Negative

  • Two heads in the same circle can steal focus; center-distance is a heuristic, not a lock-on.
  • Hats and protester signs can z-fight a 3D torus. A screen-space circle unprojected from the head is an allowed fallback.
  • Occlusion rays can fail on unusual geometry; grace frames hide some of that.

Alternatives considered

  • Keep the hairline ray: Rejected because it drops people too easily and has no world mark.
  • Sticky lock-on until cancelled: Rejected because the job is to watch a crowd, not duel one person.
  • Screen reticle only, no world ring: Rejected; in a crowd the player needs a mark on the head, not only a HUD line.
  • Click a person to select, then act: Rejected for default play. The mouse is captured for look (ADR-0007). Click opens the action menu on whoever is already in the cone.