neon-sprawl/client/scripts
VinPropane 15d405261f NEON-27: implement OcclusionPolicy — RayCast-based material fade
Adds OcclusionPolicy resource and wires it into IsometricFollowCamera.
Each _process frame, iterative rays from the camera eye to the player
focus detect bodies tagged "occluder"; their MeshInstance3D surfaces are
overridden with a transparent StandardMaterial3D (fade_alpha=0.25, instant).
Materials restore when the body clears the ray. Null-material surfaces
(e.g. the prototype Obstacle with no material assigned) receive a plain
transparent StandardMaterial3D so they fade correctly.

- client/scripts/occlusion_policy.gd — new Resource (enabled, fade_alpha,
  occluder_group, occluder_collision_mask, max_occluder_cast_depth,
  occluder_count_log_threshold, is_valid)
- client/resources/isometric_occlusion_policy.tres — default instance
- client/scripts/isometric_follow_camera.gd — occlusion_policy export,
  _update_occlusion pipeline, _apply_occluder_fade/_restore_occluder helpers,
  static occlusion_policy_is_valid guard, _exit_tree cleanup
- client/scenes/main.tscn — Obstacle tagged "occluder", policy assigned
- client/test/occlusion_policy_test.gd — new GdUnit4 unit tests
- client/test/isometric_follow_camera_test.gd — policy guard static tests
- docs/decomposition/modules/E1_M2_IsometricCameraController.md — NEON-27
  snapshot + readability demo gate note
- docs/plans/NEON-27-implementation-plan.md — null-material decision recorded
2026-04-08 23:34:00 -04:00
..
camera_state.gd NEON-26: ZoomBandConfig, discrete zoom input, CameraState sync 2026-04-08 22:32:45 -04:00
camera_state.gd.uid NEON-25: isometric follow camera, CameraState, tests, and docs 2026-04-07 23:46:04 -04:00
ground_pick.gd NS-23: fix bump departure — stepped pick + goal-only steer 2026-04-05 01:07:02 -04:00
ground_pick.gd.uid NS-16: MoveCommand → server PositionState, Godot sync, tests 2026-03-30 19:54:17 -04:00
interaction_radius_indicators.gd NS-18: fix gdlint (line length, const order/naming) 2026-04-04 20:24:59 -04:00
interaction_radius_indicators.gd.uid NS-18: InteractionRequest, client prototype, Postgres test UX 2026-04-04 20:19:33 -04:00
interaction_request_client.gd NS-18: fix gdlint (line length, const order/naming) 2026-04-04 20:24:59 -04:00
interaction_request_client.gd.uid NS-18: InteractionRequest, client prototype, Postgres test UX 2026-04-04 20:19:33 -04:00
isometric_follow_camera.gd NEON-27: implement OcclusionPolicy — RayCast-based material fade 2026-04-08 23:34:00 -04:00
isometric_follow_camera.gd.uid NEON-25: isometric follow camera, CameraState, tests, and docs 2026-04-07 23:46:04 -04:00
main.gd NEON-25: fix gdlint (line length, class-definitions-order) 2026-04-08 00:05:55 -04:00
main.gd.uid fix(client): reliable NS-14 click-to-move without NavigationMesh 2026-03-29 22:08:25 -04:00
occlusion_policy.gd NEON-27: implement OcclusionPolicy — RayCast-based material fade 2026-04-08 23:34:00 -04:00
player.gd NS-24: Fix GDScript lint (line length, gdlint, gdformat) 2026-04-06 00:41:32 -04:00
player.gd.uid fix(client): reliable NS-14 click-to-move without NavigationMesh 2026-03-29 22:08:25 -04:00
position_authority_client.gd NS-21: add GdUnit4, client tests, and CI headless run 2026-04-06 22:08:37 -04:00
position_authority_client.gd.uid NS-16: MoveCommand → server PositionState, Godot sync, tests 2026-03-30 19:54:17 -04:00
prototype_interaction_constants.gd NS-18: gdformat — blank line after doc block (gdtoolkit 4.5.0) 2026-04-04 20:29:25 -04:00
prototype_interaction_constants.gd.uid NS-18: InteractionRequest, client prototype, Postgres test UX 2026-04-04 20:19:33 -04:00
random_floor_bump_collision_constants.gd NS-24: Fix GDScript lint (line length, gdlint, gdformat) 2026-04-06 00:41:32 -04:00
random_floor_bump_collision_constants.gd.uid NS-24: Eliminate idle jitter and movement QA bumps (Godot client) 2026-04-06 00:32:41 -04:00
random_floor_bumps.gd NS-24: Fix GDScript lint (line length, gdlint, gdformat) 2026-04-06 00:41:32 -04:00
random_floor_bumps.gd.uid NS-24: Eliminate idle jitter and movement QA bumps (Godot client) 2026-04-06 00:32:41 -04:00
zoom_band_config.gd NEON-26: add pre-push GDScript lint hook 2026-04-08 23:10:40 -04:00
zoom_band_config.gd.uid NEON-26: ZoomBandConfig, discrete zoom input, CameraState sync 2026-04-08 22:32:45 -04:00