1bf5b526be
Work-Package: M02-QAR-INTEGRATOR-CLOSEOUT-001 Agent: sindo-main-codex Tests: all M02 contracts, renderer dry-run, documentation and coordination gates passed Fidelity: direct binding evidence and reference-only timing/routing are separated; remaining locomotion/camera gaps stay explicit
5.4 KiB
5.4 KiB
M02-RND-CAMERA-001 — Third-person camera rig boundary
Ownership
- Target: M02
- Program: RND/GMP
- Owner/Agent ID: sindo-main-codex
- Branch:
work/sindo-main-codex/m02-camera-rig - Lease expires UTC: 2026-07-16
- Integrator: M02 milestone integrator
Outcome
Move mouse capture, orbit yaw/pitch, zoom state and Camera3D transforms from
ThirdPersonWowController into a reusable ThirdPersonCameraRig, with an
explicit replaceable camera-collision policy that preserves the current
no-collision sandbox baseline.
Non-goals
- Enable a new collision/raycast behavior before build-12340 comparison.
- Change initial yaw/pitch, zoom limits, sensitivity, FOV, far plane or camera path.
- Implement first-person, follow lag, shoulder offsets or cinematic cameras.
- Change movement, terrain query, character presentation or renderer streaming focus.
- Mark M02 complete or edit its checklist/Evidence.
Paths
- Exclusive:
src/scenes/player/third_person_camera_rig.gd,src/scenes/player/camera_collision_policy.gd,src/scenes/player/no_camera_collision_policy.gd,src/tools/verify_third_person_camera_rig.gd,docs/modules/third-person-camera.md, this claim - Shared/hotspots:
src/scenes/player/third_person_wow_controller.gd, runtime streaming scenes, player regression scene,src/tools/verify_player_input.gd,docs/modules/player-input.md,docs/modules/local-player-movement.md,docs/modules/README.md - Generated/ignored: local
.godot, native DLL, generated resources and renderer corpus
Contracts and data
- Public API:
ThirdPersonCameraRig.initialize_for_character,handle_camera_input,godot_world_flight_movement_basis, state getters andset_collision_policy - Policy:
CameraCollisionPolicy.resolve_camera_distance; defaultNoCameraCollisionPolicyreturns requested distance unchanged - Scene paths and renderer camera path remain unchanged
- Schema/cache/coordinate contracts: unchanged
- Consumers: player composition, sandbox flight movement and renderer viewport
Dependencies
- Requires: merged TerrainQuery package on master
f5bb64e - Blocks: character appearance/animation extraction from remaining player hotspot
- External state: none; tests use asset-free camera/player scene
Verification
- Commands: dedicated orbit/zoom/clamp/policy verifier, input/movement/terrain regressions, asset-free scene, coordinate/StreamingFocus gates, renderer dry-run and repository gates
- Fixtures: initial state, remappable action events, mouse deltas and fixed-distance policy
- Fidelity evidence: preserve current
-18°pitch,8distance,1zoom step,2..18clamp,0.003sensitivity and no-collision output - Performance budget: constant-time state/transform update; no raycast in baseline policy
Documentation deliverables
- Inline API/export documentation for rig and collision policies
- Camera module spec with inputs/outputs, data-flow, state and sequence diagrams
- Updated input/movement consumer diagrams/source maps and module registry
Simplicity and naming
- Important names:
ThirdPersonCameraRig,CameraCollisionPolicy,NoCameraCollisionPolicy - Simplest approach: one Node3D rig on existing CameraPivot and one explicit identity policy
- Rejected complexity: generic camera framework, spring arm migration and hidden physics raycast
- Unavoidable complexity: rig mutates Camera3D/character Node transforms on main thread
- Measured optimization evidence: not applicable
Status
- State: ready-for-review
- Done: extracted rig and collision policy, migrated all three scene compositions, added regressions and completed required module documentation
- Next: milestone integrator reviews and merges
8c1cf9b - Blocked by:
Handoff
- Outcome:
ThirdPersonCameraRignow owns capture, orbit, zoom and camera transforms;ThirdPersonWowControlleronly dispatches camera events and consumes the rig basis for sandbox flight. - Public contracts:
initialize_for_character,handle_camera_input,godot_world_flight_movement_basis,set_collision_policy, read-only state, andCameraCollisionPolicy.resolve_camera_distance. - Verification: camera
state_cases=12 policy_cases=3 scenes=3, inputactions=12 intent_cases=6, movementcases=12 state_transitions=2, terraincontract=4 interpolation=1 cache=1 failures=2, coordinate boundaryfiles=98 consumers=5; documentation, coordination and diff checks passed. - Renderer dry-run: seven checkpoint plans and report completed; expected diagnostics only for unavailable proprietary corpus/character GLB.
- Fidelity: preserves the sandbox defaults (
-18 degrees, distance8, zoom2..18step1, sensitivity0.003, pivot1.7, far50000) and the prior no-collision behavior. No build-12340 parity claim is made. - Local ignored inputs: native extension DLL and generated ADT resource scripts were used for the renderer dry-run and are not part of the commit.
- Migration: none;
ThirdPersonPlayer/CameraPivot/Camera3Dremains stable. - Risks: active collision and exact original-client camera semantics remain unverified; exported initial values are captured at ready; mouse mode is process-global.
- Documentation: added the camera API/module spec plus data-flow, state and sequence diagrams; updated player-input and local-movement consumer maps.