Rapier 2D (@dimforge/rapier2d-compat 0.20) comes in as the physics engine: the editor loads it once in the background right after opening a project from its own chunk, so the main bundle grows by 0.19 KB gzip and the first frame does not wait; loadPhysics, physicsStatus and the 100 px = 1 m conversion live in src/runtime/physics/engine.ts, __gm.physics() reports the state, unit tests pin free fall and a box resting on a box, and e2e module 41 pins that Rapier is ready from its own chunk without console noise (#145)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
6d7d0005cf
commit
d02bcca266
9 files changed
+143
-1
No files matched your search
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* The physics engine (Rapier) loads in the editor, in the background after the first project is
|
||||
* open, from a chunk of its own – the editor bundle does not carry it.
|
||||
*/
|
||||
export async function physics(t) {
|
||||
const { check, json, waitUntil, consoleLog } = t;
|
||||
|
||||
await waitUntil(`['ready', 'failed'].includes(__gm.physics().state)`, { timeout: 15000 });
|
||||
const status = await json('__gm.physics()');
|
||||
check(
|
||||
'Rapier loads in the editor without Play',
|
||||
status.state === 'ready' && status.version === '0.20.0',
|
||||
JSON.stringify(status),
|
||||
);
|
||||
const scripts = await json(
|
||||
`performance.getEntriesByType('resource').map((e) => e.name).filter((n) => n.endsWith('.js')).map((n) => n.split('/').pop())`,
|
||||
);
|
||||
check(
|
||||
'it comes from a chunk of its own',
|
||||
scripts.some((name) => /^rapier-.+\.js$/.test(name)),
|
||||
JSON.stringify(scripts),
|
||||
);
|
||||
check(
|
||||
'loading it writes nothing to the console',
|
||||
!consoleLog.some((line) => /\[physics\]|rapier/i.test(line)),
|
||||
consoleLog.filter((line) => /\[physics\]|rapier/i.test(line)).join(' | '),
|
||||
);
|
||||
}
|
||||
@@ -43,6 +43,7 @@ import { nineSlice } from './37-nine-slice.mjs';
|
||||
import { plugins } from './38-plugins.mjs';
|
||||
import { tile } from './39-tile.mjs';
|
||||
import { tilemap } from './40-tilemap.mjs';
|
||||
import { physics } from './41-physics.mjs';
|
||||
|
||||
export const STEPS = [
|
||||
hierarchy,
|
||||
@@ -85,4 +86,5 @@ export const STEPS = [
|
||||
plugins,
|
||||
tile,
|
||||
tilemap,
|
||||
physics,
|
||||
];
|
||||
Reference in new issue
Block a user