neon-sprawl/client/scripts
VinPropane a7453eb82f NEO-24: unify prototype target radius at 6 m, overlap rings at origin
All prototype targets now share `PrototypeTargetRegistry.SharedLockRadius`
(= 6 m). Anchors moved to alpha `(-3, 0.5, -3)` and beta `(3, 0, 3)` so
the two 6 m rings overlap ~3.5 m wide centered at origin, letting Tab
flip between targets without locomotion. Spawn `(-5, -5)` keeps alpha
in range (~2.83 m) and beta out (~11.31 m) so the existing soft-lock
denial QA path at spawn still holds.

`prototype_target_constants.gd` mirrors the shared radius + new anchors.
The range-aware Tab picker now **skips the currently-locked id** so Tab
always expresses a swap intent — if the only in-range target is already
locked, the fallback picks the next cycle id and the server denies
(preserves NEO-23's "Tab = visible denial when no swap possible" rule).

Tests:
- Server: new `PlayerTargetStateReaderTests.ComputeValidity_AtOrigin_…`
  asserts both targets report `Ok` at origin. Existing boundary test
  rewritten for the new alpha anchor.
- Client: new `test_tab_from_locked_alpha_at_origin_swaps_to_beta_when_both_in_range`
  and `test_tab_when_only_current_lock_is_in_range_falls_back_to_cycle_for_denial`.
  Existing in-range/out-of-range positions updated for the new layout.

Server 59/59 and client 95/95 suites pass.

Plan Decision 7, review follow-up #4, manual QA section 5 (new "Tab-flip
at origin" overlap sanity), and README updated. Per-target radii will
return with real combat design (E5.M1) — this is a prototype stub.
2026-04-21 23:37:42 -04:00
..
camera_state.gd chore: point docs and rules at Linear NEO issue ids 2026-04-13 13:15:32 -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.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 chore: point docs and rules at Linear NEO issue ids 2026-04-13 13:15:32 -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 NEO-24: freshen server position before target-select + surface divergence on HUD 2026-04-21 23:21:16 -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 chore: point docs and rules at Linear NEO issue ids 2026-04-13 13:15:32 -04:00
occlusion_policy.gd.uid NEON-27: finalise review (Approved) + Godot uid files 2026-04-08 23:55:29 -04:00
player.gd NEO-22: Extract WASD locomotion for gdlint max-file-lines 2026-04-17 20:13:36 -04:00
player.gd.uid fix(client): reliable NS-14 click-to-move without NavigationMesh 2026-03-29 22:08:25 -04:00
player_locomotion_wasd.gd NEO-22: Cache scrape contact in WASD tick; close review items 2026-04-17 20:21:13 -04:00
player_locomotion_wasd.gd.uid NEO-22: Add Godot .uid sidecars for WASD locomotion scripts 2026-04-17 20:51:16 -04:00
position_authority_client.gd NEO-24: fix movement-driven target refresh via authoritative_ack signal 2026-04-21 22:35:41 -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
prototype_smooth_hill_piece.gd NEON-29: Prototype smooth hill piece, movement script updates, NEO-22 plan 2026-04-15 23:39:47 -04:00
prototype_smooth_hill_piece.gd.uid NEON-29: Prototype smooth hill piece, movement script updates, NEO-22 plan 2026-04-15 23:39:47 -04:00
prototype_target_constants.gd NEO-24: unify prototype target radius at 6 m, overlap rings at origin 2026-04-21 23:37:42 -04:00
prototype_target_constants.gd.uid NEO-24: client tab-target + lock HUD synced to server 2026-04-21 22:14:16 -04:00
prototype_target_markers.gd NEO-24: add visible target-anchor markers + HUD distance lines 2026-04-21 23:04:03 -04:00
prototype_target_markers.gd.uid NEO-24: add visible target-anchor markers + HUD distance lines 2026-04-21 23:04:03 -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
target_selection_client.gd NEO-24: range-aware Tab cycle skips out-of-range anchors before POST 2026-04-21 23:26:56 -04:00
target_selection_client.gd.uid NEO-24: client tab-target + lock HUD synced to server 2026-04-21 22:14:16 -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