diff --git a/client/scripts/camera_state.gd b/client/scripts/camera_state.gd index ff85765..709a772 100644 --- a/client/scripts/camera_state.gd +++ b/client/scripts/camera_state.gd @@ -4,8 +4,9 @@ extends RefCounted ## `isometric_follow_camera.gd`. No `class_name` — see repo Godot headless / CI notes. ## 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`). This is **not** total -## camera compass—only the optional orbit delta. Prototype UX keeps this at **0** (`allow_yaw` false). +## presentation compass (`presentation_yaw_deg` on `isometric_follow_camera.gd`). +## This is **not** total camera compass—only the optional orbit delta. +## Prototype UX keeps this at **0** (`allow_yaw` false). var yaw: float = 0.0 ## Scene path to the follow anchor (typically `CharacterBody3D` / `Node3D`). diff --git a/client/scripts/isometric_follow_camera.gd b/client/scripts/isometric_follow_camera.gd index 0f61d87..4f862eb 100644 --- a/client/scripts/isometric_follow_camera.gd +++ b/client/scripts/isometric_follow_camera.gd @@ -22,8 +22,6 @@ const CameraStateScript := preload("res://scripts/camera_state.gd") ## When eye-to-desired distance exceeds this, snap (server snap / huge teleports). @export var snap_distance: float = 24.0 -@onready var camera: Camera3D = $Camera3D - ## Latest [CameraState] tick; same object each frame (see NEON-25 plan). var camera_state: get: @@ -34,6 +32,8 @@ var _smoothed_eye: Vector3 = Vector3.ZERO var _orbit_yaw_rad: float = 0.0 var _warned_missing_follow_target: bool = false +@onready var camera: Camera3D = $Camera3D + func _ready() -> void: _state = CameraStateScript.new() @@ -96,7 +96,8 @@ func _process(delta: float) -> void: func _sync_camera_state(focus: Vector3) -> void: - # `CameraState.yaw` stores **orbit delta** only; world-fixed diagonal framing is `presentation_yaw_deg`. + # `CameraState.yaw` = orbit delta only; world-fixed diagonal framing = + # `presentation_yaw_deg`. _state.follow_target_path = follow_target_path _state.distance = follow_distance _state.zoom_band_index = 0 @@ -118,7 +119,8 @@ func _warn_missing_follow_target_once() -> void: return _warned_missing_follow_target = true push_warning( - "IsometricFollowCamera: follow_target_path is empty or does not resolve to a Node3D; camera not updating." + "IsometricFollowCamera: follow_target_path is empty or does not resolve to a Node3D; " + + "camera not updating." ) diff --git a/client/scripts/main.gd b/client/scripts/main.gd index b7f5515..57bc70b 100644 --- a/client/scripts/main.gd +++ b/client/scripts/main.gd @@ -3,7 +3,8 @@ extends Node3D ## NS-16: composes ground pick + server authority; see `ground_pick.gd` / ## `position_authority_client.gd`. NS-18: interaction POST + radius glow preview (see child nodes). ## NS-23: bakes `NavigationRegion3D` on startup; boot snap vs nav goal from authority signal. -## NEON-25: follow camera is `World/IsometricFollowCamera/Camera3D` (see `isometric_follow_camera.gd`). +## NEON-25: follow camera is `World/IsometricFollowCamera/Camera3D` +## (see `isometric_follow_camera.gd`). ## Prototype: two random short bumps (sibling StaticBody3D under NavigationRegion3D; see ## `random_floor_bumps.gd`) before nav bake.