Skip to content

33 (G2/G3): the stick reels the world; api.claimInput('sticks'); every level + level tabs in the VR pause menu - #255

Merged
AlexZ005 merged 1 commit into
feat/1.19from
feat/33-untangle-core
Oct 2, 2026
Merged

AlexZ005 merged 1 commit into
feat/1.19from
feat/33-untangle-core

Conversation

@AlexZ005

@AlexZ005 AlexZ005 commented Oct 1, 2026

Copy link
Copy Markdown
Collaborator

Roadmap 33, lane 33-modules — the core hooks Untangle needed (items G2, G3 of lanes/33/user-feedback-2026-10-01b.md). Pairs with the modules PR (untangle 2.4.0). Do not merge from the lane — the integrator merges.

G2 — "stick up/down moves it farther/closer, just as in edit mode for objects"

  • World reel: the one-hand world pan (right grip on scenery/air — Edit, or Interact with play.locomotion.worldGrab) now reels the world on that hand's stick Y with Edit's own object reel (grabStickAdjust): forward pushes it away along the hand's ray, back pulls it in, from the distance to the gripped spot. worldReelStep is pure + exported.
  • api.claimInput('sticks'): both VR sticks' navigation stands down (left move, right snap/smooth turn + teleport) while a module reads the sticks (Untangle's held globe: Y reels, X scales — Edit's mapping). claimInput now answers true for a scope the core knows, so modules feature-detect it.

G3 — the pause menu's Levels page in a headset

  • The VR Levels page drew list.slice(0, 20); Untangle has 30. Now a 6-column grid as tall as fits, pages with arrows beside Back beyond that (≤ 20 levels and no tabs keep the old 5 × 4).
  • addSetting({type: 'choice', onLevels: true, ...}) also draws the choice as tabs above the Levels grid, desktop (role=tablist) and VR (shell:tab hits). Untangle's Board (Globe / 2D board) uses it.
  • The module's own picker being invisible over core's VR panel was a draw-order tie (K2 re-stamps every api.vrPanel object to PANEL_ORDER; three then sorts by bounding-sphere centre). That's fixed in the module, so it works on 1.18 too. A core way to layer a module panel over core's is a DEVX candidate, not in this PR.

Proof (local 5278, this branch)

suite result
vr-world-reel (new e2e) 21/0. CF: red on the feat/1.19 base
vitest shellPanelDraw (new) + gameShell (+3) pass. CF: old slice(0, 20) restored → 2 red
game-shell / vr-game-panel / vr-nav-suppression / vr-grips-by-mode 66/0 · 36/0 · 5/0 · 19/0
vr-laser-panels ALL PASS (SCENES_DIR = preview-1-18 scenes)
svelte-check / vitest / check:storage 333/47 (= baseline) · 387/387 · clean
modules flights on this core untangle-vr2 94/0 (S: left X → Levels → Board tabs → a level), untangle-vr 98/0, untangle 71/0, untangle-drag 54/0

fakeXR controllers don't follow the reference space (a headset's do), so vr-world-reel poses a spec-accurate right hand re-derived on every setReferenceSpace. OWED on a Quest: the reel's feel (3 %/frame at full stick, Edit's rate), the tabs' legibility at 1.2 m.

CHANGELOG lines (for the integrator)

  • 🎯 Push and pull with the stick. Holding the world with one grip, push the stick up to send it away and down to bring it closer, just as with an object in Edit. Games use the same gesture for what you hold (Untangle's globe).
  • 🗺️ Every level in the headset menu, and a game's own choices (Untangle: Globe / 2D board) as tabs above the levels.
  • 🧩 SDK: api.claimInput('sticks') (both VR sticks; returns true when supported); addSetting({..., onLevels: true}).

🤖 Generated with Claude Code

…); every level + level tabs in the VR pause menu

Untangle's Quest report (roadmap 33): "I can make bigger/smaller the globe but cannot use up/down
on stick to move it further/closer ... just as in edit mode for objects", and "main menu do not
show in VR levels to choose and tab to switch between flat/globe".

G2 — the stick reels what you hold, the world included:
- vrControls: the one-hand world PAN (a right grip on scenery/air in Edit, or in Interact when
  play.locomotion.worldGrab) now reels the world on that hand's stick Y with Edit's own object
  reel (grabStickAdjust): forward pushes it away along the hand's ray, back pulls it in, from
  the distance to the gripped spot (panReach). worldReelStep is pure + exported.
- api.claimInput('sticks'): BOTH VR sticks' navigation stands down (left-stick move, right-stick
  snap/smooth turn + teleport) for a module that reads the sticks itself (Untangle's held globe:
  Y reels, X scales). claimInput now answers true for a scope this core knows (feature detect).

G3 — the pause menu's Levels page in a headset:
- shellPanelDraw drew list.slice(0, 20): Untangle's levels 21-30 were unreachable in VR. Now a
  6-column grid as tall as fits (pages with arrows beside Back beyond that); <= 20 levels and no
  tabs keep the old 5 x 4.
- addSetting({..., type: 'choice', onLevels: true}): the choice is also drawn as TABS above the
  Levels grid, desktop (GameShellMenu, role=tablist) and VR (shell:tab hits). Untangle registers
  its Board (Globe / 2D board) that way.

Tests:
- vitest shellPanelDraw (new, 6) + gameShell (+3): CF — the old slice(0, 20) restored: 2 red.
- e2e vr-world-reel (new, 21/0 on 5278): pure step, Edit pan reel push/pull exactly by the reach
  growth, no drift at rest, Interact+worldGrab reel, the 'sticks' claim silencing snap turn and
  the left stick then releasing. fakeXR controllers do not follow the reference space, so the
  suite poses a spec-accurate right hand (re-derived on every setReferenceSpace).
  CF: on the feat/1.19 base the suite is red (no worldReelStep, claimInput answers undefined).
- held: game-shell 66/0, vr-game-panel 36/0, vr-nav-suppression 5/0, vr-grips-by-mode 19/0,
  vr-laser-panels ALL PASS (SCENES_DIR = the preview-1-18 scenes).
- svelte-check 333/47 (= baseline), vitest 387/387, check:storage clean.
- modules flights on this branch: untangle-vr2 94/0 (incl. S: left X -> Levels -> Board tabs ->
  a level, through the panel's press path), untangle-vr 98/0, untangle 71/0, untangle-drag 54/0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@AlexZ005
AlexZ005 merged commit f77a743 into feat/1.19 Oct 2, 2026
4 checks passed
@AlexZ005
AlexZ005 deleted the feat/33-untangle-core branch October 2, 2026 08:43
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.

1 participant