Documentation
    Preparing search index...

    Interface PhysicsWorldOptions

    How a world is configured (§20, §21, §32, §33) — the argument to PhysicsSolverAdapter.initialize (§37).

    §20's example also carries solver: "auto". That string-based selection is not here: a world takes a PhysicsSolverAdapter instance (plan P5-5, mirroring how a renderer is injected), and "auto" selection joins the §45 registry backlog. An adapter instance already knows what it is, so nothing is lost and the dependency stays explicit.

    The fixed time step is likewise absent: §10 puts the accumulator in the application clock, and the physics system receives fixedDeltaTime per step rather than owning a second copy of it.

    interface PhysicsWorldOptions {
        determinism?: DeterminismLevel;
        dimension: PhysicsDimension;
        gravity?: Vector3Input;
        localPlane?: LocalPlane;
        sleeping?: Partial<SleepingConfig>;
        solverIterations?: number;
        units?: PhysicsWorldUnits;
    }

    Hierarchy (View Summary)

    Index
    determinism?: DeterminismLevel

    The reproducibility tier the world asks for (§33). Defaults to "same-runtime" (Appendix A). A world may not ask for more than its adapter declares in PhysicsCapabilities.determinism; the world checks that at construction (WP-5.3).

    dimension: PhysicsDimension

    "2d" or "3d" (§21). Required — there is no defensible default.

    gravity?: Vector3Input

    World gravity in m/s². Defaults to (0, -9.81, 0) (Appendix A); a Vector2 widens to z = 0, and a "2d" world rejects a non-zero z.

    localPlane?: LocalPlane

    §21 simulation plane in world space. Bodies with RigidBody.space === "local-plane" author a 2D pose in this plane's frame; feed/publish maps through the plane basis.

    Omitted means origin 0, normal +Z, xAxis +X (the world XY plane — the 2D default). addBody accepts "local-plane" against that default. Screen / viewport / camera / billboard stay refused (§8).

    Engine-side: not forwarded to adapter.initialize.

    sleeping?: Partial<SleepingConfig>

    §32 sleeping thresholds. A partial record is merged over DEFAULT_SLEEPING_CONFIG by resolveSleepingConfig, so { timeThreshold: 2 } changes one field and keeps Appendix A's rest.

    solverIterations?: number

    Constraint-solver iterations per step (§28 "solver iterations") — a world-level accuracy/cost dial, closing the gap recorded at the Phase 6 exit ("§28 solver-iterations feature not exposed anywhere", 2026-08-02; closed 2026-08-04).

    World-level and not per-joint because that is what solvers actually offer: Rapier 0.19.3 exposes exactly World.numSolverIterations (default 4 — more iterations, stiffer joints and stacks, linearly more cost). Omitted means the solver's own default, so existing worlds — and every recorded §33/§34 checksum and replay — are untouched. Setting it is checksum-affecting, exactly like changing gravity: two runs must use the same value to reproduce.

    A positive integer; validated at construction (§85).

    §40 scale factors for authored numbers (§40, §101).

    Structurally the scale half of @fourjs/core's unit-system record (lengthToMeters, massToKilograms); pass that record through. When set, authored gravity / poses / masses are converted into SI for the solver and converted back on publish. Internal solver state is SI. Omitted means today's identity path — existing tests stay bit-identical.

    This field is engine-side: adapter.initialize is handed the resolved SI gravity and never sees the scale record.