Architecture: Rapier 2D in the stack and src/runtime/physics (#145); Development: check total 1045

admin committed 2026-09-18 16:56:48 +02:00
1 parent 87eb3b7f48
commit f062b417a9
2 files changed
+7 -1

No files matched your search

+6
@@ -5,6 +5,11 @@
frames skip the compositor queue, so the UI keeps up with the pointer (click to picture measured
72-77 ms before, 16-18 ms after). The price is possible tearing while things move fast;
`?vsync` falls back to Pixi's own context. A browser without the mode simply ignores it.
- **Rapier 2D** (`@dimforge/rapier2d-compat`, WebAssembly) — the physics engine. Pixi draws only, so
bodies, forces and contacts come from here (#144). It is a chunk of its own (about 790 KB gzip) that
`runtime/physics/engine.ts` loads once in the background after the editor has opened its project,
so the first picture never waits for it; a failed load is reported in the console and not retried.
Outside the engine everything stays in pixels, inside 100 px are one metre (`toMetres`/`toPixels`).
- **Own canvas widget toolkit** (`src/ui/`) — panels, buttons, lists, text/number/color fields,
popups. The only lasting DOM element is a hidden `<input>` used as a keyboard bridge (IME,
mobile keyboard, clipboard) while a canvas text field is focused; *Upload…* adds a short-lived
@@ -77,6 +82,7 @@ src/core/store/ serialize (untrusted JSON → Project), tilemapCells (the
src/core/time.ts the global clock: one scaled step a frame, shared by the world, the particles, the shaders and the animation preview
src/runtime/ World, Entity, System interface, Input tracker, CollisionSystem, AnimationSystem, BehaviorSystem,
Audio (the AudioSink a run plays into — the counterpart of Input on the way out)
src/runtime/physics/ engine (loads Rapier once, reports its state, converts between pixels and metres)
src/ui/ widget toolkit (generic, knows nothing about assets)
src/viewport/ view (transforms), items (what to draw), symbols (how to draw it),
FileLibrary (load once, never retry a failure, tell the listeners) ← TextureLibrary, FontLibrary;
+1 -1
@@ -12,7 +12,7 @@ npm run check # typecheck + lint + format:check + tests, the gate CI runs
# code is lost (tail's is reported), so a red run reads as green
npm run build # writes dist/ and regenerates index.html
./build.sh # the same under `set -o pipefail`, for callers that pipe the output
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1042 editor checks, screenshots in /tmp/gm-e2e-*.png
node tools/seed-e2e.mjs && node tools/e2e.mjs # 1045 editor checks, screenshots in /tmp/gm-e2e-*.png
GM_STEPS=20 node tools/e2e.mjs # or 1-12, or 6,20 — a subset while working on one step
./e2e.sh start [GM_STEPS] # the same run detached, see below
./e2e.sh status # live progress, or the last run's result