feat(playground)!: integrate curated example overhaul, flip bound physics rotation - #776
Merged
Merged
Conversation
added 9 commits
September 23, 2026 22:15
Exoridus
enabled auto-merge (squash)
September 23, 2026 22:58
Bundle ReportChanges will decrease total bundle size by 20.71MB (-37.92%) ⬇️. This is within the configured threshold ✅ Detailed changes
Affected Assets, Files, and Routes:view changes for bundle: exo-iife-Exo-iifeAssets Changed:
view changes for bundle: exo-iife-min-Exo-iifeAssets Changed:
view changes for bundle: exojs-physics-esmAssets Changed:
view changes for bundle: site-server-esmAssets Changed:
App Routes Affected:
view changes for bundle: exo-esm-modules-esmAssets Changed:
view changes for bundle: exo-esm-esmAssets Changed:
view changes for bundle: exo-full-iife-min-Exo-iifeAssets Changed:
view changes for bundle: exo-full-iife-Exo-iifeAssets Changed:
|
❌ 2 Tests Failed:
View the top 2 failed test(s) by shortest run time
To view more test analytics, go to the Test Analytics Dashboard |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Integrates the curated playground example overhaul and closes the correctness gaps an acceptance audit found in it.
Breaking change:
PhysicsBindingandPhysicsWorld.attach()now negate the body angle when writing or reading a node rotation. Bound rotating nodes rendered mirrored against their colliders before; code that compensated for that by hand must drop the compensation. Details under "Engine and package fixes".The work lives on its own branch in a separate worktree rather than in the main checkout, because the main checkout carries unrelated uncommitted dependency work.
Correctness fixes in examples
change()fromonActivatethrewConcurrentSceneNavigationError. Completion is kept as state and the handover runs fromupdate(). The guide section "Treat completion as state" describes the pattern.view.screenToWorldand the sprite bounds, and the V axis is flipped per backend throughuOrientation, so the ripple sits under the pointer on WebGL2 and WebGPU.destroy().atan2(sin, cos), the hub no longer collides with its own arm (collideConnected: false), and the motor torque exceeds the gravity torque, so the arm follows the pointer through ±180° in both directions.app.pixelRatio.rawFrameDeltaMsinstead of the clamped update delta.frameTimeMsreads as 0 insideupdate()because stats reset at frame start, so no HUD shows a CPU time any more; the terrain example timesstreamer.update()directly.Views with a round mask.ButtonwithonClick; Space, Enter and click add an entry, an empty submit validates.curly: alland Prettier across the catalog sources; top-level helper functions are arrow constants declared before the bootstrap.Engine and package fixes
SceneNode.rotationcounter-clockwise, andPhysicsBindingcopied the value without negating it. Every rotating bound node was mirrored against its colliders: a box resting on a ramp showed tilted the opposite way.sync()andsyncInterpolated()now negate the angle, andattach()seeds the body angle as the inverse, so attach followed by a step keeps the node's rotation. Behavior change: code that compensated for the mirrored rotation by hand must drop the compensation. The manual-sync guide snippet negates the angle now.InputSystemlistens forpointerupandpointercancelon the surface only and took no pointer capture, so releasing outside the canvas never ended a press, and every drag built on rawapp.inputpointers stuck. The press now captures the pointer; the browser releases it on up or cancel. With the capture, moves outside the canvas keep arriving (with coordinates beyond the surface), andpointerleavearrives after the release.Extension findings
TileLayerNodestays subscribed until destroyed.collideConnectedand the motor torque were example misuse; the rotation sign was a real package bug (above).Validation
pnpm gates typecheck,lint,sync,site: green.pnpm site:buildand the full example smoke over all 102 examples.Limitations and follow-ups
application-scenes/hud-overlay-scene.ts,showcase/minimap-with-mask.ts,showcase/loading-progress-with-shader.ts. Removing them is a follow-up.PlayabledocumentsSceneNode.rotationas clockwise-positive, and the spatial audio guide repeats it; it is counter-clockwise. The voice cone orientation therefore points mirrored against an equally rotated node.exojs-tiledpasses Tiled's clockwise object rotation straight into node rotation and may have the same mirror; not verified. Both are follow-ups.source-hashportability findings.