VinPropane
1f5c1e7619
NEON-16: harden idle jitter follow-up
...
Harden idle settling so flat ground, obstacle contacts, and rare bump-edge cases stop drifting instead of looping corrective nudges. Also resolves the saved review follow-up items and syncs the runtime docs to the final feet-height and idle-anchor behavior.
2026-04-10 00:46:53 -04:00
VinPropane
1f8c0d04d1
NEON-30: address review — check AC boxes, add manual-check section to README
2026-04-09 23:03:17 -04:00
VinPropane
0fa2c0f93b
NEON-30: skip occluder bodies in ground-pick raycast loop
...
ground_pick.gd now checks _collider_is_occluder before the walkable
break: when the ray hits a body in the "occluder" group it advances
OCCLUDER_PICK_THROUGH past the hit point and continues, unconditionally
and regardless of OcclusionPolicy fade state. Non-occluder click
targeting is unchanged.
Three unit tests added to ground_pick_test.gd covering occluder ancestry
detection. Plan open questions and module doc updated.
2026-04-09 22:51:22 -04:00
VinPropane
cdf9d59bd9
NEON-26: add pre-push GDScript lint hook
...
Document the repo's enforced GDScript lint rules and add a local pre-push hook so gdlint/gdformat failures are caught before CI.
2026-04-08 23:10:40 -04:00
VinPropane
ff830813c7
NEON-26: address code review follow-ups (zoom validation, docs)
2026-04-08 22:58:28 -04:00
VinPropane
4930fd89a6
NEON-25: isometric follow camera, CameraState, tests, and docs
2026-04-07 23:46:04 -04:00
VinPropane
fa19ab7337
chore: migrate Jira references from NS-* to NEON-* in docs and rules
...
Rename implementation plans and dated reviews to NEON issue numbers per
Atlassian project re-key. Update browse URLs, cross-links, module docs,
client/server READMEs, and Cursor rules (project key NEON).
2026-04-07 00:15:06 -04:00
VinPropane
da72ea8264
NS-21: fail CI if Godot logs SCRIPT ERROR during GdUnit discovery
...
GdUnit exits 0 when broken suites are skipped; grep log for parse/load errors.
2026-04-06 22:34:43 -04:00
VinPropane
7b2c35f57c
NS-21: fix GdUnit CI path casing; preflight and README note
...
Linux res:// paths are case-sensitive; gdunit4 breaks, gdUnit4 is correct.
2026-04-06 22:27:36 -04:00
VinPropane
791c7dad1b
Merge branch 'main' into NS-21-gdscript-unit-testing
2026-04-06 22:22:16 -04:00
VinPropane
8113e48cc8
NS-21: add GdUnit4, client tests, and CI headless run
...
- Vendor gdUnit4 v6.1.2 under client/addons; enable plugin in project.godot
- Tests: player.gd API, position authority HTTP flow (Node transport double),
ground_pick walkable ancestry; test double script for injection
- position_authority_client: _create_http_request factory, Node-typed _http,
emit move_rejected unknown for empty/missing reasonCode strings
- gdscript workflow: lint scripts+test, format check, cache Godot 4.6, GdUnit CLI
- README testing section; gitignore client/reports; testing-expectations Godot harness
2026-04-06 22:08:37 -04:00
VinPropane
7b11d4e238
NS-24: Eliminate idle jitter and movement QA bumps (Godot client)
...
Physics: Jolt 3D; physics_interpolation off; 120 TPS. CharacterBody3D idle
path uses dual floor_max_angle, rim/straddle and ridged-contact handling,
rim settle and random-floor-bump lip/wall escape, floor_block_on_wall,
NavigationAgent3D avoidance off, per-node interp off. No global_transform in
_process (avoid render/physics ghosting).
QA geometry: random_floor_bumps.gd (load from main.gd); each bump on its own
StaticBody3D under NavigationRegion3D; random_floor_bump_collision_constants.gd
for collider fudge and RANDOM_FLOOR_BUMP_MESH_GROUP.
Scene: player safe_margin and mesh Y lift; MoveRejectPedestal / MoveRejectFarPad
renamed from NS19*; Mat_player_capsule without polygon_offset (per follow-up).
Docs: NS-24 plan + resolution, client/README manual steps, code review
2026-04-05-NS-24.md; server/README bump height note. Code/scene identifiers
avoid ticket-based ns19_* naming.
2026-04-06 00:32:41 -04:00
VinPropane
d22d252b59
docs: Link NS-24 for idle jitter (plan + client README)
2026-04-05 15:04:09 -04:00
VinPropane
14a6813985
NS-23: Document movement tradeoff — no required obstacle auto-nav
...
Align plan, client/server README, E1.M1 snapshot, and code review note with
the chosen design: descend bypass favors smooth stepped surfaces; multi-click
around obstacles is OK. NS-24 remains for idle jitter.
2026-04-05 14:56:52 -04:00
VinPropane
f49c8b88d2
NS-23: Fix nav movement (sync bake, map guard, path/fallback steering)
2026-04-05 00:29:58 -04:00
VinPropane
0ac059fa3b
NS-23: NavigationAgent3D path-follow with server move authority
2026-04-05 00:23:03 -04:00
VinPropane
b043e8ac45
NS-18: InteractionRequest, client prototype, Postgres test UX
...
Server: POST /game/players/{id}/interact, HorizontalReach, prototype registry, DTOs, tests; default spawn (-5,0.9,-5); dev HttpLogging.
Client: terminal, radius glow preview, interaction_request_client (interact/E), main wiring; obstacle moved off center.
Tests: postgres.runsettings, launchSettings, Docker compose auto-start/teardown harness, async-safe init.
Docs: plan AC, E1.M1 snapshot, alignment table, server/client README, code review 2026-04-04.
2026-04-04 20:19:33 -04:00
VinPropane
3882b0e2c6
NS-16: MoveCommand → server PositionState, Godot sync, tests
...
Implement E1.M1 intent → authority: POST /game/players/{id}/move with v1 JSON
MoveCommandRequest (snap + sequence), extend in-memory store and
PositionStateApi. Godot client splits ground_pick and position_authority_client
with thin main.gd; snap_to_server on player.
Tests live under NeonSprawl.Server.Tests/Game/PositionState/ with AAA layout
and MethodName_ShouldExpectedOutcome_WhenScenario naming. Debug builds use
UseAppHost=false so Linux IDEs resolve .NET 10 from a user-local SDK.
Add NS-16 implementation plan, code review doc, godot-client-script-organization
rule, csharp test layout/naming rules, and refresh E1.M1 / alignment docs.
Server and client README updates include move API, prerequisites, and Rider
notes.
Made-with: Cursor
2026-03-30 19:54:17 -04:00
don
64092566a4
fix(client): reliable NS-14 click-to-move without NavigationMesh
...
- Drive movement with horizontal steering + move_and_slide toward click goal
- Remove NavigationRegion3D / NavigationAgent3D; obstacle interaction is slide
- main.gd: raycast to walkable, Player.set_move_goal; viewport camera + mouse
- Scene: explicit physics layers/mask on floor, obstacle, player
- Docs: Godot 4.6 baseline, README + NS-14 plan + tech_stack; Godot .import/.uid
Made-with: Cursor
2026-03-29 22:08:25 -04:00
don
343592541a
feat(client): NS-14 click-to-move with NavigationAgent3D
...
- Main scene: floor, obstacle, nav mesh, camera, CharacterBody3D + agent
- Click-to-move on walkable group; pick mask avoids avatar self-hit
- player.gd drives path following; README and plan AC updated
Made-with: Cursor
2026-03-29 21:19:52 -04:00
don
31bce2b344
Lock client scripting to GDScript; document in README and tech stack
...
- State GDScript as the locked choice for Godot client code
- Summary tables and client README note standard (non-.NET) Godot build
- Server/client contract via Protobuf or JSON spike, not shared C# on client
Made-with: Cursor
2026-03-29 19:36:18 -04:00
don
09a4106543
Update README and documentation to reflect project rebranding to "Neon Sprawl". Revise links to vision plan and adjust references in tech stack and decomposition documents. Enhance README with repository layout and instructions for running the server and client.
2026-03-29 17:23:00 -04:00