35 lines
1.9 KiB
GDScript
35 lines
1.9 KiB
GDScript
extends RefCounted
|
||
|
||
## Client-local snapshot from the follow rig (`isometric_follow_camera.gd`).
|
||
## The rig creates **one** instance and assigns fields every **`_physics_process`** tick after
|
||
## the follow target has moved (rig uses `process_physics_priority` after `Player`).
|
||
## No `class_name` — see repo Godot headless / CI notes.
|
||
##
|
||
## **Consumer contract (NEON-28):** Risk UX / HUD may read this object from the rig’s
|
||
## `camera_state` getter. **Policy-style data** (occlusion enabled,
|
||
## zoom resource identity, pitch, presentation compass) is **not** duplicated here — read the
|
||
## rig’s exports (`allow_yaw`, `presentation_yaw_deg`, resources) when needed. Future E6.M2 work
|
||
## may promote selected flags into this type; until then, keep a single source on the rig.
|
||
##
|
||
## **Authority:** Camera pose is client-only; the server must not use it for gameplay checks
|
||
## (`docs/decomposition/modules/client_server_authority.md` — E1.M2).
|
||
|
||
## Orbit yaw (rad) around the follow target **vertical axis**, **relative to** the rig’s fixed
|
||
## presentation compass (`presentation_yaw_deg` on `isometric_follow_camera.gd`).
|
||
## **Not** total camera compass — only the optional orbit delta. Prototype UX keeps this at **0**
|
||
## (`allow_yaw` false). If orbit is enabled mid-project, HUD and world-anchored gameplay should
|
||
## treat framing as presentation + this delta (see E1.M2 rotation policy).
|
||
var yaw: float = 0.0
|
||
|
||
## Scene path to the follow anchor (typically `CharacterBody3D` / `Node3D`).
|
||
var follow_target_path: NodePath = NodePath()
|
||
|
||
## Effective follow distance used for framing this tick (meters) — active zoom band or fallback.
|
||
var distance: float = 0.0
|
||
|
||
## Active discrete zoom band index when the rig uses a zoom-band resource; otherwise **0**.
|
||
var zoom_band_index: int = 0
|
||
|
||
## World-space point the rig used as look-at focus last tick.
|
||
var focus_world: Vector3 = Vector3.ZERO
|