Skip to content

#1441 W5d: grounded reposition + engine-path glide + walk clips + collision-validated clicks#1446

Merged
100yenadmin merged 2 commits into
mainfrom
feat/1441-player-interactivity
Jul 8, 2026
Merged

#1441 W5d: grounded reposition + engine-path glide + walk clips + collision-validated clicks#1446
100yenadmin merged 2 commits into
mainfrom
feat/1441-player-interactivity

Conversation

@100yenadmin

Copy link
Copy Markdown
Member

Closes #1441. Makes the W5c player FEEL like a game — grounded, walking, blocked by props/actors. Single-file change: extensions/renderers/unity/scripts/CombatSurfaceClient.cs.

Root causes → fixes

  1. Float after move — old PlaceActor re-centered X/Z but PRESERVED raw position.y, never applying spawn's FloorY - bb.min.y grounding. → UpdateActor/GroundSnap/GroundedPivot re-ground feet→FloorY via the SAME BakeMesh Measure as SpawnActor, on every reposition + at glide-end.
  2. Teleport — instant reposition → GlideTo tweens cell→cell at GlideSpeed following the engine-confirmed lastPath polyline (straight-line fallback when absent); rings/AO follow every frame.
  3. No animsGlideTo plays a walk clip during travel (own walk/run → humanoid DonorWalk retarget → glide-only fallback), PoseIdle at rest.
  4. No collisionHandleClick pre-validates against impassable (engine grid_impassable) + occupied (token cells), red FlashReject ring instead of a doomed POST. UX pre-filter only.

Invariant preserved

Renderer animates ONLY engine-confirmed cells — client never moves an actor before the /move response; a poll on the same cell is a no-op so it never interrupts an in-flight glide.

Engine-rejection verdict (investigate-only, issue 5)

The engine ALREADY rejects moves onto occupied/impassable cells: move_to_coordscombat_grid.shortest_path returns None when goal in occupied or goal in impassable (combat_grid.py:243-244) → move_blocked, nothing mutated. Unity sends no explicit path, so routing always runs in seed_gfx_combat. No engine issue filed (trusted the conclusive code path; no curl smoke needed).

Height reconciliation

Named consts ActorHeightFoe=4.2/ActorHeightChar=3.2 — the paint_combat_v1 #1418-calibrated baked-scene source. Flagged: paint_combat_replay_v1.cs still carries a stale pre-#1418 char height of 5.0 (editor reel, out of scope).

Validation (GEX44)

  • Compile: 0 errors; CombatSurfaceClient compiled + attached.
  • Editor sanity: grounded actors + rings, painterly camp scene (qa/evidence/1441/).
  • Rebuild: macOS Player (Universal)Succeeded, 0 errors → WorldOSPlayer.app.zip scp'd to ~/worldos-session-notes/w5a-build/ (overwrite).
  • Orchestrator + owner re-playtest locally (live engine drive).

Refs #1436 #1322 #1438 #1440.

Eva added 2 commits July 9, 2026 01:52
…ck pre-validation

- PlaceActor -> UpdateActor: reposition now re-grounds feet->FloorY via the SAME BakeMesh
  Measure as SpawnActor (float fix; old path preserved raw Y). First-sight snap, changed-cell
  glide, same-cell no-op (poll never interrupts an in-flight glide).
- GlideTo: cell->cell tween at GlideSpeed following the engine-confirmed lastPath polyline
  (straight-line fallback when absent); rings/AO follow every frame; walk clip during glide
  (own walk/run -> humanoid donor-walk retarget -> glide-only fallback), idle at rest.
- Click pre-validation: reject clicks on impassable/occupied cells with a red ring flash
  (UX pre-filter only; engine stays authoritative — it already rejects illegal cells).
- Reconcile actor heights to named consts (ActorHeightFoe 4.2 / ActorHeightChar 3.2, the
  paint_combat_v1 #1418-calibrated source); flag replay_v1's stale 5.0.
- Parse impassable+lastPath via the runtime Json parser (poll + move-response paths).

Refs #1441 #1436 #1322 (PRs #1438/#1440).
…scp notes

Box validation: 0-error compile (component compiled + attached), editor sanity screenshot
(grounded actors + rings, painterly camp scene), Universal build Succeeded (0 errors), zip
scp'd to ~/worldos-session-notes/w5a-build/WorldOSPlayer.app.zip (overwrite).
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You’ve reached a temporary PR review limit under our Fair Usage Limits Policy.

Your recent review volume is higher than typical usage, so adaptive limits are currently applied.

Next review available in: 35 seconds

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 04bb93d5-22f8-4426-9cbe-e9fd330e648f

📥 Commits

Reviewing files that changed from the base of the PR and between 26aa07f and b51ffd4.

⛔ Files ignored due to path filters (1)
  • qa/evidence/1441/1441_editor_sanity.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • extensions/renderers/unity/scripts/CombatSurfaceClient.cs
  • qa/evidence/1441/NOTES.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/1441-player-interactivity

Comment @coderabbitai help to get the list of available commands.

@evaos-code-review-bot

evaos-code-review-bot Bot commented Jul 8, 2026

Copy link
Copy Markdown

evaOS review status: closed or merged before review

PR: #1446 - #1441 W5d: grounded reposition + engine-path glide + walk clips + collision-validated clicks
Head: b51ffd4ac2d2d9ae2a2462ed0780fe41d9f6cdde
Updated: 2026-07-08T19:01:24.960Z

evaOS review stopped because the PR closed or merged before this queued head could be reviewed.

Automation note: agents should wait for this comment to reach completed, stale_head, closed_or_merged_before_review, skipped, or failed before treating evaOS review as settled for this head. provider_deferred means evaOS still intends to retry.

PR URL: #1446

Details: state=closed

@100yenadmin 100yenadmin merged commit 2a70ca5 into main Jul 8, 2026
23 of 32 checks passed
@100yenadmin 100yenadmin deleted the feat/1441-player-interactivity branch July 8, 2026 19:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[W5d] Player interactivity: grounded reposition, glide + walk anims, collision-validated clicks — owner playtest ground truth

1 participant