@pibbl/core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +19 -0
- package/README.md +76 -0
- package/THIRD_PARTY_NOTICES.txt +205 -0
- package/dist/features/particles/index.d.ts +7 -0
- package/dist/features/particles/index.js +26 -0
- package/dist/features/particles/index.js.map +7 -0
- package/dist/features/particles/index.mjs +1 -0
- package/dist/features/particles/lib/canvas/birth-ledger.d.ts +69 -0
- package/dist/features/particles/lib/canvas/birth-ledger.js +752 -0
- package/dist/features/particles/lib/canvas/birth-ledger.js.map +7 -0
- package/dist/features/particles/lib/canvas/component.d.ts +14 -0
- package/dist/features/particles/lib/canvas/component.js +249 -0
- package/dist/features/particles/lib/canvas/component.js.map +7 -0
- package/dist/features/particles/lib/canvas/executor.d.ts +31 -0
- package/dist/features/particles/lib/canvas/executor.js +537 -0
- package/dist/features/particles/lib/canvas/executor.js.map +7 -0
- package/dist/features/particles/lib/canvas/primitive.d.ts +14 -0
- package/dist/features/particles/lib/canvas/primitive.js +50 -0
- package/dist/features/particles/lib/canvas/primitive.js.map +7 -0
- package/dist/features/particles/lib/canvas/raster-cache.d.ts +13 -0
- package/dist/features/particles/lib/canvas/raster-cache.js +106 -0
- package/dist/features/particles/lib/canvas/raster-cache.js.map +7 -0
- package/dist/features/particles/lib/color.d.ts +7 -0
- package/dist/features/particles/lib/color.js +159 -0
- package/dist/features/particles/lib/color.js.map +7 -0
- package/dist/features/particles/lib/compiler.d.ts +134 -0
- package/dist/features/particles/lib/compiler.js +443 -0
- package/dist/features/particles/lib/compiler.js.map +7 -0
- package/dist/features/particles/lib/curve.d.ts +19 -0
- package/dist/features/particles/lib/curve.js +129 -0
- package/dist/features/particles/lib/curve.js.map +7 -0
- package/dist/features/particles/lib/definition-records.d.ts +58 -0
- package/dist/features/particles/lib/definition-records.js +500 -0
- package/dist/features/particles/lib/definition-records.js.map +7 -0
- package/dist/features/particles/lib/definition.d.ts +18 -0
- package/dist/features/particles/lib/definition.js +602 -0
- package/dist/features/particles/lib/definition.js.map +7 -0
- package/dist/features/particles/lib/emission.d.ts +54 -0
- package/dist/features/particles/lib/emission.js +184 -0
- package/dist/features/particles/lib/emission.js.map +7 -0
- package/dist/features/particles/lib/flow/field.d.ts +81 -0
- package/dist/features/particles/lib/flow/field.js +585 -0
- package/dist/features/particles/lib/flow/field.js.map +7 -0
- package/dist/features/particles/lib/flow/hook.d.ts +158 -0
- package/dist/features/particles/lib/flow/hook.js +215 -0
- package/dist/features/particles/lib/flow/hook.js.map +7 -0
- package/dist/features/particles/lib/flow/population.d.ts +25 -0
- package/dist/features/particles/lib/flow/population.js +104 -0
- package/dist/features/particles/lib/flow/population.js.map +7 -0
- package/dist/features/particles/lib/particle.d.ts +113 -0
- package/dist/features/particles/lib/particle.js +192 -0
- package/dist/features/particles/lib/particle.js.map +7 -0
- package/dist/features/particles/lib/random.d.ts +16 -0
- package/dist/features/particles/lib/random.js +61 -0
- package/dist/features/particles/lib/random.js.map +7 -0
- package/dist/features/particles/lib/sample.d.ts +32 -0
- package/dist/features/particles/lib/sample.js +397 -0
- package/dist/features/particles/lib/sample.js.map +7 -0
- package/dist/features/particles/lib/signal-inputs.d.ts +6 -0
- package/dist/features/particles/lib/signal-inputs.js +41 -0
- package/dist/features/particles/lib/signal-inputs.js.map +7 -0
- package/dist/features/particles/lib/system/binding.d.ts +59 -0
- package/dist/features/particles/lib/system/binding.js +122 -0
- package/dist/features/particles/lib/system/binding.js.map +7 -0
- package/dist/features/particles/lib/system/controller.d.ts +58 -0
- package/dist/features/particles/lib/system/controller.js +1446 -0
- package/dist/features/particles/lib/system/controller.js.map +7 -0
- package/dist/features/particles/lib/system/hook.d.ts +13 -0
- package/dist/features/particles/lib/system/hook.js +52 -0
- package/dist/features/particles/lib/system/hook.js.map +7 -0
- package/dist/features/particles/lib/system/ownership.d.ts +26 -0
- package/dist/features/particles/lib/system/ownership.js +128 -0
- package/dist/features/particles/lib/system/ownership.js.map +7 -0
- package/dist/features/particles/lib/types.d.ts +983 -0
- package/dist/features/physics/2d-geometry.d.ts +216 -0
- package/dist/features/physics/2d-geometry.js +59 -0
- package/dist/features/physics/2d-geometry.js.map +7 -0
- package/dist/features/physics/2d-geometry.mjs +1 -0
- package/dist/features/physics/2d-testing.d.ts +80 -0
- package/dist/features/physics/2d-testing.js +141 -0
- package/dist/features/physics/2d-testing.js.map +7 -0
- package/dist/features/physics/2d-testing.mjs +1 -0
- package/dist/features/physics/2d.d.ts +165 -0
- package/dist/features/physics/2d.js +119 -0
- package/dist/features/physics/2d.js.map +7 -0
- package/dist/features/physics/2d.mjs +1 -0
- package/dist/features/physics/lib/2d/canvas/components.d.ts +46 -0
- package/dist/features/physics/lib/2d/canvas/components.js +212 -0
- package/dist/features/physics/lib/2d/canvas/components.js.map +7 -0
- package/dist/features/physics/lib/2d/canvas/custom.d.ts +24 -0
- package/dist/features/physics/lib/2d/canvas/custom.js +45 -0
- package/dist/features/physics/lib/2d/canvas/custom.js.map +7 -0
- package/dist/features/physics/lib/2d/canvas/debug.d.ts +23 -0
- package/dist/features/physics/lib/2d/canvas/debug.js +53 -0
- package/dist/features/physics/lib/2d/canvas/debug.js.map +7 -0
- package/dist/features/physics/lib/2d/canvas/inference.d.ts +9 -0
- package/dist/features/physics/lib/2d/canvas/inference.js +704 -0
- package/dist/features/physics/lib/2d/canvas/inference.js.map +7 -0
- package/dist/features/physics/lib/2d/canvas/presentation.d.ts +11 -0
- package/dist/features/physics/lib/2d/canvas/presentation.js +169 -0
- package/dist/features/physics/lib/2d/canvas/presentation.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/analytic.d.ts +15 -0
- package/dist/features/physics/lib/2d/collision/analytic.js +151 -0
- package/dist/features/physics/lib/2d/collision/analytic.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/casts.d.ts +37 -0
- package/dist/features/physics/lib/2d/collision/casts.js +631 -0
- package/dist/features/physics/lib/2d/collision/casts.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/epa.d.ts +21 -0
- package/dist/features/physics/lib/2d/collision/epa.js +102 -0
- package/dist/features/physics/lib/2d/collision/epa.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/gjk.d.ts +28 -0
- package/dist/features/physics/lib/2d/collision/gjk.js +233 -0
- package/dist/features/physics/lib/2d/collision/gjk.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/manifold.d.ts +35 -0
- package/dist/features/physics/lib/2d/collision/manifold.js +238 -0
- package/dist/features/physics/lib/2d/collision/manifold.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/pairs.d.ts +10 -0
- package/dist/features/physics/lib/2d/collision/pairs.js +285 -0
- package/dist/features/physics/lib/2d/collision/pairs.js.map +7 -0
- package/dist/features/physics/lib/2d/collision/support.d.ts +20 -0
- package/dist/features/physics/lib/2d/collision/support.js +155 -0
- package/dist/features/physics/lib/2d/collision/support.js.map +7 -0
- package/dist/features/physics/lib/2d/inspection-types.d.ts +159 -0
- package/dist/features/physics/lib/2d/math.d.ts +27 -0
- package/dist/features/physics/lib/2d/math.js +314 -0
- package/dist/features/physics/lib/2d/math.js.map +7 -0
- package/dist/features/physics/lib/2d/numeric-policy.d.ts +24 -0
- package/dist/features/physics/lib/2d/numeric-policy.js +51 -0
- package/dist/features/physics/lib/2d/numeric-policy.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/body-handle.d.ts +148 -0
- package/dist/features/physics/lib/2d/runtime/body-handle.js +305 -0
- package/dist/features/physics/lib/2d/runtime/body-handle.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/context.d.ts +9 -0
- package/dist/features/physics/lib/2d/runtime/context.js +57 -0
- package/dist/features/physics/lib/2d/runtime/context.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/controller.d.ts +106 -0
- package/dist/features/physics/lib/2d/runtime/controller.js +1317 -0
- package/dist/features/physics/lib/2d/runtime/controller.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/descriptors.d.ts +153 -0
- package/dist/features/physics/lib/2d/runtime/descriptors.js +526 -0
- package/dist/features/physics/lib/2d/runtime/descriptors.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/events.d.ts +56 -0
- package/dist/features/physics/lib/2d/runtime/events.js +153 -0
- package/dist/features/physics/lib/2d/runtime/events.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/obstacles.d.ts +22 -0
- package/dist/features/physics/lib/2d/runtime/obstacles.js +192 -0
- package/dist/features/physics/lib/2d/runtime/obstacles.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/ownership.d.ts +41 -0
- package/dist/features/physics/lib/2d/runtime/ownership.js +46 -0
- package/dist/features/physics/lib/2d/runtime/ownership.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/trace.d.ts +32 -0
- package/dist/features/physics/lib/2d/runtime/trace.js +22 -0
- package/dist/features/physics/lib/2d/runtime/trace.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/world-component.d.ts +18 -0
- package/dist/features/physics/lib/2d/runtime/world-component.js +41 -0
- package/dist/features/physics/lib/2d/runtime/world-component.js.map +7 -0
- package/dist/features/physics/lib/2d/runtime/world-props.d.ts +16 -0
- package/dist/features/physics/lib/2d/shape-records.d.ts +60 -0
- package/dist/features/physics/lib/2d/shape-records.js +26 -0
- package/dist/features/physics/lib/2d/shape-records.js.map +7 -0
- package/dist/features/physics/lib/2d/shapes.d.ts +191 -0
- package/dist/features/physics/lib/2d/shapes.js +543 -0
- package/dist/features/physics/lib/2d/shapes.js.map +7 -0
- package/dist/features/physics/lib/2d/types.d.ts +713 -0
- package/dist/features/physics/lib/2d/types.js +1 -0
- package/dist/features/physics/lib/2d/types.js.map +7 -0
- package/dist/features/physics/lib/2d/world/broad-phase.d.ts +77 -0
- package/dist/features/physics/lib/2d/world/broad-phase.js +762 -0
- package/dist/features/physics/lib/2d/world/broad-phase.js.map +7 -0
- package/dist/features/physics/lib/2d/world/ccd.d.ts +19 -0
- package/dist/features/physics/lib/2d/world/ccd.js +265 -0
- package/dist/features/physics/lib/2d/world/ccd.js.map +7 -0
- package/dist/features/physics/lib/2d/world/contact-cache.d.ts +81 -0
- package/dist/features/physics/lib/2d/world/contact-cache.js +497 -0
- package/dist/features/physics/lib/2d/world/contact-cache.js.map +7 -0
- package/dist/features/physics/lib/2d/world/integrator.d.ts +11 -0
- package/dist/features/physics/lib/2d/world/integrator.js +99 -0
- package/dist/features/physics/lib/2d/world/integrator.js.map +7 -0
- package/dist/features/physics/lib/2d/world/queries.d.ts +62 -0
- package/dist/features/physics/lib/2d/world/queries.js +424 -0
- package/dist/features/physics/lib/2d/world/queries.js.map +7 -0
- package/dist/features/physics/lib/2d/world/rapier-engine.js +7054 -0
- package/dist/features/physics/lib/2d/world/rapier-engine.js.map +7 -0
- package/dist/features/physics/lib/2d/world/rapier.d.ts +50 -0
- package/dist/features/physics/lib/2d/world/rapier.js +655 -0
- package/dist/features/physics/lib/2d/world/rapier.js.map +7 -0
- package/dist/features/physics/lib/2d/world/solver.d.ts +58 -0
- package/dist/features/physics/lib/2d/world/solver.js +660 -0
- package/dist/features/physics/lib/2d/world/solver.js.map +7 -0
- package/dist/features/physics/lib/2d/world/storage.d.ts +96 -0
- package/dist/features/physics/lib/2d/world/storage.js +371 -0
- package/dist/features/physics/lib/2d/world/storage.js.map +7 -0
- package/dist/features/physics/lib/2d/world/world.d.ts +265 -0
- package/dist/features/physics/lib/2d/world/world.js +1713 -0
- package/dist/features/physics/lib/2d/world/world.js.map +7 -0
- package/dist/features/physics/lib/shared/signal-inputs.d.ts +5 -0
- package/dist/features/physics/lib/shared/signal-inputs.js +20 -0
- package/dist/features/physics/lib/shared/signal-inputs.js.map +7 -0
- package/dist/features/physics/lib/shared/validation.d.ts +5 -0
- package/dist/features/physics/lib/shared/validation.js +48 -0
- package/dist/features/physics/lib/shared/validation.js.map +7 -0
- package/dist/features/sprites/formats/aseprite.js +23 -0
- package/dist/features/sprites/formats/aseprite.js.map +7 -0
- package/dist/features/sprites/formats/aseprite.mjs +1 -0
- package/dist/features/sprites/formats/texture-packer.js +14 -0
- package/dist/features/sprites/formats/texture-packer.js.map +7 -0
- package/dist/features/sprites/formats/texture-packer.mjs +1 -0
- package/dist/features/sprites/index.js +9 -0
- package/dist/features/sprites/index.js.map +7 -0
- package/dist/features/sprites/index.mjs +1 -0
- package/dist/features/sprites/loader.js +63 -0
- package/dist/features/sprites/loader.js.map +7 -0
- package/dist/features/sprites/model.js +64 -0
- package/dist/features/sprites/model.js.map +7 -0
- package/dist/features/sprites/sprite.js +31 -0
- package/dist/features/sprites/sprite.js.map +7 -0
- package/dist/features/textures/index.d.ts +22 -0
- package/dist/features/textures/index.js +31 -0
- package/dist/features/textures/index.js.map +7 -0
- package/dist/features/textures/index.mjs +1 -0
- package/dist/features/textures/lib/definitions.d.ts +117 -0
- package/dist/features/textures/lib/definitions.js +179 -0
- package/dist/features/textures/lib/definitions.js.map +7 -0
- package/dist/features/textures/lib/electric-boundary.d.ts +3 -0
- package/dist/features/textures/lib/electric-boundary.js +11 -0
- package/dist/features/textures/lib/electric-boundary.js.map +7 -0
- package/dist/features/textures/lib/electric-shared.d.ts +69 -0
- package/dist/features/textures/lib/electric-shared.js +43 -0
- package/dist/features/textures/lib/electric-shared.js.map +7 -0
- package/dist/features/textures/lib/electric-sources.d.ts +50 -0
- package/dist/features/textures/lib/electric-sources.js +43 -0
- package/dist/features/textures/lib/electric-sources.js.map +7 -0
- package/dist/features/textures/lib/lightning.d.ts +72 -0
- package/dist/features/textures/lib/lightning.js +139 -0
- package/dist/features/textures/lib/lightning.js.map +7 -0
- package/dist/features/textures/lib/material-field.d.ts +12 -0
- package/dist/features/textures/lib/material-field.js +31 -0
- package/dist/features/textures/lib/material-field.js.map +7 -0
- package/dist/features/textures/lib/palette.d.ts +45 -0
- package/dist/features/textures/lib/palette.js +52 -0
- package/dist/features/textures/lib/palette.js.map +7 -0
- package/dist/features/textures/lib/presentation.d.ts +54 -0
- package/dist/features/textures/lib/presentation.js +83 -0
- package/dist/features/textures/lib/presentation.js.map +7 -0
- package/dist/features/textures/lib/procedural-texture.d.ts +44 -0
- package/dist/features/textures/lib/procedural-texture.js +110 -0
- package/dist/features/textures/lib/procedural-texture.js.map +7 -0
- package/dist/features/textures/lib/rain-drops.d.ts +96 -0
- package/dist/features/textures/lib/rain-drops.js +322 -0
- package/dist/features/textures/lib/rain-drops.js.map +7 -0
- package/dist/features/textures/lib/reaction-diffusion.d.ts +67 -0
- package/dist/features/textures/lib/reaction-diffusion.js +210 -0
- package/dist/features/textures/lib/reaction-diffusion.js.map +7 -0
- package/dist/features/textures/lib/simulation.d.ts +16 -0
- package/dist/features/textures/lib/simulation.js +85 -0
- package/dist/features/textures/lib/simulation.js.map +7 -0
- package/dist/features/textures/lib/tendrils.d.ts +57 -0
- package/dist/features/textures/lib/tendrils.js +216 -0
- package/dist/features/textures/lib/tendrils.js.map +7 -0
- package/dist/features/textures/lib/wasm/cellular-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/cellular-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/cellular-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/electric.d.ts +88 -0
- package/dist/features/textures/lib/wasm/electric.js +299 -0
- package/dist/features/textures/lib/wasm/electric.js.map +7 -0
- package/dist/features/textures/lib/wasm/ink-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/ink-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/ink-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/lightning-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/lightning-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/lightning-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/marble-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/marble-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/marble-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/memory.d.ts +31 -0
- package/dist/features/textures/lib/wasm/memory.js +103 -0
- package/dist/features/textures/lib/wasm/memory.js.map +7 -0
- package/dist/features/textures/lib/wasm/paper-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/paper-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/paper-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/tendrils-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/tendrils-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/tendrils-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/water-surface-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/water-surface-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/water-surface-bytes.js.map +7 -0
- package/dist/features/textures/lib/wasm/water-waves-bytes.d.ts +1 -0
- package/dist/features/textures/lib/wasm/water-waves-bytes.js +5 -0
- package/dist/features/textures/lib/wasm/water-waves-bytes.js.map +7 -0
- package/dist/features/textures/lib/water-surface.d.ts +92 -0
- package/dist/features/textures/lib/water-surface.js +378 -0
- package/dist/features/textures/lib/water-surface.js.map +7 -0
- package/dist/features/textures/lib/water-waves.d.ts +60 -0
- package/dist/features/textures/lib/water-waves.js +154 -0
- package/dist/features/textures/lib/water-waves.js.map +7 -0
- package/dist/features/viz/index.d.ts +28 -0
- package/dist/features/viz/index.js +45 -0
- package/dist/features/viz/index.js.map +7 -0
- package/dist/features/viz/index.mjs +1 -0
- package/dist/features/viz/lib/anchored-layout.d.ts +104 -0
- package/dist/features/viz/lib/anchored-layout.js +166 -0
- package/dist/features/viz/lib/anchored-layout.js.map +7 -0
- package/dist/features/viz/lib/axis.d.ts +10 -0
- package/dist/features/viz/lib/axis.js +116 -0
- package/dist/features/viz/lib/axis.js.map +7 -0
- package/dist/features/viz/lib/band-scale.d.ts +3 -0
- package/dist/features/viz/lib/band-scale.js +57 -0
- package/dist/features/viz/lib/band-scale.js.map +7 -0
- package/dist/features/viz/lib/bar-fill.d.ts +16 -0
- package/dist/features/viz/lib/bar-fill.js +53 -0
- package/dist/features/viz/lib/bar-fill.js.map +7 -0
- package/dist/features/viz/lib/bar-series.d.ts +150 -0
- package/dist/features/viz/lib/bar-series.js +152 -0
- package/dist/features/viz/lib/bar-series.js.map +7 -0
- package/dist/features/viz/lib/hover-card.d.ts +92 -0
- package/dist/features/viz/lib/hover-card.js +146 -0
- package/dist/features/viz/lib/hover-card.js.map +7 -0
- package/dist/features/viz/lib/hover-data.d.ts +12 -0
- package/dist/features/viz/lib/hover-data.js +50 -0
- package/dist/features/viz/lib/hover-data.js.map +7 -0
- package/dist/features/viz/lib/hover-placement.d.ts +46 -0
- package/dist/features/viz/lib/hover-placement.js +51 -0
- package/dist/features/viz/lib/hover-placement.js.map +7 -0
- package/dist/features/viz/lib/hover-queries.d.ts +60 -0
- package/dist/features/viz/lib/hover-queries.js +185 -0
- package/dist/features/viz/lib/hover-queries.js.map +7 -0
- package/dist/features/viz/lib/hover-types.d.ts +277 -0
- package/dist/features/viz/lib/layout-pie.d.ts +13 -0
- package/dist/features/viz/lib/layout-pie.js +159 -0
- package/dist/features/viz/lib/layout-pie.js.map +7 -0
- package/dist/features/viz/lib/line-series.d.ts +11 -0
- package/dist/features/viz/lib/line-series.js +89 -0
- package/dist/features/viz/lib/line-series.js.map +7 -0
- package/dist/features/viz/lib/linear-scale.d.ts +3 -0
- package/dist/features/viz/lib/linear-scale.js +70 -0
- package/dist/features/viz/lib/linear-scale.js.map +7 -0
- package/dist/features/viz/lib/nearest.d.ts +82 -0
- package/dist/features/viz/lib/nearest.js +51 -0
- package/dist/features/viz/lib/nearest.js.map +7 -0
- package/dist/features/viz/lib/paint.d.ts +2 -0
- package/dist/features/viz/lib/paint.js +17 -0
- package/dist/features/viz/lib/paint.js.map +7 -0
- package/dist/features/viz/lib/pie-layout.d.ts +31 -0
- package/dist/features/viz/lib/pie-layout.js +324 -0
- package/dist/features/viz/lib/pie-layout.js.map +7 -0
- package/dist/features/viz/lib/pie-slices.d.ts +51 -0
- package/dist/features/viz/lib/pie-slices.js +50 -0
- package/dist/features/viz/lib/pie-slices.js.map +7 -0
- package/dist/features/viz/lib/pie-types.d.ts +215 -0
- package/dist/features/viz/lib/plot-series.d.ts +13 -0
- package/dist/features/viz/lib/plot-series.js +53 -0
- package/dist/features/viz/lib/plot-series.js.map +7 -0
- package/dist/features/viz/lib/plot-types.d.ts +63 -0
- package/dist/features/viz/lib/point-data.d.ts +5 -0
- package/dist/features/viz/lib/point-data.js +17 -0
- package/dist/features/viz/lib/point-data.js.map +7 -0
- package/dist/features/viz/lib/point-geometry.d.ts +2 -0
- package/dist/features/viz/lib/point-geometry.js +24 -0
- package/dist/features/viz/lib/point-geometry.js.map +7 -0
- package/dist/features/viz/lib/point-series.d.ts +11 -0
- package/dist/features/viz/lib/point-series.js +118 -0
- package/dist/features/viz/lib/point-series.js.map +7 -0
- package/dist/features/viz/lib/point-types.d.ts +94 -0
- package/dist/features/viz/lib/scale-adjust.d.ts +11 -0
- package/dist/features/viz/lib/scale-adjust.js +25 -0
- package/dist/features/viz/lib/scale-adjust.js.map +7 -0
- package/dist/features/viz/lib/scale-context.d.ts +8 -0
- package/dist/features/viz/lib/scale-context.js +61 -0
- package/dist/features/viz/lib/scale-context.js.map +7 -0
- package/dist/features/viz/lib/scale.d.ts +11 -0
- package/dist/features/viz/lib/scale.js +80 -0
- package/dist/features/viz/lib/scale.js.map +7 -0
- package/dist/features/viz/lib/types.d.ts +414 -0
- package/dist/features/viz/lib/use-scale.d.ts +20 -0
- package/dist/features/viz/lib/use-scale.js +10 -0
- package/dist/features/viz/lib/use-scale.js.map +7 -0
- package/dist/filters/displacement-gpu.d.ts +38 -0
- package/dist/filters/displacement-gpu.js +243 -0
- package/dist/filters/displacement-gpu.js.map +7 -0
- package/dist/filters/displacement-math.d.ts +5 -0
- package/dist/filters/displacement-math.js +22 -0
- package/dist/filters/displacement-math.js.map +7 -0
- package/dist/filters/displacement.d.ts +13 -0
- package/dist/filters/displacement.js +65 -0
- package/dist/filters/displacement.js.map +7 -0
- package/dist/filters/filter-executor.d.ts +21 -0
- package/dist/filters/filter-executor.js +120 -0
- package/dist/filters/filter-executor.js.map +7 -0
- package/dist/filters/native-canvas-filter.d.ts +4 -0
- package/dist/filters/native-canvas-filter.js +105 -0
- package/dist/filters/native-canvas-filter.js.map +7 -0
- package/dist/filters/native-color.d.ts +2 -0
- package/dist/filters/native-color.js +200 -0
- package/dist/filters/native-color.js.map +7 -0
- package/dist/filters/native-operations.d.ts +8 -0
- package/dist/filters/native-operations.js +7 -0
- package/dist/filters/native-operations.js.map +7 -0
- package/dist/filters/native.d.ts +113 -0
- package/dist/filters/native.js +115 -0
- package/dist/filters/native.js.map +7 -0
- package/dist/filters/reflected-light.d.ts +12 -0
- package/dist/filters/reflected-light.js +93 -0
- package/dist/filters/reflected-light.js.map +7 -0
- package/dist/filters/reflection-gpu.d.ts +58 -0
- package/dist/filters/reflection-gpu.js +266 -0
- package/dist/filters/reflection-gpu.js.map +7 -0
- package/dist/filters/render-displacement-boundary.d.ts +12 -0
- package/dist/filters/render-displacement-boundary.js +116 -0
- package/dist/filters/render-displacement-boundary.js.map +7 -0
- package/dist/filters/render-reflection-boundary.d.ts +15 -0
- package/dist/filters/render-reflection-boundary.js +127 -0
- package/dist/filters/render-reflection-boundary.js.map +7 -0
- package/dist/filters.d.ts +5 -0
- package/dist/filters.js +29 -0
- package/dist/filters.js.map +7 -0
- package/dist/filters.mjs +1 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.js +300 -0
- package/dist/index.js.map +7 -0
- package/dist/index.mjs +1 -0
- package/dist/internal.d.ts +160 -0
- package/dist/internal.js +320 -0
- package/dist/internal.js.map +7 -0
- package/dist/internal.mjs +1 -0
- package/dist/jsx-dev-runtime.d.ts +35 -0
- package/dist/jsx-dev-runtime.js +6 -0
- package/dist/jsx-dev-runtime.js.map +7 -0
- package/dist/jsx-dev-runtime.mjs +1 -0
- package/dist/jsx-runtime.d.ts +35 -0
- package/dist/jsx-runtime.js +7 -0
- package/dist/jsx-runtime.js.map +7 -0
- package/dist/jsx-runtime.mjs +1 -0
- package/dist/lib/animation/definition.d.ts +140 -0
- package/dist/lib/animation/definition.js +605 -0
- package/dist/lib/animation/definition.js.map +7 -0
- package/dist/lib/animation/easing.d.ts +55 -0
- package/dist/lib/animation/easing.js +112 -0
- package/dist/lib/animation/easing.js.map +7 -0
- package/dist/lib/animation/evaluate.d.ts +118 -0
- package/dist/lib/animation/evaluate.js +2398 -0
- package/dist/lib/animation/evaluate.js.map +7 -0
- package/dist/lib/animation/playback.d.ts +30 -0
- package/dist/lib/animation/playback.js +932 -0
- package/dist/lib/animation/playback.js.map +7 -0
- package/dist/lib/animation/program.d.ts +145 -0
- package/dist/lib/animation/program.js +741 -0
- package/dist/lib/animation/program.js.map +7 -0
- package/dist/lib/animation/spring.d.ts +30 -0
- package/dist/lib/animation/spring.js +324 -0
- package/dist/lib/animation/spring.js.map +7 -0
- package/dist/lib/animation/types.d.ts +418 -0
- package/dist/lib/animation/writer-leases.d.ts +47 -0
- package/dist/lib/animation/writer-leases.js +314 -0
- package/dist/lib/animation/writer-leases.js.map +7 -0
- package/dist/lib/backend/canvas-2d-backend.d.ts +4 -0
- package/dist/lib/backend/canvas-2d-backend.js +97 -0
- package/dist/lib/backend/canvas-2d-backend.js.map +7 -0
- package/dist/lib/backend/types.d.ts +309 -0
- package/dist/lib/backend/types.js +26 -0
- package/dist/lib/backend/types.js.map +7 -0
- package/dist/lib/components/arc-geometry.d.ts +4 -0
- package/dist/lib/components/arc-geometry.js +46 -0
- package/dist/lib/components/arc-geometry.js.map +7 -0
- package/dist/lib/components/arc.d.ts +55 -0
- package/dist/lib/components/arc.js +91 -0
- package/dist/lib/components/arc.js.map +7 -0
- package/dist/lib/components/circle.d.ts +49 -0
- package/dist/lib/components/circle.js +46 -0
- package/dist/lib/components/circle.js.map +7 -0
- package/dist/lib/components/clip.d.ts +43 -0
- package/dist/lib/components/clip.js +24 -0
- package/dist/lib/components/clip.js.map +7 -0
- package/dist/lib/components/ellipse.d.ts +53 -0
- package/dist/lib/components/ellipse.js +59 -0
- package/dist/lib/components/ellipse.js.map +7 -0
- package/dist/lib/components/g.d.ts +56 -0
- package/dist/lib/components/g.js +24 -0
- package/dist/lib/components/g.js.map +7 -0
- package/dist/lib/components/horizontal-line.d.ts +56 -0
- package/dist/lib/components/horizontal-line.js +71 -0
- package/dist/lib/components/horizontal-line.js.map +7 -0
- package/dist/lib/components/html-box.d.ts +16 -0
- package/dist/lib/components/html-box.js +57 -0
- package/dist/lib/components/html-box.js.map +7 -0
- package/dist/lib/components/img.d.ts +24 -0
- package/dist/lib/components/img.js +150 -0
- package/dist/lib/components/img.js.map +7 -0
- package/dist/lib/components/layer-node-equality.d.ts +65 -0
- package/dist/lib/components/layer-node-equality.js +91 -0
- package/dist/lib/components/layer-node-equality.js.map +7 -0
- package/dist/lib/components/layer.d.ts +34 -0
- package/dist/lib/components/layer.js +172 -0
- package/dist/lib/components/layer.js.map +7 -0
- package/dist/lib/components/line.d.ts +51 -0
- package/dist/lib/components/line.js +76 -0
- package/dist/lib/components/line.js.map +7 -0
- package/dist/lib/components/path.d.ts +28 -0
- package/dist/lib/components/path.js +47 -0
- package/dist/lib/components/path.js.map +7 -0
- package/dist/lib/components/polygon.d.ts +45 -0
- package/dist/lib/components/polygon.js +93 -0
- package/dist/lib/components/polygon.js.map +7 -0
- package/dist/lib/components/rect.d.ts +24 -0
- package/dist/lib/components/rect.js +83 -0
- package/dist/lib/components/rect.js.map +7 -0
- package/dist/lib/components/regular-polygon.d.ts +102 -0
- package/dist/lib/components/regular-polygon.js +112 -0
- package/dist/lib/components/regular-polygon.js.map +7 -0
- package/dist/lib/components/rounded-corner-style.d.ts +7 -0
- package/dist/lib/components/rounded-corner-style.js +40 -0
- package/dist/lib/components/rounded-corner-style.js.map +7 -0
- package/dist/lib/components/shape-style.d.ts +7 -0
- package/dist/lib/components/shape-style.js +52 -0
- package/dist/lib/components/shape-style.js.map +7 -0
- package/dist/lib/components/star.d.ts +56 -0
- package/dist/lib/components/star.js +98 -0
- package/dist/lib/components/star.js.map +7 -0
- package/dist/lib/components/structural-events.d.ts +10 -0
- package/dist/lib/components/structural-events.js +8 -0
- package/dist/lib/components/structural-events.js.map +7 -0
- package/dist/lib/components/svg-path.d.ts +23 -0
- package/dist/lib/components/svg-path.js +25 -0
- package/dist/lib/components/svg-path.js.map +7 -0
- package/dist/lib/components/text-layout.d.ts +31 -0
- package/dist/lib/components/text-layout.js +139 -0
- package/dist/lib/components/text-layout.js.map +7 -0
- package/dist/lib/components/text.d.ts +29 -0
- package/dist/lib/components/text.js +174 -0
- package/dist/lib/components/text.js.map +7 -0
- package/dist/lib/components/vertical-line.d.ts +57 -0
- package/dist/lib/components/vertical-line.js +71 -0
- package/dist/lib/components/vertical-line.js.map +7 -0
- package/dist/lib/components/wedge.d.ts +55 -0
- package/dist/lib/components/wedge.js +93 -0
- package/dist/lib/components/wedge.js.map +7 -0
- package/dist/lib/define-primitive.d.ts +82 -0
- package/dist/lib/define-primitive.js +85 -0
- package/dist/lib/define-primitive.js.map +7 -0
- package/dist/lib/development.d.ts +2 -0
- package/dist/lib/development.js +5 -0
- package/dist/lib/development.js.map +7 -0
- package/dist/lib/element/children.d.ts +16 -0
- package/dist/lib/element/children.js +333 -0
- package/dist/lib/element/children.js.map +7 -0
- package/dist/lib/element/create-element.d.ts +34 -0
- package/dist/lib/element/create-element.js +75 -0
- package/dist/lib/element/create-element.js.map +7 -0
- package/dist/lib/element/fragment.d.ts +15 -0
- package/dist/lib/element/fragment.js +11 -0
- package/dist/lib/element/fragment.js.map +7 -0
- package/dist/lib/element/jsx-runtime.d.ts +48 -0
- package/dist/lib/element/jsx-runtime.js +16 -0
- package/dist/lib/element/jsx-runtime.js.map +7 -0
- package/dist/lib/element/metadata.d.ts +96 -0
- package/dist/lib/element/metadata.js +160 -0
- package/dist/lib/element/metadata.js.map +7 -0
- package/dist/lib/element/resolve-primitive-inputs.d.ts +12 -0
- package/dist/lib/element/resolve-primitive-inputs.js +83 -0
- package/dist/lib/element/resolve-primitive-inputs.js.map +7 -0
- package/dist/lib/element/types.d.ts +123 -0
- package/dist/lib/element-enhancers.d.ts +134 -0
- package/dist/lib/element-enhancers.js +193 -0
- package/dist/lib/element-enhancers.js.map +7 -0
- package/dist/lib/events/adapters/clipboard.d.ts +9 -0
- package/dist/lib/events/adapters/clipboard.js +23 -0
- package/dist/lib/events/adapters/clipboard.js.map +7 -0
- package/dist/lib/events/adapters/drag.d.ts +12 -0
- package/dist/lib/events/adapters/drag.js +29 -0
- package/dist/lib/events/adapters/drag.js.map +7 -0
- package/dist/lib/events/adapters/editing.d.ts +15 -0
- package/dist/lib/events/adapters/editing.js +41 -0
- package/dist/lib/events/adapters/editing.js.map +7 -0
- package/dist/lib/events/adapters/keyboard-focus.d.ts +12 -0
- package/dist/lib/events/adapters/keyboard-focus.js +36 -0
- package/dist/lib/events/adapters/keyboard-focus.js.map +7 -0
- package/dist/lib/events/adapters/mouse.d.ts +17 -0
- package/dist/lib/events/adapters/mouse.js +32 -0
- package/dist/lib/events/adapters/mouse.js.map +7 -0
- package/dist/lib/events/adapters/pointer.d.ts +19 -0
- package/dist/lib/events/adapters/pointer.js +40 -0
- package/dist/lib/events/adapters/pointer.js.map +7 -0
- package/dist/lib/events/adapters/touch.d.ts +16 -0
- package/dist/lib/events/adapters/touch.js +36 -0
- package/dist/lib/events/adapters/touch.js.map +7 -0
- package/dist/lib/events/adapters/wheel.d.ts +10 -0
- package/dist/lib/events/adapters/wheel.js +16 -0
- package/dist/lib/events/adapters/wheel.js.map +7 -0
- package/dist/lib/events/boundary-transitions.d.ts +9 -0
- package/dist/lib/events/boundary-transitions.js +16 -0
- package/dist/lib/events/boundary-transitions.js.map +7 -0
- package/dist/lib/events/dispatch.d.ts +21 -0
- package/dist/lib/events/dispatch.js +1078 -0
- package/dist/lib/events/dispatch.js.map +7 -0
- package/dist/lib/events/event-definitions.d.ts +23 -0
- package/dist/lib/events/event-definitions.js +74 -0
- package/dist/lib/events/event-definitions.js.map +7 -0
- package/dist/lib/events/event-facade.d.ts +19 -0
- package/dist/lib/events/event-facade.js +188 -0
- package/dist/lib/events/event-facade.js.map +7 -0
- package/dist/lib/events/event-path.d.ts +3 -0
- package/dist/lib/events/event-path.js +43 -0
- package/dist/lib/events/event-path.js.map +7 -0
- package/dist/lib/events/hit-test.d.ts +13 -0
- package/dist/lib/events/hit-test.js +135 -0
- package/dist/lib/events/hit-test.js.map +7 -0
- package/dist/lib/events/native-listener-hub.d.ts +10 -0
- package/dist/lib/events/native-listener-hub.js +72 -0
- package/dist/lib/events/native-listener-hub.js.map +7 -0
- package/dist/lib/events/paint-entry.d.ts +66 -0
- package/dist/lib/events/paint-entry.js +30 -0
- package/dist/lib/events/paint-entry.js.map +7 -0
- package/dist/lib/events/pointer-capture.d.ts +23 -0
- package/dist/lib/events/pointer-capture.js +339 -0
- package/dist/lib/events/pointer-capture.js.map +7 -0
- package/dist/lib/events/propagation.d.ts +7 -0
- package/dist/lib/events/propagation.js +56 -0
- package/dist/lib/events/propagation.js.map +7 -0
- package/dist/lib/events/registrations.d.ts +120 -0
- package/dist/lib/events/registrations.js +397 -0
- package/dist/lib/events/registrations.js.map +7 -0
- package/dist/lib/events/resolver-input.d.ts +25 -0
- package/dist/lib/events/resolver-input.js +62 -0
- package/dist/lib/events/resolver-input.js.map +7 -0
- package/dist/lib/events/types.d.ts +596 -0
- package/dist/lib/execute-render.d.ts +9 -0
- package/dist/lib/execute-render.js +195 -0
- package/dist/lib/execute-render.js.map +7 -0
- package/dist/lib/filter/canvas-state.d.ts +2 -0
- package/dist/lib/filter/canvas-state.js +31 -0
- package/dist/lib/filter/canvas-state.js.map +7 -0
- package/dist/lib/filter/filter-region.d.ts +33 -0
- package/dist/lib/filter/filter-region.js +291 -0
- package/dist/lib/filter/filter-region.js.map +7 -0
- package/dist/lib/filter/filter-surface-pool.d.ts +38 -0
- package/dist/lib/filter/filter-surface-pool.js +252 -0
- package/dist/lib/filter/filter-surface-pool.js.map +7 -0
- package/dist/lib/filter/render-filter-boundary.d.ts +14 -0
- package/dist/lib/filter/render-filter-boundary.js +211 -0
- package/dist/lib/filter/render-filter-boundary.js.map +7 -0
- package/dist/lib/focus/directional-navigation.d.ts +12 -0
- package/dist/lib/focus/directional-navigation.js +86 -0
- package/dist/lib/focus/directional-navigation.js.map +7 -0
- package/dist/lib/focus/dom-focus-host.d.ts +13 -0
- package/dist/lib/focus/dom-focus-host.js +352 -0
- package/dist/lib/focus/dom-focus-host.js.map +7 -0
- package/dist/lib/focus/dom-tab-stops.d.ts +3 -0
- package/dist/lib/focus/dom-tab-stops.js +71 -0
- package/dist/lib/focus/dom-tab-stops.js.map +7 -0
- package/dist/lib/focus/focus-events.d.ts +4 -0
- package/dist/lib/focus/focus-events.js +78 -0
- package/dist/lib/focus/focus-events.js.map +7 -0
- package/dist/lib/focus/focus-manager.d.ts +121 -0
- package/dist/lib/focus/focus-manager.js +1131 -0
- package/dist/lib/focus/focus-manager.js.map +7 -0
- package/dist/lib/focus/geometry.d.ts +4 -0
- package/dist/lib/focus/geometry.js +64 -0
- package/dist/lib/focus/geometry.js.map +7 -0
- package/dist/lib/focus/html-focus-region.d.ts +27 -0
- package/dist/lib/focus/keyboard-defaults.d.ts +7 -0
- package/dist/lib/focus/keyboard-defaults.js +110 -0
- package/dist/lib/focus/keyboard-defaults.js.map +7 -0
- package/dist/lib/focus/policy-components.d.ts +45 -0
- package/dist/lib/focus/policy-components.js +94 -0
- package/dist/lib/focus/policy-components.js.map +7 -0
- package/dist/lib/focus/types.d.ts +37 -0
- package/dist/lib/focus/types.js +7 -0
- package/dist/lib/focus/types.js.map +7 -0
- package/dist/lib/geometry/circle.d.ts +22 -0
- package/dist/lib/geometry/circle.js +13 -0
- package/dist/lib/geometry/circle.js.map +7 -0
- package/dist/lib/geometry/circular-sweep.d.ts +54 -0
- package/dist/lib/geometry/circular-sweep.js +95 -0
- package/dist/lib/geometry/circular-sweep.js.map +7 -0
- package/dist/lib/geometry/ellipse.d.ts +26 -0
- package/dist/lib/geometry/ellipse.js +17 -0
- package/dist/lib/geometry/ellipse.js.map +7 -0
- package/dist/lib/geometry/line.d.ts +20 -0
- package/dist/lib/geometry/line.js +15 -0
- package/dist/lib/geometry/line.js.map +7 -0
- package/dist/lib/geometry/path-arc.d.ts +25 -0
- package/dist/lib/geometry/path-arc.js +57 -0
- package/dist/lib/geometry/path-arc.js.map +7 -0
- package/dist/lib/geometry/path-bend-guide.d.ts +31 -0
- package/dist/lib/geometry/path-bend-guide.js +282 -0
- package/dist/lib/geometry/path-bend-guide.js.map +7 -0
- package/dist/lib/geometry/path-bend-spans.d.ts +31 -0
- package/dist/lib/geometry/path-bend-spans.js +109 -0
- package/dist/lib/geometry/path-bend-spans.js.map +7 -0
- package/dist/lib/geometry/path-bending.d.ts +90 -0
- package/dist/lib/geometry/path-bending.js +202 -0
- package/dist/lib/geometry/path-bending.js.map +7 -0
- package/dist/lib/geometry/path-conversion.d.ts +19 -0
- package/dist/lib/geometry/path-conversion.js +114 -0
- package/dist/lib/geometry/path-conversion.js.map +7 -0
- package/dist/lib/geometry/path-geometry.d.ts +218 -0
- package/dist/lib/geometry/path-geometry.js +557 -0
- package/dist/lib/geometry/path-geometry.js.map +7 -0
- package/dist/lib/geometry/path-radial.d.ts +15 -0
- package/dist/lib/geometry/path-radial.js +107 -0
- package/dist/lib/geometry/path-radial.js.map +7 -0
- package/dist/lib/geometry/path-transforms.d.ts +233 -0
- package/dist/lib/geometry/path-transforms.js +478 -0
- package/dist/lib/geometry/path-transforms.js.map +7 -0
- package/dist/lib/geometry/path-utilities.d.ts +78 -0
- package/dist/lib/geometry/path-utilities.js +341 -0
- package/dist/lib/geometry/path-utilities.js.map +7 -0
- package/dist/lib/geometry/path-wang.d.ts +18 -0
- package/dist/lib/geometry/path-wang.js +136 -0
- package/dist/lib/geometry/path-wang.js.map +7 -0
- package/dist/lib/geometry/path-warp-bezier.d.ts +17 -0
- package/dist/lib/geometry/path-warp-bezier.js +109 -0
- package/dist/lib/geometry/path-warp-bezier.js.map +7 -0
- package/dist/lib/geometry/path-warp.d.ts +27 -0
- package/dist/lib/geometry/path-warp.js +165 -0
- package/dist/lib/geometry/path-warp.js.map +7 -0
- package/dist/lib/geometry/polygon.d.ts +21 -0
- package/dist/lib/geometry/polygon.js +12 -0
- package/dist/lib/geometry/polygon.js.map +7 -0
- package/dist/lib/geometry/rectangle.d.ts +38 -0
- package/dist/lib/geometry/rectangle.js +22 -0
- package/dist/lib/geometry/rectangle.js.map +7 -0
- package/dist/lib/geometry/regular-polygon.d.ts +88 -0
- package/dist/lib/geometry/regular-polygon.js +67 -0
- package/dist/lib/geometry/regular-polygon.js.map +7 -0
- package/dist/lib/geometry/resolve-path.d.ts +4 -0
- package/dist/lib/geometry/resolve-path.js +16 -0
- package/dist/lib/geometry/resolve-path.js.map +7 -0
- package/dist/lib/geometry/rounded-corners.d.ts +28 -0
- package/dist/lib/geometry/rounded-corners.js +118 -0
- package/dist/lib/geometry/rounded-corners.js.map +7 -0
- package/dist/lib/geometry/star.d.ts +39 -0
- package/dist/lib/geometry/star.js +90 -0
- package/dist/lib/geometry/star.js.map +7 -0
- package/dist/lib/geometry/svg-path.d.ts +21 -0
- package/dist/lib/geometry/svg-path.js +7 -0
- package/dist/lib/geometry/svg-path.js.map +7 -0
- package/dist/lib/geometry/transform-bend.d.ts +46 -0
- package/dist/lib/geometry/transform-bend.js +219 -0
- package/dist/lib/geometry/transform-bend.js.map +7 -0
- package/dist/lib/geometry/transform-guide.d.ts +57 -0
- package/dist/lib/geometry/transform-guide.js +157 -0
- package/dist/lib/geometry/transform-guide.js.map +7 -0
- package/dist/lib/geometry/transform-math.d.ts +21 -0
- package/dist/lib/geometry/transform-math.js +91 -0
- package/dist/lib/geometry/transform-math.js.map +7 -0
- package/dist/lib/geometry/transform-mesh.d.ts +39 -0
- package/dist/lib/geometry/transform-mesh.js +129 -0
- package/dist/lib/geometry/transform-mesh.js.map +7 -0
- package/dist/lib/geometry/validation.d.ts +6 -0
- package/dist/lib/geometry/validation.js +42 -0
- package/dist/lib/geometry/validation.js.map +7 -0
- package/dist/lib/global-state.d.ts +63 -0
- package/dist/lib/global-state.js +176 -0
- package/dist/lib/global-state.js.map +7 -0
- package/dist/lib/hooks/hook-slot.d.ts +30 -0
- package/dist/lib/hooks/hook-slot.js +66 -0
- package/dist/lib/hooks/hook-slot.js.map +7 -0
- package/dist/lib/hooks/use-animated-value.d.ts +24 -0
- package/dist/lib/hooks/use-animated-value.js +169 -0
- package/dist/lib/hooks/use-animated-value.js.map +7 -0
- package/dist/lib/hooks/use-canvas-context.d.ts +10 -0
- package/dist/lib/hooks/use-canvas-context.js +13 -0
- package/dist/lib/hooks/use-canvas-context.js.map +7 -0
- package/dist/lib/hooks/use-computed.d.ts +13 -0
- package/dist/lib/hooks/use-computed.js +91 -0
- package/dist/lib/hooks/use-computed.js.map +7 -0
- package/dist/lib/hooks/use-const.d.ts +10 -0
- package/dist/lib/hooks/use-const.js +15 -0
- package/dist/lib/hooks/use-const.js.map +7 -0
- package/dist/lib/hooks/use-cursor.d.ts +16 -0
- package/dist/lib/hooks/use-cursor.js +51 -0
- package/dist/lib/hooks/use-cursor.js.map +7 -0
- package/dist/lib/hooks/use-event-listener.d.ts +10 -0
- package/dist/lib/hooks/use-event-listener.js +24 -0
- package/dist/lib/hooks/use-event-listener.js.map +7 -0
- package/dist/lib/hooks/use-event-target.d.ts +14 -0
- package/dist/lib/hooks/use-event-target.js +30 -0
- package/dist/lib/hooks/use-event-target.js.map +7 -0
- package/dist/lib/hooks/use-layout-box.d.ts +9 -0
- package/dist/lib/hooks/use-layout-box.js +8 -0
- package/dist/lib/hooks/use-layout-box.js.map +7 -0
- package/dist/lib/hooks/use-line-path.d.ts +14 -0
- package/dist/lib/hooks/use-line-path.js +13 -0
- package/dist/lib/hooks/use-line-path.js.map +7 -0
- package/dist/lib/hooks/use-paint-target.d.ts +3 -0
- package/dist/lib/hooks/use-paint-target.js +34 -0
- package/dist/lib/hooks/use-paint-target.js.map +7 -0
- package/dist/lib/hooks/use-playback.d.ts +21 -0
- package/dist/lib/hooks/use-playback.js +87 -0
- package/dist/lib/hooks/use-playback.js.map +7 -0
- package/dist/lib/hooks/use-reaction.d.ts +19 -0
- package/dist/lib/hooks/use-reaction.js +245 -0
- package/dist/lib/hooks/use-reaction.js.map +7 -0
- package/dist/lib/hooks/use-rect-path.d.ts +20 -0
- package/dist/lib/hooks/use-rect-path.js +25 -0
- package/dist/lib/hooks/use-rect-path.js.map +7 -0
- package/dist/lib/hooks/use-ref.d.ts +17 -0
- package/dist/lib/hooks/use-ref.js +8 -0
- package/dist/lib/hooks/use-ref.js.map +7 -0
- package/dist/lib/hooks/use-region.d.ts +11 -0
- package/dist/lib/hooks/use-region.js +34 -0
- package/dist/lib/hooks/use-region.js.map +7 -0
- package/dist/lib/hooks/use-signal.d.ts +12 -0
- package/dist/lib/hooks/use-signal.js +12 -0
- package/dist/lib/hooks/use-signal.js.map +7 -0
- package/dist/lib/hooks/use-svg-path.d.ts +11 -0
- package/dist/lib/hooks/use-svg-path.js +13 -0
- package/dist/lib/hooks/use-svg-path.js.map +7 -0
- package/dist/lib/hooks/use-value-memo-slot.d.ts +12 -0
- package/dist/lib/hooks/use-value-memo-slot.js +45 -0
- package/dist/lib/hooks/use-value-memo-slot.js.map +7 -0
- package/dist/lib/hooks/use-visibility-transition.d.ts +103 -0
- package/dist/lib/hooks/use-visibility-transition.js +195 -0
- package/dist/lib/hooks/use-visibility-transition.js.map +7 -0
- package/dist/lib/html/html-service.d.ts +30 -0
- package/dist/lib/html/html-service.js +281 -0
- package/dist/lib/html/html-service.js.map +7 -0
- package/dist/lib/html/overlay-config.d.ts +3 -0
- package/dist/lib/html/overlay-config.js +37 -0
- package/dist/lib/html/overlay-config.js.map +7 -0
- package/dist/lib/html/portable-clips.d.ts +4 -0
- package/dist/lib/html/portable-clips.js +20 -0
- package/dist/lib/html/portable-clips.js.map +7 -0
- package/dist/lib/html/types.d.ts +110 -0
- package/dist/lib/layout/absolute.d.ts +57 -0
- package/dist/lib/layout/absolute.js +348 -0
- package/dist/lib/layout/absolute.js.map +7 -0
- package/dist/lib/layout/box.d.ts +19 -0
- package/dist/lib/layout/box.js +209 -0
- package/dist/lib/layout/box.js.map +7 -0
- package/dist/lib/layout/context.d.ts +13 -0
- package/dist/lib/layout/context.js +42 -0
- package/dist/lib/layout/context.js.map +7 -0
- package/dist/lib/layout/diagnostics.d.ts +15 -0
- package/dist/lib/layout/diagnostics.js +30 -0
- package/dist/lib/layout/diagnostics.js.map +7 -0
- package/dist/lib/layout/flex.d.ts +64 -0
- package/dist/lib/layout/flex.js +803 -0
- package/dist/lib/layout/flex.js.map +7 -0
- package/dist/lib/layout/flow.d.ts +53 -0
- package/dist/lib/layout/flow.js +400 -0
- package/dist/lib/layout/flow.js.map +7 -0
- package/dist/lib/layout/grid.d.ts +64 -0
- package/dist/lib/layout/grid.js +597 -0
- package/dist/lib/layout/grid.js.map +7 -0
- package/dist/lib/layout/measure.d.ts +19 -0
- package/dist/lib/layout/measure.js +144 -0
- package/dist/lib/layout/measure.js.map +7 -0
- package/dist/lib/layout/overlay.d.ts +42 -0
- package/dist/lib/layout/overlay.js +151 -0
- package/dist/lib/layout/overlay.js.map +7 -0
- package/dist/lib/layout/place-child.d.ts +12 -0
- package/dist/lib/layout/place-child.js +72 -0
- package/dist/lib/layout/place-child.js.map +7 -0
- package/dist/lib/layout/positioning-diagnostics.d.ts +3 -0
- package/dist/lib/layout/positioning-diagnostics.js +15 -0
- package/dist/lib/layout/positioning-diagnostics.js.map +7 -0
- package/dist/lib/layout/types.d.ts +78 -0
- package/dist/lib/manipulation/controller-types.d.ts +299 -0
- package/dist/lib/manipulation/controller.d.ts +57 -0
- package/dist/lib/manipulation/controller.js +464 -0
- package/dist/lib/manipulation/controller.js.map +7 -0
- package/dist/lib/manipulation/coordinates.d.ts +9 -0
- package/dist/lib/manipulation/coordinates.js +55 -0
- package/dist/lib/manipulation/coordinates.js.map +7 -0
- package/dist/lib/manipulation/degrees.d.ts +10 -0
- package/dist/lib/manipulation/degrees.js +9 -0
- package/dist/lib/manipulation/degrees.js.map +7 -0
- package/dist/lib/manipulation/frame.d.ts +24 -0
- package/dist/lib/manipulation/frame.js +101 -0
- package/dist/lib/manipulation/frame.js.map +7 -0
- package/dist/lib/manipulation/geometry.d.ts +4 -0
- package/dist/lib/manipulation/geometry.js +26 -0
- package/dist/lib/manipulation/geometry.js.map +7 -0
- package/dist/lib/manipulation/handles.d.ts +298 -0
- package/dist/lib/manipulation/handles.js +598 -0
- package/dist/lib/manipulation/handles.js.map +7 -0
- package/dist/lib/manipulation/manipulable.d.ts +65 -0
- package/dist/lib/manipulation/manipulable.js +47 -0
- package/dist/lib/manipulation/manipulable.js.map +7 -0
- package/dist/lib/manipulation/ownership.d.ts +15 -0
- package/dist/lib/manipulation/ownership.js +80 -0
- package/dist/lib/manipulation/ownership.js.map +7 -0
- package/dist/lib/manipulation/snap.d.ts +6 -0
- package/dist/lib/manipulation/snap.js +40 -0
- package/dist/lib/manipulation/snap.js.map +7 -0
- package/dist/lib/manipulation/solve.d.ts +2 -0
- package/dist/lib/manipulation/solve.js +563 -0
- package/dist/lib/manipulation/solve.js.map +7 -0
- package/dist/lib/manipulation/types.d.ts +178 -0
- package/dist/lib/mount-pibbl.d.ts +25 -0
- package/dist/lib/mount-pibbl.js +278 -0
- package/dist/lib/mount-pibbl.js.map +7 -0
- package/dist/lib/optional-services.d.ts +8 -0
- package/dist/lib/optional-services.js +11 -0
- package/dist/lib/optional-services.js.map +7 -0
- package/dist/lib/pibbl.d.ts +17 -0
- package/dist/lib/pibbl.js +21 -0
- package/dist/lib/pibbl.js.map +7 -0
- package/dist/lib/primitive-presentation.d.ts +24 -0
- package/dist/lib/primitive-presentation.js +102 -0
- package/dist/lib/primitive-presentation.js.map +7 -0
- package/dist/lib/render-layer/controller.d.ts +67 -0
- package/dist/lib/render-layer/controller.js +603 -0
- package/dist/lib/render-layer/controller.js.map +7 -0
- package/dist/lib/render-layer/define-render-layer.d.ts +17 -0
- package/dist/lib/render-layer/define-render-layer.js +90 -0
- package/dist/lib/render-layer/define-render-layer.js.map +7 -0
- package/dist/lib/render-layer/types.d.ts +315 -0
- package/dist/lib/render-target.d.ts +27 -0
- package/dist/lib/render-target.js +118 -0
- package/dist/lib/render-target.js.map +7 -0
- package/dist/lib/render-transaction.d.ts +10 -0
- package/dist/lib/render-transaction.js +46 -0
- package/dist/lib/render-transaction.js.map +7 -0
- package/dist/lib/render.d.ts +3 -0
- package/dist/lib/render.js +385 -0
- package/dist/lib/render.js.map +7 -0
- package/dist/lib/scheduler/realm-scheduler.d.ts +52 -0
- package/dist/lib/scheduler/realm-scheduler.js +964 -0
- package/dist/lib/scheduler/realm-scheduler.js.map +7 -0
- package/dist/lib/scheduler/renderer-participant.d.ts +257 -0
- package/dist/lib/scheduler/renderer-participant.js +216 -0
- package/dist/lib/scheduler/renderer-participant.js.map +7 -0
- package/dist/lib/scheduler/simulation-participant.d.ts +103 -0
- package/dist/lib/scheduler/simulation-participant.js +229 -0
- package/dist/lib/scheduler/simulation-participant.js.map +7 -0
- package/dist/lib/scheduler/testing.d.ts +56 -0
- package/dist/lib/scheduler/testing.js +71 -0
- package/dist/lib/scheduler/testing.js.map +7 -0
- package/dist/lib/scheduler/types.d.ts +103 -0
- package/dist/lib/signals/edge.d.ts +44 -0
- package/dist/lib/signals/edge.js +245 -0
- package/dist/lib/signals/edge.js.map +7 -0
- package/dist/lib/signals/graph.d.ts +220 -0
- package/dist/lib/signals/graph.js +1035 -0
- package/dist/lib/signals/graph.js.map +7 -0
- package/dist/lib/signals/input-provision.d.ts +3 -0
- package/dist/lib/signals/input-provision.js +67 -0
- package/dist/lib/signals/input-provision.js.map +7 -0
- package/dist/lib/signals/render-consumer.d.ts +21 -0
- package/dist/lib/signals/render-consumer.js +218 -0
- package/dist/lib/signals/render-consumer.js.map +7 -0
- package/dist/lib/signals/resolve-signal-value.d.ts +10 -0
- package/dist/lib/signals/resolve-signal-value.js +17 -0
- package/dist/lib/signals/resolve-signal-value.js.map +7 -0
- package/dist/lib/signals/types.d.ts +80 -0
- package/dist/lib/style/diagnostics.d.ts +83 -0
- package/dist/lib/style/diagnostics.js +63 -0
- package/dist/lib/style/diagnostics.js.map +7 -0
- package/dist/lib/style/empty-style.d.ts +3 -0
- package/dist/lib/style/empty-style.js +5 -0
- package/dist/lib/style/empty-style.js.map +7 -0
- package/dist/lib/style/filter-types.d.ts +243 -0
- package/dist/lib/style/filter-types.js +5 -0
- package/dist/lib/style/filter-types.js.map +7 -0
- package/dist/lib/style/filter.d.ts +7 -0
- package/dist/lib/style/filter.js +50 -0
- package/dist/lib/style/filter.js.map +7 -0
- package/dist/lib/style/normalize.d.ts +18 -0
- package/dist/lib/style/normalize.js +50 -0
- package/dist/lib/style/normalize.js.map +7 -0
- package/dist/lib/style/positioning.d.ts +32 -0
- package/dist/lib/style/positioning.js +81 -0
- package/dist/lib/style/positioning.js.map +7 -0
- package/dist/lib/style/resolve-built-in.d.ts +6 -0
- package/dist/lib/style/resolve-built-in.js +58 -0
- package/dist/lib/style/resolve-built-in.js.map +7 -0
- package/dist/lib/style/resolve-dispatch.d.ts +20 -0
- package/dist/lib/style/resolve-dispatch.js +167 -0
- package/dist/lib/style/resolve-dispatch.js.map +7 -0
- package/dist/lib/style/resolve-length.d.ts +16 -0
- package/dist/lib/style/resolve-length.js +54 -0
- package/dist/lib/style/resolve-length.js.map +7 -0
- package/dist/lib/style/responsive.d.ts +31 -0
- package/dist/lib/style/responsive.js +172 -0
- package/dist/lib/style/responsive.js.map +7 -0
- package/dist/lib/style/types.d.ts +338 -0
- package/dist/lib/surface/resolve-surface.d.ts +4 -0
- package/dist/lib/surface/resolve-surface.js +184 -0
- package/dist/lib/surface/resolve-surface.js.map +7 -0
- package/dist/lib/surface/root-surface.d.ts +7 -0
- package/dist/lib/surface/root-surface.js +171 -0
- package/dist/lib/surface/root-surface.js.map +7 -0
- package/dist/lib/surface/transform.d.ts +4 -0
- package/dist/lib/surface/transform.js +16 -0
- package/dist/lib/surface/transform.js.map +7 -0
- package/dist/lib/surface/types.d.ts +132 -0
- package/dist/lib/teardowns.d.ts +14 -0
- package/dist/lib/teardowns.js +50 -0
- package/dist/lib/teardowns.js.map +7 -0
- package/dist/lib/textures/texture-protocol.d.ts +124 -0
- package/dist/lib/textures/texture-protocol.js +40 -0
- package/dist/lib/textures/texture-protocol.js.map +7 -0
- package/dist/lib/textures/texture.d.ts +170 -0
- package/dist/lib/textures/texture.js +385 -0
- package/dist/lib/textures/texture.js.map +7 -0
- package/dist/lib/transitions/bifrost.d.ts +47 -0
- package/dist/lib/transitions/bifrost.js +91 -0
- package/dist/lib/transitions/bifrost.js.map +7 -0
- package/dist/lib/transitions/binding.d.ts +14 -0
- package/dist/lib/transitions/binding.js +35 -0
- package/dist/lib/transitions/binding.js.map +7 -0
- package/dist/lib/transitions/capture.d.ts +21 -0
- package/dist/lib/transitions/capture.js +91 -0
- package/dist/lib/transitions/capture.js.map +7 -0
- package/dist/lib/transitions/common.d.ts +130 -0
- package/dist/lib/transitions/common.js +57 -0
- package/dist/lib/transitions/common.js.map +7 -0
- package/dist/lib/transitions/define-transition.d.ts +64 -0
- package/dist/lib/transitions/define-transition.js +31 -0
- package/dist/lib/transitions/define-transition.js.map +7 -0
- package/dist/lib/transitions/embers-physics.d.ts +114 -0
- package/dist/lib/transitions/embers-physics.js +161 -0
- package/dist/lib/transitions/embers-physics.js.map +7 -0
- package/dist/lib/transitions/embers.d.ts +67 -0
- package/dist/lib/transitions/embers.js +196 -0
- package/dist/lib/transitions/embers.js.map +7 -0
- package/dist/lib/transitions/fade.d.ts +41 -0
- package/dist/lib/transitions/fade.js +31 -0
- package/dist/lib/transitions/fade.js.map +7 -0
- package/dist/lib/transitions/hologram.d.ts +47 -0
- package/dist/lib/transitions/hologram.js +94 -0
- package/dist/lib/transitions/hologram.js.map +7 -0
- package/dist/lib/transitions/wasm/bifrost-bytes.d.ts +1 -0
- package/dist/lib/transitions/wasm/bifrost-bytes.js +5 -0
- package/dist/lib/transitions/wasm/bifrost-bytes.js.map +7 -0
- package/dist/lib/transitions/wasm/bifrost-kernel.d.ts +1 -0
- package/dist/lib/transitions/wasm/bifrost-kernel.js +27 -0
- package/dist/lib/transitions/wasm/bifrost-kernel.js.map +7 -0
- package/dist/lib/transitions/wasm/embers-bytes.d.ts +1 -0
- package/dist/lib/transitions/wasm/embers-bytes.js +5 -0
- package/dist/lib/transitions/wasm/embers-bytes.js.map +7 -0
- package/dist/lib/transitions/wasm/hologram-bytes.d.ts +1 -0
- package/dist/lib/transitions/wasm/hologram-bytes.js +5 -0
- package/dist/lib/transitions/wasm/hologram-bytes.js.map +7 -0
- package/dist/lib/transitions/wasm/kernel.d.ts +7 -0
- package/dist/lib/transitions/wasm/kernel.js +26 -0
- package/dist/lib/transitions/wasm/kernel.js.map +7 -0
- package/dist/lib/types.d.ts +570 -0
- package/dist/lib/update.d.ts +8 -0
- package/dist/lib/update.js +20 -0
- package/dist/lib/update.js.map +7 -0
- package/dist/lib/util/get-2d-context.d.ts +2 -0
- package/dist/lib/util/get-2d-context.js +11 -0
- package/dist/lib/util/get-2d-context.js.map +7 -0
- package/dist/lib/util/get-mouse-coordinates.d.ts +2 -0
- package/dist/lib/util/get-mouse-coordinates.js +32 -0
- package/dist/lib/util/get-mouse-coordinates.js.map +7 -0
- package/dist/lib/util/is-hit.d.ts +11 -0
- package/dist/lib/util/is-hit.js +52 -0
- package/dist/lib/util/is-hit.js.map +7 -0
- package/dist/lib/util/is-transparent.d.ts +1 -0
- package/dist/lib/util/is-transparent.js +8 -0
- package/dist/lib/util/is-transparent.js.map +7 -0
- package/dist/lib/util/pixel-grid-adjustments.d.ts +8 -0
- package/dist/lib/util/pixel-grid-adjustments.js +28 -0
- package/dist/lib/util/pixel-grid-adjustments.js.map +7 -0
- package/dist/lib/util/push-clipping-path.d.ts +6 -0
- package/dist/lib/util/push-clipping-path.js +28 -0
- package/dist/lib/util/push-clipping-path.js.map +7 -0
- package/dist/lib/util/wire-common-events.d.ts +2 -0
- package/dist/lib/util/wire-common-events.js +15 -0
- package/dist/lib/util/wire-common-events.js.map +7 -0
- package/dist/types.d.ts +1 -0
- package/dist/types.js +1 -0
- package/dist/types.js.map +7 -0
- package/dist/types.mjs +1 -0
- package/package.json +149 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../src/features/physics/lib/2d/world/world.ts"],
|
|
4
|
+
"sourcesContent": ["import type { RapierSimulation2D, RapierCheckpoint2D } from \"./rapier.js\";\nimport type { PibblPhysicsPose2D } from \"../../../2d-geometry.js\";\nimport { manifoldBetweenShapeRecords2D } from \"../collision/pairs.js\";\nimport type { InternalPose2D } from \"../math.js\";\nimport {\n DEFAULT_FIXED_STEP_MILLISECONDS,\n DEFAULT_GRAVITY,\n DEFAULT_INTERPOLATION,\n DEFAULT_MAX_CATCH_UP_STEPS,\n DEFAULT_POSITION_ITERATIONS,\n DEFAULT_SLEEPING,\n DEFAULT_VELOCITY_ITERATIONS,\n MAX_CATCH_UP_STEPS,\n MAX_SOLVER_ITERATIONS,\n MIN_CATCH_UP_STEPS,\n MIN_SOLVER_ITERATIONS,\n RADIANS_TO_DEGREES,\n} from \"../numeric-policy.js\";\nimport { recordPhysicsWorld2DTrace } from \"../runtime/trace.js\";\nimport { createPhysicsOwnershipCounters2D } from \"../runtime/ownership.js\";\nimport { DynamicAabbBroadPhase2D } from \"./broad-phase.js\";\nimport { BoundedCcd2D, collisionFiltersAllow2D } from \"./ccd.js\";\nimport { ContactCache2D, updateSortedContactCache2D } from \"./contact-cache.js\";\nimport {\n BODY_TYPE_DYNAMIC_2D,\n BODY_TYPE_KINEMATIC_2D,\n applyForceAtPointToCandidateBody2D,\n applyImpulseAtPointToCandidateBody2D,\n applyTorqueToCandidateBody2D,\n integrateCandidateVelocities2D,\n integrateCandidatePoses2D,\n} from \"./integrator.js\";\nimport { BODY_SLEEPING_2D, SequentialImpulseSolver2D } from \"./solver.js\";\nimport {\n BodyStore2D,\n ColliderStore2D,\n type BodyDefinition2D,\n type ColliderDefinition2D,\n} from \"./storage.js\";\n\nconst NO_INDEX = -1;\n\nexport type PhysicsPose2D = PibblPhysicsPose2D;\n\nexport interface PhysicsWorld2DConfiguration {\n readonly gravity?: readonly [number, number];\n readonly fixedStepMilliseconds?: number;\n readonly maxCatchUpSteps?: number;\n readonly interpolation?: \"linear\" | \"none\";\n readonly sleeping?: boolean;\n readonly solver?: Readonly<{\n readonly velocityIterations?: number;\n readonly positionIterations?: number;\n }>;\n /** @internal Accepts already-flattened normalized configuration. */\n readonly velocityIterations?: number;\n /** @internal Accepts already-flattened normalized configuration. */\n readonly positionIterations?: number;\n}\n\nexport interface NormalizedPhysicsWorld2DConfiguration {\n readonly gravityX: number;\n readonly gravityY: number;\n readonly fixedStepMilliseconds: number;\n readonly maxCatchUpSteps: number;\n readonly interpolation: \"linear\" | \"none\";\n readonly sleeping: boolean;\n readonly velocityIterations: number;\n readonly positionIterations: number;\n}\n\nexport interface PhysicsBodyTopologyRecord2D {\n readonly kind: \"body\";\n readonly id: number;\n readonly definition: BodyDefinition2D;\n}\n\nexport interface PhysicsColliderTopologyRecord2D {\n readonly kind: \"collider\";\n readonly id: number;\n readonly bodyId: number;\n readonly definition: Omit<\n ColliderDefinition2D,\n \"bodyIndex\" | \"bodyGeneration\"\n >;\n}\n\nexport type PhysicsTopologyRecord2D =\n PhysicsBodyTopologyRecord2D | PhysicsColliderTopologyRecord2D;\n\nexport type PhysicsCommand2D =\n | Readonly<{\n kind: \"apply-force\";\n bodyId: number;\n forceX: number;\n forceY: number;\n pointX?: number;\n pointY?: number;\n wake?: boolean;\n }>\n | Readonly<{ kind: \"apply-torque\"; bodyId: number; torque: number }>\n | Readonly<{\n kind: \"apply-impulse\";\n bodyId: number;\n impulseX: number;\n impulseY: number;\n pointX?: number;\n pointY?: number;\n wake?: boolean;\n }>\n | Readonly<{\n kind: \"set-pose\";\n bodyId: number;\n pose: PhysicsPose2D;\n }>\n | Readonly<{\n kind: \"set-velocity\";\n bodyId: number;\n linearVelocityX: number;\n linearVelocityY: number;\n angularVelocityDegrees: number;\n }>\n | Readonly<{\n kind: \"set-linear-velocity\";\n bodyId: number;\n linearVelocityX: number;\n linearVelocityY: number;\n }>\n | Readonly<{\n kind: \"set-angular-velocity\";\n bodyId: number;\n angularVelocityDegrees: number;\n }>\n | Readonly<{ kind: \"wake\"; bodyId: number }>\n | Readonly<{ kind: \"sleep\"; bodyId: number }>\n | Readonly<{ kind: \"disable\"; bodyId: number }>\n | Readonly<{\n kind: \"enable\";\n bodyId: number;\n velocity: \"zero\" | \"preserve\";\n }>\n | Readonly<{\n kind: \"configure\";\n configuration: PhysicsWorld2DConfiguration;\n }>;\n\nexport type PhysicsBodyCommand2D = Exclude<\n PhysicsCommand2D,\n Readonly<{ kind: \"configure\"; configuration: PhysicsWorld2DConfiguration }>\n>;\n\nexport type PhysicsWorld2DFailureStage =\n | \"topology\"\n | \"broad-phase\"\n | \"narrow-phase\"\n | \"velocity-solve\"\n | \"position-solve\"\n | \"ccd\"\n | \"event-staging\";\n\ntype PhysicsWorld2DFailureInjector = (\n stage: PhysicsWorld2DFailureStage,\n) => void;\n\nlet failureInjector: PhysicsWorld2DFailureInjector | undefined;\n\n/** @internal Test-only deterministic fault seam. */\nexport function installPhysicsWorld2DFailureInjectorForTest(\n injector: PhysicsWorld2DFailureInjector,\n): () => void {\n const previous = failureInjector;\n failureInjector = injector;\n return () => {\n if (failureInjector === injector) failureInjector = previous;\n };\n}\n\ninterface BodySlot2D {\n readonly index: number;\n readonly generation: number;\n}\n\ninterface ColliderSlot2D {\n readonly index: number;\n readonly generation: number;\n}\n\ninterface CoordinatorState2D {\n configuration: NormalizedPhysicsWorld2DConfiguration;\n accumulatorMilliseconds: number;\n previousLogicalTime: number;\n anchored: boolean;\n tick: number;\n topologyRevision: number;\n commandRevision: number;\n bodySlots: Map<number, BodySlot2D>;\n colliderSlots: Map<number, ColliderSlot2D>;\n bodyRecords: Map<number, PhysicsBodyTopologyRecord2D>;\n colliderRecords: Map<number, PhysicsColliderTopologyRecord2D>;\n disabledBodies: Map<number, DisabledBodyState2D>;\n previousPositionX: Float64Array;\n previousPositionY: Float64Array;\n previousRotationRadians: Float64Array;\n bodyIndices: Int32Array;\n bodyCount: number;\n integrationBodyIndices: Int32Array;\n integrationBodyCount: number;\n eventTicks: Float64Array;\n eventKinds: Uint8Array;\n eventFirstColliderIndices: Int32Array;\n eventFirstColliderGenerations: Uint32Array;\n eventSecondColliderIndices: Int32Array;\n eventSecondColliderGenerations: Uint32Array;\n eventNormalX: Float64Array;\n eventNormalY: Float64Array;\n eventPointCounts: Uint8Array;\n eventPointFirstX: Float64Array;\n eventPointFirstY: Float64Array;\n eventPointSecondX: Float64Array;\n eventPointSecondY: Float64Array;\n eventPointSeparations: Float64Array;\n eventTotalNormalImpulses: Float64Array;\n eventCount: number;\n contactEventFacts: Map<string, ContactEventFact2D>;\n savedNormalImpulses: Float64Array;\n savedTangentImpulses: Float64Array;\n}\n\ninterface ContactEventFact2D {\n readonly normalX: number;\n readonly normalY: number;\n readonly pointCount: number;\n readonly pointFirstX: readonly [number, number];\n readonly pointFirstY: readonly [number, number];\n readonly pointSecondX: readonly [number, number];\n readonly pointSecondY: readonly [number, number];\n readonly pointSeparations: readonly [number, number];\n readonly totalNormalImpulse: number;\n}\n\ninterface DisabledBodyState2D {\n readonly flags: number;\n readonly linearVelocityX: number;\n readonly linearVelocityY: number;\n readonly angularVelocity: number;\n}\n\ninterface ValueSnapshot {\n readonly key: PropertyKey;\n readonly kind: \"value\" | \"typed-array\" | \"array\" | \"map\";\n readonly reference: unknown;\n readonly contents?: unknown;\n}\n\ninterface ObjectSnapshot {\n readonly target: Record<PropertyKey, unknown>;\n readonly values: readonly ValueSnapshot[];\n}\n\ninterface WorldCheckpoint2D {\n readonly snapshots: readonly ObjectSnapshot[];\n readonly rapier?: RapierCheckpoint2D;\n}\n\nexport interface PhysicsWorld2DSnapshot {\n readonly tick: number;\n readonly accumulatorMilliseconds: number;\n readonly anchored: boolean;\n readonly bodyCount: number;\n readonly colliderCount: number;\n readonly contactCount: number;\n readonly eventCount: number;\n readonly rootNode: number;\n readonly pairCount: number;\n readonly counters: Readonly<Record<string, number>>;\n readonly bodies: readonly Readonly<{\n id: number;\n index: number;\n generation: number;\n positionX: number;\n positionY: number;\n rotationRadians: number;\n localCenterX: number;\n localCenterY: number;\n linearVelocityX: number;\n linearVelocityY: number;\n angularVelocity: number;\n inverseMass: number;\n inverseInertia: number;\n flags: number;\n }>[];\n}\n\nexport class PhysicsWorld2DCandidate {\n private status: \"live\" | \"adopted\" | \"discarded\" = \"live\";\n\n constructor(\n readonly owner: PhysicsWorld2DKernel,\n private checkpoint: WorldCheckpoint2D | undefined,\n readonly frameId: number,\n readonly logicalTime: number,\n readonly stepCount: number,\n readonly tick: number,\n readonly accumulatorMilliseconds: number,\n readonly advanceEligible: boolean,\n readonly eventOffset: number,\n readonly eventCount: number,\n readonly eventTicks: Float64Array,\n readonly eventKinds: Uint8Array,\n readonly eventFirstColliderIndices: Int32Array,\n readonly eventFirstColliderGenerations: Uint32Array,\n readonly eventSecondColliderIndices: Int32Array,\n readonly eventSecondColliderGenerations: Uint32Array,\n readonly eventNormalX: Float64Array,\n readonly eventNormalY: Float64Array,\n readonly eventPointCounts: Uint8Array,\n readonly eventPointFirstX: Float64Array,\n readonly eventPointFirstY: Float64Array,\n readonly eventPointSecondX: Float64Array,\n readonly eventPointSecondY: Float64Array,\n readonly eventPointSeparations: Float64Array,\n readonly eventTotalNormalImpulses: Float64Array,\n readonly topologyRevision: number,\n readonly commandRevision: number,\n readonly commandCount: number,\n ) {}\n\n get lifecycle(): \"live\" | \"adopted\" | \"discarded\" {\n return this.status;\n }\n\n consume(status: \"adopted\" | \"discarded\"): WorldCheckpoint2D {\n if (this.status !== \"live\") {\n throw new Error(\"physics world candidate has already been consumed.\");\n }\n const checkpoint = this.checkpoint!;\n this.checkpoint = undefined;\n this.status = status;\n return checkpoint;\n }\n}\n\nexport class PhysicsWorld2DKernel {\n readonly counters = createPhysicsOwnershipCounters2D();\n readonly bodies = new BodyStore2D(this.counters);\n readonly colliders = new ColliderStore2D(this.counters);\n readonly broadPhase = new DynamicAabbBroadPhase2D(this.counters);\n readonly contacts = new ContactCache2D();\n readonly solver = new SequentialImpulseSolver2D();\n private readonly positionSolver = new SequentialImpulseSolver2D();\n readonly ccd = new BoundedCcd2D();\n\n private readonly state: CoordinatorState2D;\n private pendingTopology: readonly PhysicsTopologyRecord2D[] | undefined;\n private pendingCommands: readonly PhysicsCommand2D[] = Object.freeze([]);\n private nextTopologyRevision = 0;\n private nextCommandRevision = 0;\n private liveCandidate: PhysicsWorld2DCandidate | undefined;\n private disposed = false;\n\n constructor(\n configuration: PhysicsWorld2DConfiguration = {},\n private readonly simulation?: RapierSimulation2D,\n ) {\n this.state = {\n configuration: normalizePhysicsWorld2DConfiguration(configuration),\n accumulatorMilliseconds: 0,\n previousLogicalTime: 0,\n anchored: false,\n tick: 0,\n topologyRevision: 0,\n commandRevision: 0,\n bodySlots: new Map(),\n colliderSlots: new Map(),\n bodyRecords: new Map(),\n colliderRecords: new Map(),\n disabledBodies: new Map(),\n previousPositionX: new Float64Array(this.bodies.capacity),\n previousPositionY: new Float64Array(this.bodies.capacity),\n previousRotationRadians: new Float64Array(this.bodies.capacity),\n bodyIndices: new Int32Array(this.bodies.capacity),\n bodyCount: 0,\n integrationBodyIndices: new Int32Array(this.bodies.capacity),\n integrationBodyCount: 0,\n eventTicks: new Float64Array(4),\n eventKinds: new Uint8Array(4),\n eventFirstColliderIndices: new Int32Array(4),\n eventFirstColliderGenerations: new Uint32Array(4),\n eventSecondColliderIndices: new Int32Array(4),\n eventSecondColliderGenerations: new Uint32Array(4),\n eventNormalX: new Float64Array(4),\n eventNormalY: new Float64Array(4),\n eventPointCounts: new Uint8Array(4),\n eventPointFirstX: new Float64Array(8),\n eventPointFirstY: new Float64Array(8),\n eventPointSecondX: new Float64Array(8),\n eventPointSecondY: new Float64Array(8),\n eventPointSeparations: new Float64Array(8),\n eventTotalNormalImpulses: new Float64Array(4),\n eventCount: 0,\n contactEventFacts: new Map(),\n savedNormalImpulses: new Float64Array(8),\n savedTangentImpulses: new Float64Array(8),\n };\n }\n\n /** Refresh listener/tag metadata after a successful render without waking physics. */\n updateColliderMetadata(records: readonly PhysicsTopologyRecord2D[]): void {\n this.assertUsable();\n for (const record of records) {\n if (record.kind !== \"collider\") continue;\n const previous = this.state.colliderRecords.get(record.id);\n if (!previous || previous.bodyId !== record.bodyId) continue;\n const { handlers, tag, owner } = record.definition;\n if (\n previous.definition.handlers === handlers &&\n previous.definition.tag === tag &&\n previous.definition.owner === owner\n )\n continue;\n this.state.colliderRecords.set(record.id, {\n ...previous,\n definition: { ...previous.definition, handlers, tag, owner },\n });\n const slot = this.state.colliderSlots.get(record.id);\n if (!slot) continue;\n this.colliders.handlers[slot.index] = handlers;\n this.colliders.tags[slot.index] = tag;\n this.colliders.owners[slot.index] = owner;\n }\n }\n\n proposeTopology(records: readonly PhysicsTopologyRecord2D[]): void {\n this.assertUsable();\n validateTopology(records);\n this.pendingTopology = Object.freeze([...records]);\n this.nextTopologyRevision += 1;\n }\n\n applyBegin(commands: readonly PhysicsCommand2D[]): void {\n this.assertUsable();\n for (const command of commands) validateCommand(command);\n this.pendingCommands = Object.freeze([\n ...this.pendingCommands,\n ...commands,\n ]);\n if (commands.length > 0) this.nextCommandRevision += 1;\n }\n\n advance(\n input: Readonly<{\n frameId: number;\n logicalTime: number;\n stagedKinematicTargets: ReadonlyMap<number, PhysicsPose2D>;\n }>,\n ): PhysicsWorld2DCandidate | undefined {\n this.assertUsable();\n if (this.liveCandidate !== undefined) {\n throw new Error(\"physics world already has a live candidate.\");\n }\n if (!Number.isSafeInteger(input.frameId) || input.frameId < 0) {\n throw new RangeError(\"frameId must be a nonnegative safe integer.\");\n }\n if (!Number.isFinite(input.logicalTime)) {\n throw new RangeError(\"logicalTime must be finite.\");\n }\n for (const [bodyId, pose] of input.stagedKinematicTargets) {\n validateId(bodyId, \"staged kinematic body id\");\n validatePose(pose, \"staged kinematic pose\");\n }\n\n const eventOffset = this.state.eventCount;\n const checkpoint = this.captureCheckpoint();\n const topologyRevision = this.nextTopologyRevision;\n const commandRevision = this.nextCommandRevision;\n const commandCount = this.pendingCommands.length;\n try {\n const topologyPending =\n this.pendingTopology !== undefined &&\n topologyRevision > this.state.topologyRevision;\n const commandsPending = commandRevision > this.state.commandRevision;\n if (topologyPending) {\n this.reconcileTopology(this.pendingTopology!);\n this.state.topologyRevision = topologyRevision;\n }\n if (commandsPending) {\n this.applyCommands(this.pendingCommands);\n this.state.commandRevision = commandRevision;\n }\n injectFailure(\"topology\");\n\n const reanchor = !this.state.anchored;\n const elapsed = reanchor\n ? 0\n : Math.max(0, input.logicalTime - this.state.previousLogicalTime);\n this.state.previousLogicalTime = input.logicalTime;\n this.state.anchored = true;\n const configuration = this.state.configuration;\n const maximumElapsed =\n configuration.fixedStepMilliseconds * configuration.maxCatchUpSteps;\n const acceptedElapsed = Math.min(elapsed, maximumElapsed);\n const discardedElapsed = elapsed - acceptedElapsed;\n if (discardedElapsed > 0) {\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-clamp\",\n frameId: input.frameId,\n logicalTime: input.logicalTime,\n acceptedElapsedMilliseconds: acceptedElapsed,\n discardedElapsedMilliseconds: discardedElapsed,\n });\n }\n this.state.accumulatorMilliseconds += acceptedElapsed;\n const stepCount = Math.min(\n configuration.maxCatchUpSteps,\n Math.floor(\n (this.state.accumulatorMilliseconds + Number.EPSILON) /\n configuration.fixedStepMilliseconds,\n ),\n );\n // A frame endpoint is reached over its accepted ticks, rather than teleporting\n // the entire kinematic motion into the first catch-up tick.\n const starts = new Map<number, PhysicsPose2D>();\n if (stepCount > 1)\n for (const [bodyId] of input.stagedKinematicTargets) {\n if (this.state.bodySlots.has(bodyId))\n starts.set(bodyId, this.authoritativePose(bodyId));\n }\n for (let step = 0; step < stepCount; step += 1) {\n let tickInput = input;\n if (stepCount > 1) {\n const fraction = (step + 1) / stepCount;\n const targets = new Map<number, PhysicsPose2D>();\n for (const [bodyId, target] of input.stagedKinematicTargets) {\n const start = starts.get(bodyId);\n if (!start) continue;\n targets.set(bodyId, {\n position: [\n start.position[0] +\n (target.position[0] - start.position[0]) * fraction,\n start.position[1] +\n (target.position[1] - start.position[1]) * fraction,\n ],\n rotationDegrees:\n start.rotationDegrees +\n shortestRadians(\n start.rotationDegrees / RADIANS_TO_DEGREES,\n target.rotationDegrees / RADIANS_TO_DEGREES,\n ) *\n RADIANS_TO_DEGREES *\n fraction,\n });\n }\n tickInput = { ...input, stagedKinematicTargets: targets };\n }\n this.simulateFixedTick(tickInput);\n this.state.accumulatorMilliseconds -=\n configuration.fixedStepMilliseconds;\n if (this.state.accumulatorMilliseconds < Number.EPSILON) {\n this.state.accumulatorMilliseconds = 0;\n }\n }\n if (\n stepCount > 0 &&\n !this.solver.advanceEligible &&\n !this.hasKinematicBodies()\n ) {\n this.state.accumulatorMilliseconds = 0;\n this.state.anchored = false;\n this.capturePreviousPoses();\n }\n const candidate = new PhysicsWorld2DCandidate(\n this,\n checkpoint,\n input.frameId,\n input.logicalTime,\n stepCount,\n this.state.tick,\n this.state.accumulatorMilliseconds,\n this.hasAdvanceWork(),\n eventOffset,\n this.state.eventCount - eventOffset,\n this.state.eventTicks,\n this.state.eventKinds,\n this.state.eventFirstColliderIndices,\n this.state.eventFirstColliderGenerations,\n this.state.eventSecondColliderIndices,\n this.state.eventSecondColliderGenerations,\n this.state.eventNormalX,\n this.state.eventNormalY,\n this.state.eventPointCounts,\n this.state.eventPointFirstX,\n this.state.eventPointFirstY,\n this.state.eventPointSecondX,\n this.state.eventPointSecondY,\n this.state.eventPointSeparations,\n this.state.eventTotalNormalImpulses,\n topologyRevision,\n commandRevision,\n commandCount,\n );\n this.liveCandidate = candidate;\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-candidate\",\n frameId: input.frameId,\n logicalTime: input.logicalTime,\n tick: this.state.tick,\n stepCount,\n });\n return candidate;\n } catch (error) {\n this.restoreCheckpoint(checkpoint);\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-error\",\n frameId: input.frameId,\n logicalTime: input.logicalTime,\n error,\n });\n throw error;\n }\n }\n\n adopt(candidate: PhysicsWorld2DCandidate): void {\n this.assertCandidate(candidate);\n candidate.consume(\"adopted\");\n this.liveCandidate = undefined;\n if (candidate.topologyRevision === this.nextTopologyRevision) {\n this.pendingTopology = undefined;\n }\n if (candidate.commandRevision === this.nextCommandRevision) {\n this.pendingCommands = Object.freeze([]);\n } else if (candidate.commandCount > 0) {\n this.pendingCommands = Object.freeze(\n this.pendingCommands.slice(candidate.commandCount),\n );\n }\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-adopt\",\n frameId: candidate.frameId,\n tick: candidate.tick,\n });\n }\n\n discard(candidate: PhysicsWorld2DCandidate): void {\n this.assertCandidate(candidate);\n const checkpoint = candidate.consume(\"discarded\");\n this.restoreCheckpoint(checkpoint);\n this.liveCandidate = undefined;\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-discard\",\n frameId: candidate.frameId,\n tick: candidate.tick,\n });\n }\n\n authoritativePose(bodyId: number): PhysicsPose2D {\n this.assertUsable();\n const slot = this.requireBody(bodyId);\n return publicBodyOriginPose(this.bodies, slot.index);\n }\n\n isBodyEnabled(bodyId: number): boolean {\n this.assertUsable();\n return (\n this.state.bodySlots.has(bodyId) && !this.state.disabledBodies.has(bodyId)\n );\n }\n\n bodyIdentity(\n bodyId: number,\n ): Readonly<{ index: number; generation: number }> | undefined {\n this.assertUsable();\n return this.state.bodySlots.get(bodyId);\n }\n\n bodyIdForIdentity(index: number, generation: number): number | undefined {\n this.assertUsable();\n for (const [id, slot] of this.state.bodySlots) {\n if (slot.index === index && slot.generation === generation) return id;\n }\n return undefined;\n }\n\n colliderIdForIdentity(index: number, generation: number): number | undefined {\n this.assertUsable();\n for (const [id, slot] of this.state.colliderSlots) {\n if (slot.index === index && slot.generation === generation) return id;\n }\n return undefined;\n }\n\n colliderIdentity(\n colliderId: number,\n ): Readonly<{ index: number; generation: number }> | undefined {\n this.assertUsable();\n return this.state.colliderSlots.get(colliderId);\n }\n\n presentationPose(bodyId: number): PhysicsPose2D {\n this.assertUsable();\n const slot = this.requireBody(bodyId);\n const index = slot.index;\n if (this.state.configuration.interpolation === \"none\") {\n return this.authoritativePose(bodyId);\n }\n const alpha =\n this.state.accumulatorMilliseconds /\n this.state.configuration.fixedStepMilliseconds;\n const previousRotation = this.state.previousRotationRadians[index]!;\n const currentRotation = this.bodies.rotationRadians[index]!;\n return publicPoseFromCenter(\n this.bodies,\n index,\n lerp(\n this.state.previousPositionX[index]!,\n this.bodies.positionX[index]!,\n alpha,\n ),\n lerp(\n this.state.previousPositionY[index]!,\n this.bodies.positionY[index]!,\n alpha,\n ),\n previousRotation +\n shortestRadians(previousRotation, currentRotation) * alpha,\n );\n }\n\n snapshot(): PhysicsWorld2DSnapshot {\n const bodies = [...this.state.bodySlots.entries()]\n .sort(([first], [second]) => first - second)\n .map(([id, slot]) =>\n Object.freeze({\n id,\n index: slot.index,\n generation: slot.generation,\n positionX: this.bodies.positionX[slot.index]!,\n positionY: this.bodies.positionY[slot.index]!,\n rotationRadians: this.bodies.rotationRadians[slot.index]!,\n localCenterX: this.bodies.localCenterX[slot.index]!,\n localCenterY: this.bodies.localCenterY[slot.index]!,\n linearVelocityX: this.bodies.linearVelocityX[slot.index]!,\n linearVelocityY: this.bodies.linearVelocityY[slot.index]!,\n angularVelocity: this.bodies.angularVelocity[slot.index]!,\n inverseMass: this.bodies.inverseMass[slot.index]!,\n inverseInertia: this.bodies.inverseInertia[slot.index]!,\n flags: this.bodies.flags[slot.index]!,\n }),\n );\n return Object.freeze({\n tick: this.state.tick,\n accumulatorMilliseconds: this.state.accumulatorMilliseconds,\n anchored: this.state.anchored,\n bodyCount: this.state.bodySlots.size,\n colliderCount: this.state.colliderSlots.size,\n contactCount: this.contacts.contactCount,\n eventCount: this.state.eventCount,\n rootNode: this.broadPhase.rootNode,\n pairCount: this.broadPhase.pairCount,\n counters: Object.freeze({ ...this.counters }),\n bodies: Object.freeze(bodies),\n });\n }\n\n dispose(): void {\n if (this.disposed) return;\n if (this.liveCandidate !== undefined) this.discard(this.liveCandidate);\n this.reconcileTopology(Object.freeze([]));\n this.state.eventCount = 0;\n this.pendingTopology = undefined;\n this.pendingCommands = Object.freeze([]);\n this.simulation?.dispose();\n this.disposed = true;\n }\n\n private simulateFixedTick(\n input: Readonly<{\n frameId: number;\n logicalTime: number;\n stagedKinematicTargets: ReadonlyMap<number, PhysicsPose2D>;\n }>,\n ): void {\n this.ensureBodyScratchCapacity();\n this.capturePreviousPoses();\n const dt = this.state.configuration.fixedStepMilliseconds / 1_000;\n this.applyKinematicTargets(input.stagedKinematicTargets, dt);\n this.rebuildIntegrationBodyIndices();\n if (this.simulation) {\n const previousFlags = this.bodies.flags.slice();\n this.simulation.step(\n this.bodies,\n this.colliders,\n dt,\n this.state.configuration.gravityX,\n this.state.configuration.gravityY,\n this.state.configuration.sleeping,\n this.state.configuration.velocityIterations,\n this.state.configuration.positionIterations,\n );\n injectFailure(\"broad-phase\");\n injectFailure(\"ccd\");\n this.moveBroadPhaseProxies();\n this.broadPhase.publishPairs();\n updateSortedContactCache2D(\n this.contacts,\n this.simulation.contactPairs(this.broadPhase, this.colliders),\n this.colliders,\n (first, second) => {\n const sensor =\n (this.colliders.flags[first]! | this.colliders.flags[second]!) & 1;\n const dynamic =\n (this.bodies.flags[this.colliders.bodyIndices[first]!]! |\n this.bodies.flags[this.colliders.bodyIndices[second]!]!) &\n BODY_TYPE_DYNAMIC_2D;\n return sensor || !dynamic\n ? this.manifoldBetweenColliders(first, second)\n : this.simulation!.manifold(first, second);\n },\n );\n for (let contact = 0; contact < this.contacts.contactCount; contact++) {\n const impulses = this.simulation.normalImpulses(\n this.contacts.firstColliderIndices[contact]!,\n this.contacts.secondColliderIndices[contact]!,\n );\n for (let point = 0; point < 2; point++)\n this.contacts.pointNormalImpulses[contact * 2 + point] =\n impulses[point] ?? 0;\n }\n injectFailure(\"narrow-phase\");\n injectFailure(\"velocity-solve\");\n injectFailure(\"position-solve\");\n this.solver.advanceEligible = false;\n for (let offset = 0; offset < this.state.bodyCount; offset++) {\n const body = this.state.bodyIndices[offset]!;\n if (!(this.bodies.flags[body]! & BODY_TYPE_DYNAMIC_2D)) continue;\n const sleeping = !!(this.bodies.flags[body]! & BODY_SLEEPING_2D);\n if (!sleeping) this.solver.advanceEligible = true;\n if (sleeping !== !!(previousFlags[body]! & BODY_SLEEPING_2D))\n this.appendEvent(sleeping ? 6 : 5, body, NO_INDEX);\n }\n this.stageContactEvents();\n injectFailure(\"event-staging\");\n this.state.tick++;\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-tick\",\n frameId: input.frameId,\n logicalTime: input.logicalTime,\n tick: this.state.tick,\n });\n return;\n }\n integrateCandidateVelocities2D(\n this.bodies,\n this.state.integrationBodyIndices,\n this.state.integrationBodyCount,\n this.state.configuration.gravityX,\n this.state.configuration.gravityY,\n dt,\n );\n // Solve existing support contacts before advancing positions. Otherwise gravity\n // adds penetration every tick faster than bounded position correction can remove it.\n this.moveBroadPhaseProxies();\n this.broadPhase.publishPairs();\n updateSortedContactCache2D(\n this.contacts,\n this.broadPhase,\n this.colliders,\n (first, second) => this.manifoldBetweenColliders(first, second),\n );\n const restitutionThreshold = Math.max(\n 1,\n 2 *\n dt *\n Math.hypot(\n this.state.configuration.gravityX,\n this.state.configuration.gravityY,\n ),\n );\n this.solver.solveCandidate(\n this.bodies,\n this.state.bodyIndices,\n this.state.bodyCount,\n this.contacts,\n this.state.configuration.velocityIterations,\n 0,\n true,\n restitutionThreshold,\n );\n this.stageContactEvents(false);\n integrateCandidatePoses2D(\n this.bodies,\n this.state.integrationBodyIndices,\n this.state.integrationBodyCount,\n dt,\n );\n this.moveBroadPhaseProxies();\n injectFailure(\"broad-phase\");\n this.ccd.resolveCandidateBodies(\n this.bodies,\n this.colliders,\n this.broadPhase,\n this.state.integrationBodyIndices,\n this.state.integrationBodyCount,\n this.state.previousPositionX,\n this.state.previousPositionY,\n this.state.previousRotationRadians,\n );\n this.moveBroadPhaseProxies();\n injectFailure(\"ccd\");\n this.broadPhase.publishPairs();\n updateSortedContactCache2D(\n this.contacts,\n this.broadPhase,\n this.colliders,\n (firstCollider, secondCollider) =>\n this.manifoldBetweenColliders(firstCollider, secondCollider),\n );\n injectFailure(\"narrow-phase\");\n this.solver.solveCandidate(\n this.bodies,\n this.state.bodyIndices,\n this.state.bodyCount,\n this.contacts,\n this.state.configuration.velocityIterations,\n 0,\n false,\n restitutionThreshold,\n );\n injectFailure(\"velocity-solve\");\n this.solvePositions();\n injectFailure(\"position-solve\");\n this.solver.updateSleepingCandidate(this.bodies, this.contacts, dt, {\n enabled: this.state.configuration.sleeping,\n recordTransition: (bodyIndex, sleeping) => {\n this.appendEvent(sleeping ? 6 : 5, bodyIndex, NO_INDEX);\n },\n });\n this.stageContactEvents();\n injectFailure(\"event-staging\");\n this.state.tick += 1;\n recordPhysicsWorld2DTrace({\n kind: \"physics-2d-tick\",\n frameId: input.frameId,\n logicalTime: input.logicalTime,\n tick: this.state.tick,\n });\n }\n\n private reconcileTopology(records: readonly PhysicsTopologyRecord2D[]): void {\n const desiredBodies = new Map<number, PhysicsBodyTopologyRecord2D>();\n const desiredColliders = new Map<number, PhysicsColliderTopologyRecord2D>();\n for (const record of records) {\n if (record.kind === \"body\") desiredBodies.set(record.id, record);\n else desiredColliders.set(record.id, record);\n }\n\n for (const [id, slot] of sortedEntries(this.state.colliderSlots, true)) {\n if (desiredColliders.has(id)) continue;\n this.releaseCollider(slot);\n this.state.colliderSlots.delete(id);\n this.state.colliderRecords.delete(id);\n }\n for (const [id, slot] of sortedEntries(this.state.bodySlots, true)) {\n if (desiredBodies.has(id)) continue;\n this.bodies.release(slot.index, slot.generation);\n this.state.bodySlots.delete(id);\n this.state.bodyRecords.delete(id);\n this.state.disabledBodies.delete(id);\n }\n for (const [id, record] of sortedEntries(desiredBodies)) {\n const existing = this.state.bodySlots.get(id);\n if (existing === undefined) {\n const index = this.bodies.allocate(record.definition);\n const slot = Object.freeze({\n index,\n generation: this.bodies.generations[index]!,\n });\n this.state.bodySlots.set(id, slot);\n this.state.anchored = false;\n this.state.accumulatorMilliseconds = 0;\n this.ensureBodyScratchCapacity();\n this.snapPreviousPose(index);\n this.state.bodyRecords.set(id, record);\n } else if (\n !sameBodyDefinition(\n this.state.bodyRecords.get(id)?.definition,\n record.definition,\n )\n ) {\n const disabledState = this.state.disabledBodies.get(id);\n if (disabledState === undefined && this.wakeBody(existing.index)) {\n this.state.anchored = false;\n this.state.accumulatorMilliseconds = 0;\n }\n const preserveDynamicPose =\n disabledState === undefined &&\n (this.bodies.flags[existing.index]! & BODY_TYPE_DYNAMIC_2D) !== 0 &&\n (record.definition.flags & BODY_TYPE_DYNAMIC_2D) !== 0;\n const dynamicState = preserveDynamicPose\n ? {\n pose: publicBodyOriginPose(this.bodies, existing.index),\n linearVelocityX: this.bodies.linearVelocityX[existing.index]!,\n linearVelocityY: this.bodies.linearVelocityY[existing.index]!,\n angularVelocity: this.bodies.angularVelocity[existing.index]!,\n forceX: this.bodies.forceX[existing.index]!,\n forceY: this.bodies.forceY[existing.index]!,\n torque: this.bodies.torque[existing.index]!,\n }\n : null;\n writeBodyDefinition(this.bodies, existing.index, record.definition);\n if (dynamicState !== null) {\n this.setBodyOriginPose(existing.index, dynamicState.pose);\n this.bodies.linearVelocityX[existing.index] =\n dynamicState.linearVelocityX;\n this.bodies.linearVelocityY[existing.index] =\n dynamicState.linearVelocityY;\n this.bodies.angularVelocity[existing.index] =\n dynamicState.angularVelocity;\n this.bodies.forceX[existing.index] = dynamicState.forceX;\n this.bodies.forceY[existing.index] = dynamicState.forceY;\n this.bodies.torque[existing.index] = dynamicState.torque;\n }\n if (disabledState !== undefined) {\n this.state.disabledBodies.set(\n id,\n Object.freeze({\n ...disabledState,\n flags: record.definition.flags,\n }),\n );\n this.bodies.flags[existing.index] = 0;\n this.bodies.linearVelocityX[existing.index] = 0;\n this.bodies.linearVelocityY[existing.index] = 0;\n this.bodies.angularVelocity[existing.index] = 0;\n this.bodies.forceX[existing.index] = 0;\n this.bodies.forceY[existing.index] = 0;\n this.bodies.torque[existing.index] = 0;\n }\n this.snapPreviousPose(existing.index);\n this.state.bodyRecords.set(id, record);\n }\n }\n for (const [id, record] of sortedEntries(desiredColliders)) {\n const body = this.state.bodySlots.get(record.bodyId);\n if (body === undefined) {\n throw new Error(\n `collider ${id} references missing body ${record.bodyId}.`,\n );\n }\n const existing = this.state.colliderSlots.get(id);\n if (\n existing !== undefined &&\n sameColliderRecord(this.state.colliderRecords.get(id), record)\n ) {\n // Listener/tag ownership is reactive metadata, not collision identity.\n this.colliders.handlers[existing.index] = record.definition.handlers;\n this.colliders.tags[existing.index] = record.definition.tag;\n this.colliders.owners[existing.index] = record.definition.owner;\n this.state.colliderRecords.set(id, record);\n continue;\n }\n if (existing !== undefined) this.releaseCollider(existing);\n this.state.colliderRecords.set(id, record);\n if (this.state.disabledBodies.has(record.bodyId)) continue;\n this.allocateColliderRecord(id, record, body);\n if (this.wakeBody(body.index)) {\n this.state.anchored = false;\n this.state.accumulatorMilliseconds = 0;\n }\n }\n this.rebuildBodyIndices();\n this.moveBroadPhaseProxies();\n }\n\n private applyCommands(commands: readonly PhysicsCommand2D[]): void {\n for (const command of commands) {\n if (command.kind === \"configure\") {\n const previousStep = this.state.configuration.fixedStepMilliseconds;\n const sleepingWasEnabled = this.state.configuration.sleeping;\n this.state.configuration = normalizePhysicsWorld2DConfiguration({\n gravity: [\n this.state.configuration.gravityX,\n this.state.configuration.gravityY,\n ],\n fixedStepMilliseconds: this.state.configuration.fixedStepMilliseconds,\n maxCatchUpSteps: this.state.configuration.maxCatchUpSteps,\n interpolation: this.state.configuration.interpolation,\n sleeping: this.state.configuration.sleeping,\n ...command.configuration,\n solver: {\n velocityIterations: this.state.configuration.velocityIterations,\n positionIterations: this.state.configuration.positionIterations,\n ...command.configuration.solver,\n },\n });\n if (this.state.configuration.fixedStepMilliseconds !== previousStep) {\n this.state.accumulatorMilliseconds = 0;\n this.state.anchored = false;\n }\n if (sleepingWasEnabled && !this.state.configuration.sleeping) {\n for (let offset = 0; offset < this.state.bodyCount; offset += 1) {\n this.wakeBody(this.state.bodyIndices[offset]!);\n }\n this.state.accumulatorMilliseconds = 0;\n this.state.anchored = false;\n }\n continue;\n }\n const slot = this.state.bodySlots.get(command.bodyId);\n if (slot === undefined) continue;\n switch (command.kind) {\n case \"apply-force\":\n if (command.wake !== false) this.wakeCommandBody(slot.index);\n applyForceAtPointToCandidateBody2D(\n this.bodies,\n slot.index,\n slot.generation,\n command.forceX,\n command.forceY,\n command.pointX ?? this.bodies.positionX[slot.index]!,\n command.pointY ?? this.bodies.positionY[slot.index]!,\n );\n break;\n case \"apply-torque\":\n this.wakeCommandBody(slot.index);\n applyTorqueToCandidateBody2D(\n this.bodies,\n slot.index,\n slot.generation,\n command.torque,\n );\n break;\n case \"apply-impulse\":\n if (command.wake !== false) this.wakeCommandBody(slot.index);\n applyImpulseAtPointToCandidateBody2D(\n this.bodies,\n slot.index,\n slot.generation,\n command.impulseX,\n command.impulseY,\n command.pointX ?? this.bodies.positionX[slot.index]!,\n command.pointY ?? this.bodies.positionY[slot.index]!,\n );\n break;\n case \"set-pose\":\n this.wakeCommandBody(slot.index);\n this.setBodyOriginPose(slot.index, command.pose);\n this.snapPreviousPose(slot.index);\n this.moveBroadPhaseProxies();\n break;\n case \"set-velocity\":\n this.wakeCommandBody(slot.index);\n this.bodies.linearVelocityX[slot.index] = command.linearVelocityX;\n this.bodies.linearVelocityY[slot.index] = command.linearVelocityY;\n this.bodies.angularVelocity[slot.index] =\n command.angularVelocityDegrees / RADIANS_TO_DEGREES;\n break;\n case \"set-linear-velocity\":\n this.wakeCommandBody(slot.index);\n this.bodies.linearVelocityX[slot.index] = command.linearVelocityX;\n this.bodies.linearVelocityY[slot.index] = command.linearVelocityY;\n break;\n case \"set-angular-velocity\":\n this.wakeCommandBody(slot.index);\n this.bodies.angularVelocity[slot.index] =\n command.angularVelocityDegrees / RADIANS_TO_DEGREES;\n break;\n case \"wake\":\n this.wakeCommandBody(slot.index);\n break;\n case \"sleep\":\n this.sleepCommandBody(slot.index);\n break;\n case \"disable\":\n this.disableCommandBody(command.bodyId, slot);\n break;\n case \"enable\":\n this.enableCommandBody(command.bodyId, slot, command.velocity);\n break;\n }\n }\n }\n\n private wakeCommandBody(bodyIndex: number): void {\n if (this.wakeBody(bodyIndex)) {\n this.state.anchored = false;\n this.state.accumulatorMilliseconds = 0;\n }\n }\n\n private sleepCommandBody(bodyIndex: number): void {\n if ((this.bodies.flags[bodyIndex]! & BODY_SLEEPING_2D) !== 0) return;\n this.bodies.flags[bodyIndex] |= BODY_SLEEPING_2D;\n this.bodies.linearVelocityX[bodyIndex] = 0;\n this.bodies.linearVelocityY[bodyIndex] = 0;\n this.bodies.angularVelocity[bodyIndex] = 0;\n this.bodies.forceX[bodyIndex] = 0;\n this.bodies.forceY[bodyIndex] = 0;\n this.bodies.torque[bodyIndex] = 0;\n this.appendEvent(6, bodyIndex, NO_INDEX);\n }\n\n private disableCommandBody(bodyId: number, slot: BodySlot2D): void {\n if (this.state.disabledBodies.has(bodyId)) return;\n this.state.disabledBodies.set(\n bodyId,\n Object.freeze({\n flags: this.bodies.flags[slot.index]!,\n linearVelocityX: this.bodies.linearVelocityX[slot.index]!,\n linearVelocityY: this.bodies.linearVelocityY[slot.index]!,\n angularVelocity: this.bodies.angularVelocity[slot.index]!,\n }),\n );\n for (const [colliderId, record] of this.state.colliderRecords) {\n if (record.bodyId !== bodyId) continue;\n const collider = this.state.colliderSlots.get(colliderId);\n if (collider !== undefined) this.releaseCollider(collider);\n this.state.colliderSlots.delete(colliderId);\n }\n this.bodies.flags[slot.index] = 0;\n this.bodies.linearVelocityX[slot.index] = 0;\n this.bodies.linearVelocityY[slot.index] = 0;\n this.bodies.angularVelocity[slot.index] = 0;\n this.bodies.forceX[slot.index] = 0;\n this.bodies.forceY[slot.index] = 0;\n this.bodies.torque[slot.index] = 0;\n this.broadPhase.publishPairs();\n updateSortedContactCache2D(\n this.contacts,\n this.broadPhase,\n this.colliders,\n (first, second) => this.manifoldBetweenColliders(first, second),\n );\n this.stageContactEvents();\n }\n\n private enableCommandBody(\n bodyId: number,\n slot: BodySlot2D,\n velocity: \"zero\" | \"preserve\",\n ): void {\n const disabled = this.state.disabledBodies.get(bodyId);\n if (disabled === undefined) return;\n const authored = this.state.bodyRecords.get(bodyId)?.definition;\n if (authored === undefined) return;\n const disabledPose = publicBodyOriginPose(this.bodies, slot.index);\n this.state.disabledBodies.delete(bodyId);\n writeBodyDefinition(this.bodies, slot.index, authored);\n this.setBodyOriginPose(slot.index, disabledPose);\n this.bodies.flags[slot.index] = disabled.flags & ~BODY_SLEEPING_2D;\n this.bodies.linearVelocityX[slot.index] =\n velocity === \"preserve\" ? disabled.linearVelocityX : 0;\n this.bodies.linearVelocityY[slot.index] =\n velocity === \"preserve\" ? disabled.linearVelocityY : 0;\n this.bodies.angularVelocity[slot.index] =\n velocity === \"preserve\" ? disabled.angularVelocity : 0;\n this.snapPreviousPose(slot.index);\n for (const [colliderId, record] of sortedEntries(\n this.state.colliderRecords,\n )) {\n if (record.bodyId !== bodyId || this.state.colliderSlots.has(colliderId))\n continue;\n this.allocateColliderRecord(colliderId, record, slot);\n }\n this.state.anchored = false;\n this.state.accumulatorMilliseconds = 0;\n }\n\n private allocateColliderRecord(\n id: number,\n record: PhysicsColliderTopologyRecord2D,\n body: BodySlot2D,\n ): void {\n const index = this.colliders.allocate({\n ...record.definition,\n bodyIndex: body.index,\n bodyGeneration: body.generation,\n });\n const generation = this.colliders.generations[index]!;\n const pose = internalPose(this.bodies, body.index);\n const bounds = colliderBounds(\n record.definition.shape,\n pose.x,\n pose.y,\n pose.rotationRadians,\n );\n const proxy = this.broadPhase.createProxy(\n index,\n generation,\n bounds[0],\n bounds[1],\n bounds[2],\n bounds[3],\n );\n this.colliders.setProxy(\n index,\n generation,\n proxy,\n this.broadPhase.proxyGenerations[proxy]!,\n );\n this.state.colliderSlots.set(id, Object.freeze({ index, generation }));\n }\n\n private manifoldBetweenColliders(first: number, second: number) {\n if (\n !collisionFiltersAllow2D(\n this.colliders.filters[first],\n this.colliders.filters[second],\n )\n ) {\n return null;\n }\n const firstShape = this.colliders.shapes[first];\n const secondShape = this.colliders.shapes[second];\n if (firstShape === null || secondShape === null) return null;\n const firstBody = this.colliders.bodyIndices[first]!;\n const secondBody = this.colliders.bodyIndices[second]!;\n return manifoldBetweenShapeRecords2D(\n firstShape,\n internalPose(this.bodies, firstBody),\n first,\n secondShape,\n internalPose(this.bodies, secondBody),\n second,\n );\n }\n\n private moveBroadPhaseProxies(): void {\n for (const [, slot] of sortedEntries(this.state.colliderSlots)) {\n const body = this.colliders.bodyIndices[slot.index]!;\n const shape = this.colliders.shapes[slot.index];\n if (shape === null) continue;\n const pose = internalPose(this.bodies, body);\n const bounds = colliderBounds(\n shape,\n pose.x,\n pose.y,\n pose.rotationRadians,\n );\n this.broadPhase.moveProxy(\n this.colliders.proxyIndices[slot.index]!,\n this.colliders.proxyGenerations[slot.index]!,\n bounds[0],\n bounds[1],\n bounds[2],\n bounds[3],\n this.bodies.positionX[body]! - this.state.previousPositionX[body]!,\n this.bodies.positionY[body]! - this.state.previousPositionY[body]!,\n );\n }\n }\n\n private applyKinematicTargets(\n targets: ReadonlyMap<number, PhysicsPose2D>,\n dt: number,\n ): void {\n for (const [bodyId, pose] of targets) {\n const slot = this.state.bodySlots.get(bodyId);\n if (slot === undefined) continue;\n const index = slot.index;\n if ((this.bodies.flags[index]! & BODY_TYPE_KINEMATIC_2D) === 0) continue;\n const targetRadians = pose.rotationDegrees / RADIANS_TO_DEGREES;\n const targetCenter = centerFromOrigin(\n this.bodies,\n index,\n pose.position[0],\n pose.position[1],\n targetRadians,\n );\n this.bodies.linearVelocityX[index] =\n (targetCenter[0] - this.bodies.positionX[index]!) / dt;\n this.bodies.linearVelocityY[index] =\n (targetCenter[1] - this.bodies.positionY[index]!) / dt;\n this.bodies.angularVelocity[index] =\n shortestRadians(this.bodies.rotationRadians[index]!, targetRadians) /\n dt;\n if (this.wakeBody(index)) {\n this.state.anchored = false;\n this.state.accumulatorMilliseconds = 0;\n }\n }\n }\n\n private stageContactEvents(includeHits = true): void {\n for (let event = 0; event < this.contacts.eventCount; event += 1) {\n const first = this.contacts.eventFirstColliderIndices[event]!;\n const firstGeneration =\n this.contacts.eventFirstColliderGenerations[event]!;\n const second = this.contacts.eventSecondColliderIndices[event]!;\n const secondGeneration =\n this.contacts.eventSecondColliderGenerations[event]!;\n const kind = this.contacts.eventTypes[event]!;\n const contact = this.findContact(\n first,\n firstGeneration,\n second,\n secondGeneration,\n );\n const key = contactKey(first, firstGeneration, second, secondGeneration);\n this.appendEvent(\n kind,\n first,\n second,\n firstGeneration,\n secondGeneration,\n kind === 2 || kind === 4\n ? this.state.contactEventFacts.get(key)\n : contact < 0\n ? undefined\n : this.contactEventFact(contact),\n );\n }\n for (let contact = 0; contact < this.contacts.contactCount; contact += 1) {\n if (!includeHits || this.contacts.sensorFlags[contact] !== 0) continue;\n const first = this.contacts.firstColliderIndices[contact]!;\n const second = this.contacts.secondColliderIndices[contact]!;\n if (\n !hasColliderHandler(this.colliders.handlers[first], \"onHit\") &&\n !hasColliderHandler(this.colliders.handlers[second], \"onHit\")\n ) {\n continue;\n }\n const fact = this.contactEventFact(contact);\n if (fact.totalNormalImpulse <= 0) continue;\n this.appendEvent(\n 7,\n first,\n second,\n this.contacts.firstColliderGenerations[contact]!,\n this.contacts.secondColliderGenerations[contact]!,\n fact,\n );\n }\n this.state.contactEventFacts.clear();\n for (let contact = 0; contact < this.contacts.contactCount; contact += 1) {\n this.state.contactEventFacts.set(\n contactKey(\n this.contacts.firstColliderIndices[contact]!,\n this.contacts.firstColliderGenerations[contact]!,\n this.contacts.secondColliderIndices[contact]!,\n this.contacts.secondColliderGenerations[contact]!,\n ),\n this.contactEventFact(contact),\n );\n }\n }\n\n private findContact(\n first: number,\n firstGeneration: number,\n second: number,\n secondGeneration: number,\n ): number {\n for (let contact = 0; contact < this.contacts.contactCount; contact += 1) {\n if (\n this.contacts.firstColliderIndices[contact] === first &&\n this.contacts.firstColliderGenerations[contact] === firstGeneration &&\n this.contacts.secondColliderIndices[contact] === second &&\n this.contacts.secondColliderGenerations[contact] === secondGeneration\n ) {\n return contact;\n }\n }\n return -1;\n }\n\n private contactEventFact(contact: number): ContactEventFact2D {\n const base = contact * 2;\n const pointCount = this.contacts.pointCounts[contact]!;\n return Object.freeze({\n normalX: this.contacts.normalX[contact]!,\n normalY: this.contacts.normalY[contact]!,\n pointCount,\n pointFirstX: Object.freeze([\n this.contacts.pointFirstX[base]!,\n this.contacts.pointFirstX[base + 1]!,\n ] as const),\n pointFirstY: Object.freeze([\n this.contacts.pointFirstY[base]!,\n this.contacts.pointFirstY[base + 1]!,\n ] as const),\n pointSecondX: Object.freeze([\n this.contacts.pointSecondX[base]!,\n this.contacts.pointSecondX[base + 1]!,\n ] as const),\n pointSecondY: Object.freeze([\n this.contacts.pointSecondY[base]!,\n this.contacts.pointSecondY[base + 1]!,\n ] as const),\n pointSeparations: Object.freeze([\n this.contacts.pointSeparations[base]!,\n this.contacts.pointSeparations[base + 1]!,\n ] as const),\n totalNormalImpulse:\n this.contacts.pointNormalImpulses[base]! +\n this.contacts.pointNormalImpulses[base + 1]!,\n });\n }\n\n private solvePositions(): void {\n const pointCount = this.contacts.contactCount * 2;\n this.ensureSavedImpulseCapacity(pointCount);\n this.state.savedNormalImpulses.set(\n this.contacts.pointNormalImpulses.subarray(0, pointCount),\n 0,\n );\n this.state.savedTangentImpulses.set(\n this.contacts.pointTangentImpulses.subarray(0, pointCount),\n 0,\n );\n this.contacts.pointNormalImpulses.fill(0, 0, pointCount);\n this.contacts.pointTangentImpulses.fill(0, 0, pointCount);\n this.positionSolver.solveCandidate(\n this.bodies,\n this.state.bodyIndices,\n this.state.bodyCount,\n this.contacts,\n 0,\n this.state.configuration.positionIterations,\n );\n this.contacts.pointNormalImpulses.set(\n this.state.savedNormalImpulses.subarray(0, pointCount),\n 0,\n );\n this.contacts.pointTangentImpulses.set(\n this.state.savedTangentImpulses.subarray(0, pointCount),\n 0,\n );\n this.solver.positionIterationsPerformed =\n this.positionSolver.positionIterationsPerformed;\n }\n\n private ensureSavedImpulseCapacity(required: number): void {\n if (required <= this.state.savedNormalImpulses.length) return;\n let capacity = this.state.savedNormalImpulses.length * 2;\n while (capacity < required) capacity *= 2;\n this.state.savedNormalImpulses = growFloat64(\n this.state.savedNormalImpulses,\n capacity,\n );\n this.state.savedTangentImpulses = growFloat64(\n this.state.savedTangentImpulses,\n capacity,\n );\n }\n\n private appendEvent(\n kind: number,\n first: number,\n second: number,\n firstGeneration = 0,\n secondGeneration = 0,\n fact?: ContactEventFact2D,\n ): void {\n this.ensureEventCapacity(this.state.eventCount + 1);\n const event = this.state.eventCount;\n this.state.eventTicks[event] = this.state.tick + 1;\n this.state.eventKinds[event] = kind;\n this.state.eventFirstColliderIndices[event] = first;\n this.state.eventFirstColliderGenerations[event] = firstGeneration;\n this.state.eventSecondColliderIndices[event] = second;\n this.state.eventSecondColliderGenerations[event] = secondGeneration;\n this.state.eventNormalX[event] = fact?.normalX ?? 0;\n this.state.eventNormalY[event] = fact?.normalY ?? 0;\n this.state.eventPointCounts[event] = fact?.pointCount ?? 0;\n this.state.eventTotalNormalImpulses[event] = fact?.totalNormalImpulse ?? 0;\n const pointBase = event * 2;\n for (let point = 0; point < 2; point += 1) {\n this.state.eventPointFirstX[pointBase + point] =\n fact?.pointFirstX[point] ?? 0;\n this.state.eventPointFirstY[pointBase + point] =\n fact?.pointFirstY[point] ?? 0;\n this.state.eventPointSecondX[pointBase + point] =\n fact?.pointSecondX[point] ?? 0;\n this.state.eventPointSecondY[pointBase + point] =\n fact?.pointSecondY[point] ?? 0;\n this.state.eventPointSeparations[pointBase + point] =\n fact?.pointSeparations[point] ?? 0;\n }\n this.state.eventCount += 1;\n }\n\n private ensureEventCapacity(required: number): void {\n if (required <= this.state.eventKinds.length) return;\n let capacity = this.state.eventKinds.length * 2;\n while (capacity < required) capacity *= 2;\n this.state.eventTicks = growFloat64(this.state.eventTicks, capacity);\n this.state.eventKinds = growUint8(this.state.eventKinds, capacity);\n this.state.eventFirstColliderIndices = growInt32(\n this.state.eventFirstColliderIndices,\n capacity,\n );\n this.state.eventFirstColliderGenerations = growUint32(\n this.state.eventFirstColliderGenerations,\n capacity,\n );\n this.state.eventSecondColliderIndices = growInt32(\n this.state.eventSecondColliderIndices,\n capacity,\n );\n this.state.eventSecondColliderGenerations = growUint32(\n this.state.eventSecondColliderGenerations,\n capacity,\n );\n this.state.eventNormalX = growFloat64(this.state.eventNormalX, capacity);\n this.state.eventNormalY = growFloat64(this.state.eventNormalY, capacity);\n this.state.eventPointCounts = growUint8(\n this.state.eventPointCounts,\n capacity,\n );\n this.state.eventPointFirstX = growFloat64(\n this.state.eventPointFirstX,\n capacity * 2,\n );\n this.state.eventPointFirstY = growFloat64(\n this.state.eventPointFirstY,\n capacity * 2,\n );\n this.state.eventPointSecondX = growFloat64(\n this.state.eventPointSecondX,\n capacity * 2,\n );\n this.state.eventPointSecondY = growFloat64(\n this.state.eventPointSecondY,\n capacity * 2,\n );\n this.state.eventPointSeparations = growFloat64(\n this.state.eventPointSeparations,\n capacity * 2,\n );\n this.state.eventTotalNormalImpulses = growFloat64(\n this.state.eventTotalNormalImpulses,\n capacity,\n );\n }\n\n private capturePreviousPoses(): void {\n for (let offset = 0; offset < this.state.bodyCount; offset += 1) {\n this.snapPreviousPose(this.state.bodyIndices[offset]!);\n }\n }\n\n private snapPreviousPose(index: number): void {\n this.state.previousPositionX[index] = this.bodies.positionX[index]!;\n this.state.previousPositionY[index] = this.bodies.positionY[index]!;\n this.state.previousRotationRadians[index] =\n this.bodies.rotationRadians[index]!;\n }\n\n private setBodyOriginPose(index: number, pose: PhysicsPose2D): void {\n const rotationRadians = pose.rotationDegrees / RADIANS_TO_DEGREES;\n const center = centerFromOrigin(\n this.bodies,\n index,\n pose.position[0],\n pose.position[1],\n rotationRadians,\n );\n this.bodies.positionX[index] = center[0];\n this.bodies.positionY[index] = center[1];\n this.bodies.rotationRadians[index] = rotationRadians;\n }\n\n private rebuildBodyIndices(): void {\n this.ensureBodyScratchCapacity();\n const indices = [...this.state.bodySlots.values()]\n .map((slot) => slot.index)\n .sort((first, second) => first - second);\n this.state.bodyCount = indices.length;\n for (let offset = 0; offset < indices.length; offset += 1) {\n this.state.bodyIndices[offset] = indices[offset]!;\n }\n }\n\n private rebuildIntegrationBodyIndices(): void {\n let count = 0;\n for (let offset = 0; offset < this.state.bodyCount; offset += 1) {\n const body = this.state.bodyIndices[offset]!;\n if ((this.bodies.flags[body]! & BODY_SLEEPING_2D) !== 0) continue;\n this.state.integrationBodyIndices[count] = body;\n count += 1;\n }\n this.state.integrationBodyCount = count;\n }\n\n private ensureBodyScratchCapacity(): void {\n if (this.bodies.capacity <= this.state.previousPositionX.length) return;\n const capacity = this.bodies.capacity;\n this.state.previousPositionX = growFloat64(\n this.state.previousPositionX,\n capacity,\n );\n this.state.previousPositionY = growFloat64(\n this.state.previousPositionY,\n capacity,\n );\n this.state.previousRotationRadians = growFloat64(\n this.state.previousRotationRadians,\n capacity,\n );\n this.state.bodyIndices = growInt32(this.state.bodyIndices, capacity);\n this.state.integrationBodyIndices = growInt32(\n this.state.integrationBodyIndices,\n capacity,\n );\n }\n\n private wakeBody(bodyIndex: number): boolean {\n const wasSleeping =\n (this.bodies.flags[bodyIndex]! & BODY_SLEEPING_2D) !== 0;\n let targetWakeRecorded = false;\n const islandChanged = this.solver.wakeIslandContainingCandidate(\n this.bodies,\n bodyIndex,\n (body, sleeping) => {\n if (body === bodyIndex && !sleeping) targetWakeRecorded = true;\n this.appendEvent(sleeping ? 6 : 5, body, NO_INDEX);\n },\n );\n this.bodies.flags[bodyIndex] &= ~BODY_SLEEPING_2D;\n this.bodies.sleepTime[bodyIndex] = 0;\n if (wasSleeping && !targetWakeRecorded) {\n this.appendEvent(5, bodyIndex, NO_INDEX);\n }\n return wasSleeping || islandChanged;\n }\n\n private releaseCollider(slot: ColliderSlot2D): void {\n const proxy = this.colliders.proxyIndices[slot.index]!;\n const proxyGeneration = this.colliders.proxyGenerations[slot.index]!;\n if (proxy !== NO_INDEX)\n this.broadPhase.destroyProxy(proxy, proxyGeneration);\n this.colliders.release(slot.index, slot.generation);\n }\n\n private captureCheckpoint(): WorldCheckpoint2D {\n return {\n rapier: this.simulation?.checkpoint(),\n snapshots: [\n captureObject(this.state),\n captureObject(this.counters),\n captureObject(this.bodies),\n captureObject(this.colliders),\n captureObject(this.broadPhase),\n captureObject(this.contacts),\n captureObject(this.solver),\n captureObject(this.positionSolver),\n captureObject(this.ccd),\n ],\n };\n }\n\n private restoreCheckpoint(checkpoint: WorldCheckpoint2D): void {\n if (checkpoint.rapier) this.simulation!.restore(checkpoint.rapier);\n for (let index = checkpoint.snapshots.length - 1; index >= 0; index -= 1) {\n restoreObject(checkpoint.snapshots[index]!);\n }\n }\n\n private requireBody(bodyId: number): BodySlot2D {\n const slot = this.state.bodySlots.get(bodyId);\n if (slot === undefined) throw new Error(`unknown physics body ${bodyId}.`);\n return slot;\n }\n\n private hasAdvanceWork(): boolean {\n if (this.pendingTopology !== undefined || this.pendingCommands.length > 0) {\n return true;\n }\n for (let offset = 0; offset < this.state.bodyCount; offset += 1) {\n const body = this.state.bodyIndices[offset]!;\n if ((this.bodies.flags[body]! & BODY_TYPE_KINEMATIC_2D) !== 0)\n return true;\n if ((this.bodies.flags[body]! & BODY_SLEEPING_2D) === 0) return true;\n }\n return false;\n }\n\n private hasKinematicBodies(): boolean {\n for (let offset = 0; offset < this.state.bodyCount; offset += 1) {\n const body = this.state.bodyIndices[offset]!;\n if ((this.bodies.flags[body]! & BODY_TYPE_KINEMATIC_2D) !== 0)\n return true;\n }\n return false;\n }\n\n private assertCandidate(candidate: PhysicsWorld2DCandidate): void {\n this.assertUsable();\n if (\n candidate.owner !== this ||\n candidate !== this.liveCandidate ||\n candidate.lifecycle !== \"live\"\n ) {\n throw new Error(\"candidate is not the live candidate for this world.\");\n }\n }\n\n private assertUsable(): void {\n if (this.disposed) throw new Error(\"physics world is disposed.\");\n }\n}\n\nexport function normalizePhysicsWorld2DConfiguration(\n configuration: PhysicsWorld2DConfiguration,\n): NormalizedPhysicsWorld2DConfiguration {\n const gravity = configuration.gravity ?? DEFAULT_GRAVITY;\n if (\n gravity.length !== 2 ||\n !Number.isFinite(gravity[0]) ||\n !Number.isFinite(gravity[1])\n ) {\n throw new RangeError(\"gravity must contain two finite numbers.\");\n }\n const fixedStepMilliseconds =\n configuration.fixedStepMilliseconds ?? DEFAULT_FIXED_STEP_MILLISECONDS;\n if (!Number.isFinite(fixedStepMilliseconds) || fixedStepMilliseconds <= 0) {\n throw new RangeError(\"fixedStepMilliseconds must be finite and positive.\");\n }\n const maxCatchUpSteps =\n configuration.maxCatchUpSteps ?? DEFAULT_MAX_CATCH_UP_STEPS;\n validateIntegerRange(\n maxCatchUpSteps,\n MIN_CATCH_UP_STEPS,\n MAX_CATCH_UP_STEPS,\n \"maxCatchUpSteps\",\n );\n const interpolation = configuration.interpolation ?? DEFAULT_INTERPOLATION;\n if (interpolation !== \"linear\" && interpolation !== \"none\") {\n throw new RangeError('interpolation must be \"linear\" or \"none\".');\n }\n const velocityIterations =\n configuration.solver?.velocityIterations ??\n configuration.velocityIterations ??\n DEFAULT_VELOCITY_ITERATIONS;\n const positionIterations =\n configuration.solver?.positionIterations ??\n configuration.positionIterations ??\n DEFAULT_POSITION_ITERATIONS;\n validateIntegerRange(\n velocityIterations,\n MIN_SOLVER_ITERATIONS,\n MAX_SOLVER_ITERATIONS,\n \"velocityIterations\",\n );\n validateIntegerRange(\n positionIterations,\n MIN_SOLVER_ITERATIONS,\n MAX_SOLVER_ITERATIONS,\n \"positionIterations\",\n );\n return Object.freeze({\n gravityX: gravity[0],\n gravityY: gravity[1],\n fixedStepMilliseconds,\n maxCatchUpSteps,\n interpolation,\n sleeping: configuration.sleeping ?? DEFAULT_SLEEPING,\n velocityIterations,\n positionIterations,\n });\n}\n\nfunction captureObject(target: object): ObjectSnapshot {\n const record = target as Record<PropertyKey, unknown>;\n const values = Reflect.ownKeys(record).map((key): ValueSnapshot => {\n const value = record[key];\n if (ArrayBuffer.isView(value) && !(value instanceof DataView)) {\n return {\n key,\n kind: \"typed-array\",\n reference: value,\n contents: (value as Float64Array).slice(),\n };\n }\n if (Array.isArray(value)) {\n return { key, kind: \"array\", reference: value, contents: [...value] };\n }\n if (value instanceof Map) {\n return {\n key,\n kind: \"map\",\n reference: value,\n contents: [...value.entries()],\n };\n }\n return { key, kind: \"value\", reference: value };\n });\n return { target: record, values };\n}\n\nfunction restoreObject(snapshot: ObjectSnapshot): void {\n for (let index = snapshot.values.length - 1; index >= 0; index -= 1) {\n const value = snapshot.values[index]!;\n switch (value.kind) {\n case \"typed-array\": {\n snapshot.target[value.key] = value.reference;\n const target = value.reference as Float64Array;\n target.set(value.contents as Float64Array);\n break;\n }\n case \"array\": {\n snapshot.target[value.key] = value.reference;\n const target = value.reference as unknown[];\n target.length = 0;\n target.push(...(value.contents as unknown[]));\n break;\n }\n case \"map\": {\n snapshot.target[value.key] = value.reference;\n const target = value.reference as Map<unknown, unknown>;\n target.clear();\n for (const [key, entry] of value.contents as readonly (readonly [\n unknown,\n unknown,\n ])[]) {\n target.set(key, entry);\n }\n break;\n }\n case \"value\":\n snapshot.target[value.key] = value.reference;\n break;\n }\n }\n}\n\nfunction validateTopology(records: readonly PhysicsTopologyRecord2D[]): void {\n const bodies = new Set<number>();\n const colliders = new Set<number>();\n for (const record of records) {\n validateId(record.id, `${record.kind} id`);\n const ids = record.kind === \"body\" ? bodies : colliders;\n if (ids.has(record.id)) {\n throw new Error(`duplicate ${record.kind} id ${record.id}.`);\n }\n ids.add(record.id);\n if (record.kind === \"body\") validateBodyDefinition(record.definition);\n else validateId(record.bodyId, \"collider bodyId\");\n }\n for (const record of records) {\n if (record.kind === \"collider\" && !bodies.has(record.bodyId)) {\n throw new Error(\n `collider ${record.id} references missing body ${record.bodyId}.`,\n );\n }\n }\n}\n\nfunction hasColliderHandler(handlers: unknown, name: \"onHit\"): boolean {\n return (\n typeof handlers === \"object\" &&\n handlers !== null &&\n typeof (handlers as Readonly<Record<string, unknown>>)[name] === \"function\"\n );\n}\n\nfunction validateBodyDefinition(definition: BodyDefinition2D): void {\n for (const [name, value] of Object.entries(definition)) {\n if (name === \"owner\" || name === \"flags\") continue;\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new RangeError(`body ${name} must be finite.`);\n }\n }\n if (!Number.isSafeInteger(definition.flags) || definition.flags < 0) {\n throw new RangeError(\"body flags must be a nonnegative safe integer.\");\n }\n}\n\nfunction validateCommand(command: PhysicsCommand2D): void {\n if (command.kind === \"configure\") {\n normalizePhysicsWorld2DConfiguration(command.configuration);\n return;\n }\n validateId(command.bodyId, \"command bodyId\");\n if (command.kind === \"set-pose\") {\n validatePose(command.pose, \"command pose\");\n return;\n }\n if (command.kind === \"enable\") {\n if (command.velocity !== \"zero\" && command.velocity !== \"preserve\") {\n throw new RangeError('command velocity must be \"zero\" or \"preserve\".');\n }\n return;\n }\n for (const [name, value] of Object.entries(command)) {\n if (name === \"kind\" || name === \"bodyId\" || name === \"wake\") continue;\n if ((name === \"pointX\" || name === \"pointY\") && value === undefined)\n continue;\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new RangeError(`command ${name} must be finite.`);\n }\n }\n}\n\nfunction injectFailure(stage: PhysicsWorld2DFailureStage): void {\n failureInjector?.(stage);\n}\n\nfunction validatePose(pose: PhysicsPose2D, path: string): void {\n if (\n pose.position.length !== 2 ||\n !Number.isFinite(pose.position[0]) ||\n !Number.isFinite(pose.position[1]) ||\n !Number.isFinite(pose.rotationDegrees)\n ) {\n throw new RangeError(`${path} must contain finite position and rotation.`);\n }\n}\n\nfunction validateId(value: number, path: string): void {\n if (!Number.isSafeInteger(value) || value < 0) {\n throw new RangeError(`${path} must be a nonnegative safe integer.`);\n }\n}\n\nfunction validateIntegerRange(\n value: number,\n minimum: number,\n maximum: number,\n path: string,\n): void {\n if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {\n throw new RangeError(\n `${path} must be an integer from ${minimum} through ${maximum}.`,\n );\n }\n}\n\nfunction writeBodyDefinition(\n bodies: BodyStore2D,\n index: number,\n definition: BodyDefinition2D,\n): void {\n bodies.positionX[index] = definition.positionX;\n bodies.positionY[index] = definition.positionY;\n bodies.rotationRadians[index] = definition.rotationRadians;\n bodies.localCenterX[index] = definition.localCenterX ?? 0;\n bodies.localCenterY[index] = definition.localCenterY ?? 0;\n bodies.linearVelocityX[index] = definition.linearVelocityX;\n bodies.linearVelocityY[index] = definition.linearVelocityY;\n bodies.angularVelocity[index] = definition.angularVelocity;\n bodies.forceX[index] = definition.forceX;\n bodies.forceY[index] = definition.forceY;\n bodies.torque[index] = definition.torque;\n bodies.inverseMass[index] = definition.inverseMass;\n bodies.inverseInertia[index] = definition.inverseInertia;\n bodies.linearDamping[index] = definition.linearDamping;\n bodies.angularDamping[index] = definition.angularDamping;\n bodies.gravityScale[index] = definition.gravityScale;\n bodies.sleepTime[index] = definition.sleepTime;\n bodies.flags[index] = definition.flags;\n bodies.owners[index] = definition.owner;\n}\n\nfunction sameBodyDefinition(\n first: BodyDefinition2D | undefined,\n second: BodyDefinition2D,\n): boolean {\n return (\n first !== undefined &&\n first.positionX === second.positionX &&\n first.positionY === second.positionY &&\n first.rotationRadians === second.rotationRadians &&\n (first.localCenterX ?? 0) === (second.localCenterX ?? 0) &&\n (first.localCenterY ?? 0) === (second.localCenterY ?? 0) &&\n first.linearVelocityX === second.linearVelocityX &&\n first.linearVelocityY === second.linearVelocityY &&\n first.angularVelocity === second.angularVelocity &&\n first.forceX === second.forceX &&\n first.forceY === second.forceY &&\n first.torque === second.torque &&\n first.inverseMass === second.inverseMass &&\n first.inverseInertia === second.inverseInertia &&\n first.linearDamping === second.linearDamping &&\n first.angularDamping === second.angularDamping &&\n first.gravityScale === second.gravityScale &&\n first.sleepTime === second.sleepTime &&\n first.flags === second.flags &&\n first.owner === second.owner\n );\n}\n\nfunction sameColliderRecord(\n first: PhysicsColliderTopologyRecord2D | undefined,\n second: PhysicsColliderTopologyRecord2D,\n): boolean {\n return (\n first !== undefined &&\n first.bodyId === second.bodyId &&\n first.definition.shape === second.definition.shape &&\n first.definition.flags === second.definition.flags &&\n shallowRecordEqual(first.definition.material, second.definition.material) &&\n shallowRecordEqual(first.definition.filter, second.definition.filter)\n );\n}\n\nfunction shallowRecordEqual(first: unknown, second: unknown): boolean {\n if (first === second) return true;\n if (\n typeof first !== \"object\" ||\n first === null ||\n typeof second !== \"object\" ||\n second === null\n ) {\n return false;\n }\n const firstEntries = Object.entries(first);\n const secondRecord = second as Record<string, unknown>;\n if (firstEntries.length !== Object.keys(secondRecord).length) return false;\n return firstEntries.every(([key, value]) => secondRecord[key] === value);\n}\n\nfunction colliderBounds(\n shape: ColliderDefinition2D[\"shape\"],\n x: number,\n y: number,\n rotation: number,\n): readonly [number, number, number, number] {\n const bounds = shape.localBounds;\n const cosine = Math.cos(rotation);\n const sine = Math.sin(rotation);\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (let corner = 0; corner < 4; corner += 1) {\n const localX = corner % 2 === 0 ? bounds[0]! : bounds[2]!;\n const localY = corner < 2 ? bounds[1]! : bounds[3]!;\n const worldX = x + cosine * localX - sine * localY;\n const worldY = y + sine * localX + cosine * localY;\n minX = Math.min(minX, worldX);\n minY = Math.min(minY, worldY);\n maxX = Math.max(maxX, worldX);\n maxY = Math.max(maxY, worldY);\n }\n return [minX, minY, maxX, maxY];\n}\n\nfunction internalPose(bodies: BodyStore2D, index: number): InternalPose2D {\n const rotationRadians = bodies.rotationRadians[index]!;\n const cosine = Math.cos(rotationRadians);\n const sine = Math.sin(rotationRadians);\n const localCenterX = bodies.localCenterX[index]!;\n const localCenterY = bodies.localCenterY[index]!;\n return {\n x: bodies.positionX[index]! - cosine * localCenterX + sine * localCenterY,\n y: bodies.positionY[index]! - sine * localCenterX - cosine * localCenterY,\n rotationRadians,\n };\n}\n\nfunction centerFromOrigin(\n bodies: BodyStore2D,\n index: number,\n originX: number,\n originY: number,\n rotationRadians: number,\n): readonly [number, number] {\n const cosine = Math.cos(rotationRadians);\n const sine = Math.sin(rotationRadians);\n const localCenterX = bodies.localCenterX[index]!;\n const localCenterY = bodies.localCenterY[index]!;\n return [\n originX + cosine * localCenterX - sine * localCenterY,\n originY + sine * localCenterX + cosine * localCenterY,\n ];\n}\n\nfunction publicBodyOriginPose(\n bodies: BodyStore2D,\n index: number,\n): PhysicsPose2D {\n const pose = internalPose(bodies, index);\n return publicPose(pose.x, pose.y, pose.rotationRadians);\n}\n\nfunction publicPoseFromCenter(\n bodies: BodyStore2D,\n index: number,\n centerX: number,\n centerY: number,\n rotationRadians: number,\n): PhysicsPose2D {\n const cosine = Math.cos(rotationRadians);\n const sine = Math.sin(rotationRadians);\n const localCenterX = bodies.localCenterX[index]!;\n const localCenterY = bodies.localCenterY[index]!;\n return publicPose(\n centerX - cosine * localCenterX + sine * localCenterY,\n centerY - sine * localCenterX - cosine * localCenterY,\n rotationRadians,\n );\n}\n\nfunction publicPose(\n x: number,\n y: number,\n rotationRadians: number,\n): PhysicsPose2D {\n return Object.freeze({\n position: Object.freeze([x, y] as const),\n rotationDegrees: rotationRadians * RADIANS_TO_DEGREES,\n });\n}\n\nfunction shortestRadians(from: number, to: number): number {\n const full = Math.PI * 2;\n let delta = ((((to - from + Math.PI) % full) + full) % full) - Math.PI;\n if (delta === -Math.PI) delta = Math.PI;\n return delta;\n}\n\nfunction lerp(from: number, to: number, amount: number): number {\n return from + (to - from) * amount;\n}\n\nfunction sortedEntries<T>(\n map: ReadonlyMap<number, T>,\n descending = false,\n): readonly (readonly [number, T])[] {\n return [...map.entries()].sort(([first], [second]) =>\n descending ? second - first : first - second,\n );\n}\n\nfunction contactKey(\n first: number,\n firstGeneration: number,\n second: number,\n secondGeneration: number,\n): string {\n return `${String(first)}:${String(firstGeneration)}:${String(second)}:${String(secondGeneration)}`;\n}\n\nfunction growFloat64(source: Float64Array, capacity: number): Float64Array {\n const result = new Float64Array(capacity);\n result.set(source);\n return result;\n}\n\nfunction growInt32(source: Int32Array, capacity: number): Int32Array {\n const result = new Int32Array(capacity);\n result.set(source);\n return result;\n}\n\nfunction growUint8(source: Uint8Array, capacity: number): Uint8Array {\n const result = new Uint8Array(capacity);\n result.set(source);\n return result;\n}\n\nfunction growUint32(source: Uint32Array, capacity: number): Uint32Array {\n const result = new Uint32Array(capacity);\n result.set(source);\n return result;\n}\n"],
|
|
5
|
+
"mappings": "AAEA,SAAS,qCAAqC;AAE9C;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,iCAAiC;AAC1C,SAAS,wCAAwC;AACjD,SAAS,+BAA+B;AACxC,SAAS,cAAc,+BAA+B;AACtD,SAAS,gBAAgB,kCAAkC;AAC3D;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,kBAAkB,iCAAiC;AAC5D;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AAEP,MAAM,WAAW;AA4HjB,IAAI;AAGG,SAAS,4CACd,UACY;AACZ,QAAM,WAAW;AACjB,oBAAkB;AAClB,SAAO,MAAM;AACX,QAAI,oBAAoB,SAAU,mBAAkB;AAAA,EACtD;AACF;AAsHO,MAAM,wBAAwB;AAAA,EAGnC,YACW,OACD,YACC,SACA,aACA,WACA,MACA,yBACA,iBACA,aACA,YACA,YACA,YACA,2BACA,+BACA,4BACA,gCACA,cACA,cACA,kBACA,kBACA,kBACA,mBACA,mBACA,uBACA,0BACA,kBACA,iBACA,cACT;AA5BS;AACD;AACC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EACR;AAAA,EA5BQ;AAAA,EACD;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EA9BH,SAA2C;AAAA,EAiCnD,IAAI,YAA8C;AA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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type SignalValue } from "@pibbl/core";
|
|
2
|
+
export type SignalFields<T extends object> = {
|
|
3
|
+
readonly [K in keyof T]: SignalValue<T[K]>;
|
|
4
|
+
};
|
|
5
|
+
export declare function resolveSignalFields<T extends object>(source: SignalFields<T>, preserve?: ReadonlySet<PropertyKey>): T;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isSignal,
|
|
3
|
+
resolveSignalValue
|
|
4
|
+
} from "@pibbl/core";
|
|
5
|
+
function resolveSignalFields(source, preserve = EMPTY_KEYS) {
|
|
6
|
+
let resolved;
|
|
7
|
+
for (const key in source) {
|
|
8
|
+
if (preserve.has(key)) continue;
|
|
9
|
+
const value = source[key];
|
|
10
|
+
if (!isSignal(value)) continue;
|
|
11
|
+
resolved ??= { ...source };
|
|
12
|
+
resolved[key] = resolveSignalValue(value);
|
|
13
|
+
}
|
|
14
|
+
return resolved ?? source;
|
|
15
|
+
}
|
|
16
|
+
const EMPTY_KEYS = /* @__PURE__ */ new Set();
|
|
17
|
+
export {
|
|
18
|
+
resolveSignalFields
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=signal-inputs.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/features/physics/lib/shared/signal-inputs.ts"],
|
|
4
|
+
"sourcesContent": ["import {\n isSignal,\n resolveSignalValue,\n type SignalValue,\n} from \"@pibbl/core\";\n\nexport type SignalFields<T extends object> = {\n readonly [K in keyof T]: SignalValue<T[K]>;\n};\n\nexport function resolveSignalFields<T extends object>(\n source: SignalFields<T>,\n preserve: ReadonlySet<PropertyKey> = EMPTY_KEYS,\n): T {\n let resolved: Record<PropertyKey, unknown> | undefined;\n for (const key in source) {\n if (preserve.has(key)) continue;\n const value = source[key as keyof SignalFields<T>];\n if (!isSignal(value)) continue;\n resolved ??= { ...source };\n resolved[key] = resolveSignalValue(value);\n }\n return (resolved ?? source) as T;\n}\n\nconst EMPTY_KEYS = new Set<PropertyKey>();\n"],
|
|
5
|
+
"mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AAMA,SAAS,oBACd,QACA,WAAqC,YAClC;AACH,MAAI;AACJ,aAAW,OAAO,QAAQ;AACxB,QAAI,SAAS,IAAI,GAAG,EAAG;AACvB,UAAM,QAAQ,OAAO,GAA4B;AACjD,QAAI,CAAC,SAAS,KAAK,EAAG;AACtB,iBAAa,EAAE,GAAG,OAAO;AACzB,aAAS,GAAG,IAAI,mBAAmB,KAAK;AAAA,EAC1C;AACA,SAAQ,YAAY;AACtB;AAEA,MAAM,aAAa,oBAAI,IAAiB;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function requireFiniteNumber(value: number, path: string): number;
|
|
2
|
+
export declare function requirePositiveNumber(value: number, path: string): number;
|
|
3
|
+
export declare function requireNonnegativeNumber(value: number, path: string): number;
|
|
4
|
+
export declare function requireSafeIntegerInRange(value: number, minimum: number, maximum: number, path: string): number;
|
|
5
|
+
export declare function copyFiniteVector2(value: readonly [x: number, y: number], path: string): readonly [x: number, y: number];
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
function requireFiniteNumber(value, path) {
|
|
2
|
+
if (!Number.isFinite(value)) {
|
|
3
|
+
throw new TypeError(
|
|
4
|
+
`${path} must be a finite number; received ${String(value)}.`
|
|
5
|
+
);
|
|
6
|
+
}
|
|
7
|
+
return value;
|
|
8
|
+
}
|
|
9
|
+
function requirePositiveNumber(value, path) {
|
|
10
|
+
requireFiniteNumber(value, path);
|
|
11
|
+
if (value <= 0) {
|
|
12
|
+
throw new RangeError(
|
|
13
|
+
`${path} must be greater than zero; received ${String(value)}.`
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function requireNonnegativeNumber(value, path) {
|
|
19
|
+
requireFiniteNumber(value, path);
|
|
20
|
+
if (value < 0) {
|
|
21
|
+
throw new RangeError(
|
|
22
|
+
`${path} must be nonnegative; received ${String(value)}.`
|
|
23
|
+
);
|
|
24
|
+
}
|
|
25
|
+
return value;
|
|
26
|
+
}
|
|
27
|
+
function requireSafeIntegerInRange(value, minimum, maximum, path) {
|
|
28
|
+
if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
|
|
29
|
+
throw new RangeError(
|
|
30
|
+
`${path} must be a safe integer from ${minimum} through ${maximum}; received ${String(value)}.`
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function copyFiniteVector2(value, path) {
|
|
36
|
+
return Object.freeze([
|
|
37
|
+
requireFiniteNumber(value[0], `${path}[0]`),
|
|
38
|
+
requireFiniteNumber(value[1], `${path}[1]`)
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
export {
|
|
42
|
+
copyFiniteVector2,
|
|
43
|
+
requireFiniteNumber,
|
|
44
|
+
requireNonnegativeNumber,
|
|
45
|
+
requirePositiveNumber,
|
|
46
|
+
requireSafeIntegerInRange
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../src/features/physics/lib/shared/validation.ts"],
|
|
4
|
+
"sourcesContent": ["export function requireFiniteNumber(value: number, path: string): number {\n if (!Number.isFinite(value)) {\n throw new TypeError(\n `${path} must be a finite number; received ${String(value)}.`,\n );\n }\n return value;\n}\n\nexport function requirePositiveNumber(value: number, path: string): number {\n requireFiniteNumber(value, path);\n if (value <= 0) {\n throw new RangeError(\n `${path} must be greater than zero; received ${String(value)}.`,\n );\n }\n return value;\n}\n\nexport function requireNonnegativeNumber(value: number, path: string): number {\n requireFiniteNumber(value, path);\n if (value < 0) {\n throw new RangeError(\n `${path} must be nonnegative; received ${String(value)}.`,\n );\n }\n return value;\n}\n\nexport function requireSafeIntegerInRange(\n value: number,\n minimum: number,\n maximum: number,\n path: string,\n): number {\n if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {\n throw new RangeError(\n `${path} must be a safe integer from ${minimum} through ${maximum}; ` +\n `received ${String(value)}.`,\n );\n }\n return value;\n}\n\nexport function copyFiniteVector2(\n value: readonly [x: number, y: number],\n path: string,\n): readonly [x: number, y: number] {\n return Object.freeze([\n requireFiniteNumber(value[0], `${path}[0]`),\n requireFiniteNumber(value[1], `${path}[1]`),\n ] as const);\n}\n"],
|
|
5
|
+
"mappings": "AAAO,SAAS,oBAAoB,OAAe,MAAsB;AACvE,MAAI,CAAC,OAAO,SAAS,KAAK,GAAG;AAC3B,UAAM,IAAI;AAAA,MACR,GAAG,IAAI,sCAAsC,OAAO,KAAK,CAAC;AAAA,IAC5D;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,sBAAsB,OAAe,MAAsB;AACzE,sBAAoB,OAAO,IAAI;AAC/B,MAAI,SAAS,GAAG;AACd,UAAM,IAAI;AAAA,MACR,GAAG,IAAI,wCAAwC,OAAO,KAAK,CAAC;AAAA,IAC9D;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,yBAAyB,OAAe,MAAsB;AAC5E,sBAAoB,OAAO,IAAI;AAC/B,MAAI,QAAQ,GAAG;AACb,UAAM,IAAI;AAAA,MACR,GAAG,IAAI,kCAAkC,OAAO,KAAK,CAAC;AAAA,IACxD;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,0BACd,OACA,SACA,SACA,MACQ;AACR,MAAI,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,WAAW,QAAQ,SAAS;AACtE,UAAM,IAAI;AAAA,MACR,GAAG,IAAI,gCAAgC,OAAO,YAAY,OAAO,cACrD,OAAO,KAAK,CAAC;AAAA,IAC3B;AAAA,EACF;AACA,SAAO;AACT;AAEO,SAAS,kBACd,OACA,MACiC;AACjC,SAAO,OAAO,OAAO;AAAA,IACnB,oBAAoB,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK;AAAA,IAC1C,oBAAoB,MAAM,CAAC,GAAG,GAAG,IAAI,KAAK;AAAA,EAC5C,CAAU;AACZ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function aseprite() {
|
|
2
|
+
return { parse(data) {
|
|
3
|
+
const value = data;
|
|
4
|
+
if (!value?.frames || typeof value.meta?.image !== "string") throw new TypeError("Expected Aseprite frames and meta.image.");
|
|
5
|
+
const entries = Array.isArray(value.frames) ? value.frames.map((entry, index) => [entry.filename ?? String(index), entry]) : Object.entries(value.frames);
|
|
6
|
+
const frames = entries.map(([name, entry]) => ({ name, rect: { x: entry.frame.x, y: entry.frame.y, width: entry.frame.w, height: entry.frame.h }, sourceSize: entry.sourceSize && { width: entry.sourceSize.w, height: entry.sourceSize.h }, trim: entry.spriteSourceSize && { x: entry.spriteSourceSize.x, y: entry.spriteSourceSize.y }, rotated: entry.rotated }));
|
|
7
|
+
const animations = /* @__PURE__ */ Object.create(null);
|
|
8
|
+
for (const tag of value.meta.frameTags ?? []) {
|
|
9
|
+
if (!Number.isInteger(tag.from) || !Number.isInteger(tag.to) || tag.from < 0 || tag.to < tag.from || tag.to >= entries.length) throw new RangeError(`Invalid Aseprite tag: ${tag.name}`);
|
|
10
|
+
let selected = entries.slice(tag.from, tag.to + 1);
|
|
11
|
+
const direction = tag.direction ?? "forward";
|
|
12
|
+
if (!["forward", "reverse", "pingpong", "pingpong_reverse"].includes(direction)) throw new Error(`Unsupported Aseprite direction: ${direction}`);
|
|
13
|
+
if (direction === "reverse" || direction === "pingpong_reverse") selected.reverse();
|
|
14
|
+
if (direction.startsWith("pingpong")) selected = [...selected, ...selected.slice(1, -1).reverse()];
|
|
15
|
+
animations[tag.name] = selected.map(([frame, entry]) => ({ frame, duration: entry.duration }));
|
|
16
|
+
}
|
|
17
|
+
return { images: [value.meta.image], frames, animations };
|
|
18
|
+
} };
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
aseprite
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=aseprite.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/sprites/formats/aseprite.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SpriteSheetFormat, SpriteFrameData, SpriteAnimationFrameData } from '../model.js';\n/** Import Aseprite JSON hash or array exports, including frame tags and millisecond timing. See {@link SpriteSheetFormat}.\n * @returns An explicit atlas metadata adapter.\n */\nexport function aseprite(): SpriteSheetFormat {\n return { parse(data: unknown) {\n const value = data as { frames: Record<string, Entry> | Entry[]; meta: { image: string; frameTags?: { name: string; from: number; to: number; direction?: string }[] } };\n if (!value?.frames || typeof value.meta?.image !== 'string') throw new TypeError('Expected Aseprite frames and meta.image.');\n const entries = Array.isArray(value.frames) ? value.frames.map((entry, index) => [entry.filename ?? String(index), entry] as const) : Object.entries(value.frames);\n const frames: SpriteFrameData[] = entries.map(([name, entry]) => ({ name, rect: { x: entry.frame.x, y: entry.frame.y, width: entry.frame.w, height: entry.frame.h }, sourceSize: entry.sourceSize && { width: entry.sourceSize.w, height: entry.sourceSize.h }, trim: entry.spriteSourceSize && { x: entry.spriteSourceSize.x, y: entry.spriteSourceSize.y }, rotated: entry.rotated }));\n const animations: Record<string, SpriteAnimationFrameData[]> = Object.create(null);\n for (const tag of value.meta.frameTags ?? []) {\n if (!Number.isInteger(tag.from) || !Number.isInteger(tag.to) || tag.from < 0 || tag.to < tag.from || tag.to >= entries.length) throw new RangeError(`Invalid Aseprite tag: ${tag.name}`);\n let selected = entries.slice(tag.from, tag.to + 1);\n const direction = tag.direction ?? 'forward';\n if (!['forward', 'reverse', 'pingpong', 'pingpong_reverse'].includes(direction)) throw new Error(`Unsupported Aseprite direction: ${direction}`);\n if (direction === 'reverse' || direction === 'pingpong_reverse') selected.reverse();\n if (direction.startsWith('pingpong')) selected = [...selected, ...selected.slice(1, -1).reverse()];\n animations[tag.name] = selected.map(([frame, entry]) => ({ frame, duration: entry.duration }));\n }\n return { images: [value.meta.image], frames, animations };\n } };\n}\ninterface Entry {\n filename?: string;\n frame: { x: number; y: number; w: number; h: number };\n rotated?: boolean;\n sourceSize?: { w: number; h: number };\n spriteSourceSize?: { x: number; y: number };\n duration: number;\n}\n"],
|
|
5
|
+
"mappings": "AAIO,SAAS,WAA8B;AAC5C,SAAO,EAAE,MAAM,MAAe;AAC5B,UAAM,QAAQ;AACd,QAAI,CAAC,OAAO,UAAU,OAAO,MAAM,MAAM,UAAU,SAAU,OAAM,IAAI,UAAU,0CAA0C;AAC3H,UAAM,UAAU,MAAM,QAAQ,MAAM,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,OAAO,UAAU,CAAC,MAAM,YAAY,OAAO,KAAK,GAAG,KAAK,CAAU,IAAI,OAAO,QAAQ,MAAM,MAAM;AACjK,UAAM,SAA4B,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,GAAG,GAAG,MAAM,MAAM,GAAG,OAAO,MAAM,MAAM,GAAG,QAAQ,MAAM,MAAM,EAAE,GAAG,YAAY,MAAM,cAAc,EAAE,OAAO,MAAM,WAAW,GAAG,QAAQ,MAAM,WAAW,EAAE,GAAG,MAAM,MAAM,oBAAoB,EAAE,GAAG,MAAM,iBAAiB,GAAG,GAAG,MAAM,iBAAiB,EAAE,GAAG,SAAS,MAAM,QAAQ,EAAE;AACvX,UAAM,aAAyD,uBAAO,OAAO,IAAI;AACjF,eAAW,OAAO,MAAM,KAAK,aAAa,CAAC,GAAG;AAC5C,UAAI,CAAC,OAAO,UAAU,IAAI,IAAI,KAAK,CAAC,OAAO,UAAU,IAAI,EAAE,KAAK,IAAI,OAAO,KAAK,IAAI,KAAK,IAAI,QAAQ,IAAI,MAAM,QAAQ,OAAQ,OAAM,IAAI,WAAW,yBAAyB,IAAI,IAAI,EAAE;AACvL,UAAI,WAAW,QAAQ,MAAM,IAAI,MAAM,IAAI,KAAK,CAAC;AACjD,YAAM,YAAY,IAAI,aAAa;AACnC,UAAI,CAAC,CAAC,WAAW,WAAW,YAAY,kBAAkB,EAAE,SAAS,SAAS,EAAG,OAAM,IAAI,MAAM,mCAAmC,SAAS,EAAE;AAC/I,UAAI,cAAc,aAAa,cAAc,mBAAoB,UAAS,QAAQ;AAClF,UAAI,UAAU,WAAW,UAAU,EAAG,YAAW,CAAC,GAAG,UAAU,GAAG,SAAS,MAAM,GAAG,EAAE,EAAE,QAAQ,CAAC;AACjG,iBAAW,IAAI,IAAI,IAAI,SAAS,IAAI,CAAC,CAAC,OAAO,KAAK,OAAO,EAAE,OAAO,UAAU,MAAM,SAAS,EAAE;AAAA,IAC/F;AACA,WAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,KAAK,GAAG,QAAQ,WAAW;AAAA,EAC1D,EAAE;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './aseprite.js';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
function texturePacker() {
|
|
2
|
+
return { parse(data) {
|
|
3
|
+
const value = data;
|
|
4
|
+
if (!value?.frames || typeof value.meta?.image !== "string") throw new TypeError("Expected TexturePacker frames and meta.image.");
|
|
5
|
+
if (value.meta.related_multi_packs?.length) throw new Error("Linked TexturePacker multipacks are not supported yet.");
|
|
6
|
+
if (value.meta.scale !== void 0 && Number(value.meta.scale) !== 1) throw new Error("TexturePacker scale must be 1.");
|
|
7
|
+
const entries = Array.isArray(value.frames) ? value.frames.map((entry, index) => [entry.filename ?? String(index), entry]) : Object.entries(value.frames);
|
|
8
|
+
return { images: [value.meta.image], frames: entries.map(([name, entry]) => ({ name, rect: { x: entry.frame.x, y: entry.frame.y, width: entry.frame.w, height: entry.frame.h }, sourceSize: entry.sourceSize && { width: entry.sourceSize.w, height: entry.sourceSize.h }, trim: entry.spriteSourceSize && { x: entry.spriteSourceSize.x, y: entry.spriteSourceSize.y }, rotated: entry.rotated })) };
|
|
9
|
+
} };
|
|
10
|
+
}
|
|
11
|
+
export {
|
|
12
|
+
texturePacker
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=texture-packer.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../src/features/sprites/formats/texture-packer.ts"],
|
|
4
|
+
"sourcesContent": ["import type { SpriteSheetFormat } from '../model.js';\n/** Import TexturePacker JSON hash/array rectangles with clockwise packed rotation and trim offsets. See {@link SpriteSheetFormat}.\n * @returns An explicit atlas metadata adapter.\n */\nexport function texturePacker(): SpriteSheetFormat {\n return { parse(data: unknown) {\n const value = data as { frames: Record<string, Entry> | Entry[]; meta: { image: string; scale?: string; related_multi_packs?: string[] } };\n if (!value?.frames || typeof value.meta?.image !== 'string') throw new TypeError('Expected TexturePacker frames and meta.image.');\n if (value.meta.related_multi_packs?.length) throw new Error('Linked TexturePacker multipacks are not supported yet.');\n if (value.meta.scale !== undefined && Number(value.meta.scale) !== 1) throw new Error('TexturePacker scale must be 1.');\n const entries = Array.isArray(value.frames) ? value.frames.map((entry, index) => [entry.filename ?? String(index), entry] as const) : Object.entries(value.frames);\n return { images: [value.meta.image], frames: entries.map(([name, entry]) => ({ name, rect: { x: entry.frame.x, y: entry.frame.y, width: entry.frame.w, height: entry.frame.h }, sourceSize: entry.sourceSize && { width: entry.sourceSize.w, height: entry.sourceSize.h }, trim: entry.spriteSourceSize && { x: entry.spriteSourceSize.x, y: entry.spriteSourceSize.y }, rotated: entry.rotated })) };\n } };\n}\ninterface Entry { filename?: string; frame: { x: number; y: number; w: number; h: number }; rotated?: boolean; sourceSize?: { w: number; h: number }; spriteSourceSize?: { x: number; y: number } }\n"],
|
|
5
|
+
"mappings": "AAIO,SAAS,gBAAmC;AACjD,SAAO,EAAE,MAAM,MAAe;AAC5B,UAAM,QAAQ;AACd,QAAI,CAAC,OAAO,UAAU,OAAO,MAAM,MAAM,UAAU,SAAU,OAAM,IAAI,UAAU,+CAA+C;AAChI,QAAI,MAAM,KAAK,qBAAqB,OAAQ,OAAM,IAAI,MAAM,wDAAwD;AACpH,QAAI,MAAM,KAAK,UAAU,UAAa,OAAO,MAAM,KAAK,KAAK,MAAM,EAAG,OAAM,IAAI,MAAM,gCAAgC;AACtH,UAAM,UAAU,MAAM,QAAQ,MAAM,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,OAAO,UAAU,CAAC,MAAM,YAAY,OAAO,KAAK,GAAG,KAAK,CAAU,IAAI,OAAO,QAAQ,MAAM,MAAM;AACjK,WAAO,EAAE,QAAQ,CAAC,MAAM,KAAK,KAAK,GAAG,QAAQ,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,MAAM,EAAE,GAAG,MAAM,MAAM,GAAG,GAAG,MAAM,MAAM,GAAG,OAAO,MAAM,MAAM,GAAG,QAAQ,MAAM,MAAM,EAAE,GAAG,YAAY,MAAM,cAAc,EAAE,OAAO,MAAM,WAAW,GAAG,QAAQ,MAAM,WAAW,EAAE,GAAG,MAAM,MAAM,oBAAoB,EAAE,GAAG,MAAM,iBAAiB,GAAG,GAAG,MAAM,iBAAiB,EAAE,GAAG,SAAS,MAAM,QAAQ,EAAE,EAAE;AAAA,EACtY,EAAE;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './texture-packer.js';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/features/sprites/index.ts"],
|
|
4
|
+
"sourcesContent": ["export { Sprite } from './sprite.js';\nexport type { SpriteProps, SpriteStyle } from './sprite.js';\nexport { loadSpriteSheet } from './loader.js';\nexport type { SpriteSheet, SpriteGrid } from './loader.js';\nexport { defineSpriteAnimation } from './model.js';\nexport type { SpriteFrame, SpriteRectangle, SpriteFrameData, SpriteAnimationFrameData, SpriteSheetData, SpriteSheetFormat } from './model.js';\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,cAAc;AAEvB,SAAS,uBAAuB;AAEhC,SAAS,6BAA6B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './index.js';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { defineSpriteAnimation, makeFrame } from "./model.js";
|
|
2
|
+
async function loadSpriteSheet(url, options) {
|
|
3
|
+
const owner = { disposed: false };
|
|
4
|
+
const images = [];
|
|
5
|
+
const dispose = () => {
|
|
6
|
+
if (owner.disposed) return;
|
|
7
|
+
owner.disposed = true;
|
|
8
|
+
for (const image of images) image.removeAttribute("src");
|
|
9
|
+
};
|
|
10
|
+
const load = async (source) => {
|
|
11
|
+
const image = new globalThis.Image();
|
|
12
|
+
images.push(image);
|
|
13
|
+
image.src = source;
|
|
14
|
+
await image.decode();
|
|
15
|
+
return image;
|
|
16
|
+
};
|
|
17
|
+
try {
|
|
18
|
+
let specs;
|
|
19
|
+
let clips = {};
|
|
20
|
+
if ("grid" in options) {
|
|
21
|
+
const { frameWidth: w, frameHeight: h, margin = 0, spacing = 0 } = options.grid;
|
|
22
|
+
if (![w, h, margin, spacing].every(Number.isInteger) || w <= 0 || h <= 0 || margin < 0 || spacing < 0) throw new RangeError("Invalid sprite grid dimensions.");
|
|
23
|
+
const image = await load(url);
|
|
24
|
+
const frames2 = [];
|
|
25
|
+
for (let y = margin; y + h <= image.naturalHeight - margin; y += h + spacing)
|
|
26
|
+
for (let x = margin; x + w <= image.naturalWidth - margin; x += w + spacing)
|
|
27
|
+
frames2.push({ name: String(frames2.length), rect: { x, y, width: w, height: h } });
|
|
28
|
+
if (!frames2.length) throw new RangeError("Sprite grid contains no complete frames.");
|
|
29
|
+
specs = frames2;
|
|
30
|
+
} else {
|
|
31
|
+
const response = await fetch(url);
|
|
32
|
+
if (!response.ok) throw new Error(`Sprite metadata failed: ${response.status}`);
|
|
33
|
+
const data = options.format.parse(await response.json());
|
|
34
|
+
for (const path of data.images) await load(new URL(path, new URL(url, document.baseURI)).href);
|
|
35
|
+
specs = data.frames;
|
|
36
|
+
clips = data.animations ?? {};
|
|
37
|
+
}
|
|
38
|
+
const frames = /* @__PURE__ */ Object.create(null);
|
|
39
|
+
for (const spec of specs) {
|
|
40
|
+
const image = images[spec.page ?? 0], r = spec.rect;
|
|
41
|
+
if (!image || ![r.x, r.y, r.width, r.height].every(Number.isFinite) || r.x < 0 || r.y < 0 || r.width <= 0 || r.height <= 0 || r.x + r.width > image.naturalWidth || r.y + r.height > image.naturalHeight) throw new RangeError(`Invalid sprite rectangle: ${spec.name}`);
|
|
42
|
+
if (frames[spec.name]) throw new Error(`Duplicate sprite frame: ${spec.name}`);
|
|
43
|
+
const width = spec.sourceSize?.width ?? (spec.rotated ? r.height : r.width);
|
|
44
|
+
const height = spec.sourceSize?.height ?? (spec.rotated ? r.width : r.height);
|
|
45
|
+
const trim = { x: spec.trim?.x ?? 0, y: spec.trim?.y ?? 0 };
|
|
46
|
+
if (![width, height, trim.x, trim.y].every(Number.isFinite) || width <= 0 || height <= 0 || trim.x < 0 || trim.y < 0 || trim.x + (spec.rotated ? r.height : r.width) > width || trim.y + (spec.rotated ? r.width : r.height) > height) throw new RangeError(`Invalid sprite logical bounds: ${spec.name}`);
|
|
47
|
+
frames[spec.name] = makeFrame({ ...spec, rect: Object.freeze({ ...r }), sourceSize: Object.freeze({ width, height }), trim: Object.freeze(trim), image, owner });
|
|
48
|
+
}
|
|
49
|
+
const animations = /* @__PURE__ */ Object.create(null);
|
|
50
|
+
for (const [name, entries] of Object.entries(clips)) animations[name] = defineSpriteAnimation({ frames: entries.map((entry) => {
|
|
51
|
+
if (!frames[entry.frame]) throw new Error(`Unknown sprite frame: ${entry.frame}`);
|
|
52
|
+
return { frame: frames[entry.frame], duration: entry.duration };
|
|
53
|
+
}) });
|
|
54
|
+
return Object.freeze({ frames: Object.freeze(frames), animations: Object.freeze(animations), dispose });
|
|
55
|
+
} catch (error) {
|
|
56
|
+
dispose();
|
|
57
|
+
throw error;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
export {
|
|
61
|
+
loadSpriteSheet
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/features/sprites/loader.ts"],
|
|
4
|
+
"sourcesContent": ["import { defineSpriteAnimation, makeFrame, type SpriteFrame, type SpriteFrameData, type SpriteSheetFormat } from './model.js';\nimport type { PibblAnimationDefinition } from '../../lib/animation/types.js';\n/** Shared decoded atlas and immutable frames/clips. Dispose after all consumers unmount. See {@link SpriteFrame}. */\nexport interface SpriteSheet {\n /** Frames indexed by atlas name or numeric grid index. */ readonly frames: Readonly<Record<string | number, SpriteFrame>>;\n /** Named, seekable animation definitions from the atlas. */ readonly animations: Readonly<Record<string, PibblAnimationDefinition<SpriteFrame>>>;\n /** Release decoded images; unmount every consumer before calling. */ readonly dispose: () => void;\n}\n/** Dimensions of a regular grid, in image pixels. See {@link SpriteFrame}. */\nexport interface SpriteGrid { /** Positive cell width in pixels. */ readonly frameWidth: number; /** Positive cell height in pixels. */ readonly frameHeight: number; /** Outer border width in pixels; defaults to zero. */ readonly margin?: number; /** Gap between cells in pixels; defaults to zero. */ readonly spacing?: number }\n/** Load a grid image or metadata through an explicitly supplied import adapter. See {@link SpriteFrame}. \n * @param url - Grid image URL or atlas metadata URL.\n * @param options - Grid dimensions or an explicit metadata format adapter.\n * @returns A decoded sprite sheet with explicit disposal ownership.\n */\nexport async function loadSpriteSheet(url: string, options: { readonly grid: SpriteGrid } | { readonly format: SpriteSheetFormat }): Promise<SpriteSheet> {\n const owner = { disposed: false };\n const images: HTMLImageElement[] = [];\n const dispose = () => { if (owner.disposed) return; owner.disposed = true; for (const image of images) image.removeAttribute('src'); };\n const load = async (source: string) => {\n const image = new globalThis.Image(); images.push(image); image.src = source; await image.decode(); return image;\n };\n try {\n let specs: readonly SpriteFrameData[];\n let clips: Readonly<Record<string, readonly { frame: string; duration: number }[]>> = {};\n if ('grid' in options) {\n const { frameWidth: w, frameHeight: h, margin = 0, spacing = 0 } = options.grid;\n if (![w, h, margin, spacing].every(Number.isInteger) || w <= 0 || h <= 0 || margin < 0 || spacing < 0) throw new RangeError('Invalid sprite grid dimensions.');\n const image = await load(url); const frames: SpriteFrameData[] = [];\n for (let y = margin; y + h <= image.naturalHeight - margin; y += h + spacing)\n for (let x = margin; x + w <= image.naturalWidth - margin; x += w + spacing)\n frames.push({ name: String(frames.length), rect: { x, y, width: w, height: h } });\n if (!frames.length) throw new RangeError('Sprite grid contains no complete frames.');\n specs = frames;\n } else {\n const response = await fetch(url); if (!response.ok) throw new Error(`Sprite metadata failed: ${response.status}`);\n const data = options.format.parse(await response.json());\n for (const path of data.images) await load(new URL(path, new URL(url, document.baseURI)).href);\n specs = data.frames; clips = data.animations ?? {};\n }\n const frames: Record<string, SpriteFrame> = Object.create(null);\n for (const spec of specs) {\n const image = images[spec.page ?? 0], r = spec.rect;\n if (!image || ![r.x, r.y, r.width, r.height].every(Number.isFinite) || r.x < 0 || r.y < 0 || r.width <= 0 || r.height <= 0 || r.x + r.width > image.naturalWidth || r.y + r.height > image.naturalHeight) throw new RangeError(`Invalid sprite rectangle: ${spec.name}`);\n if (frames[spec.name]) throw new Error(`Duplicate sprite frame: ${spec.name}`);\n const width = spec.sourceSize?.width ?? (spec.rotated ? r.height : r.width);\n const height = spec.sourceSize?.height ?? (spec.rotated ? r.width : r.height);\n const trim = { x: spec.trim?.x ?? 0, y: spec.trim?.y ?? 0 };\n if (![width, height, trim.x, trim.y].every(Number.isFinite) || width <= 0 || height <= 0 || trim.x < 0 || trim.y < 0 || trim.x + (spec.rotated ? r.height : r.width) > width || trim.y + (spec.rotated ? r.width : r.height) > height) throw new RangeError(`Invalid sprite logical bounds: ${spec.name}`);\n frames[spec.name] = makeFrame({ ...spec, rect: Object.freeze({ ...r }), sourceSize: Object.freeze({ width, height }), trim: Object.freeze(trim), image, owner });\n }\n const animations: Record<string, PibblAnimationDefinition<SpriteFrame>> = Object.create(null);\n for (const [name, entries] of Object.entries(clips)) animations[name] = defineSpriteAnimation({ frames: entries.map(entry => {\n if (!frames[entry.frame]) throw new Error(`Unknown sprite frame: ${entry.frame}`);\n return { frame: frames[entry.frame], duration: entry.duration };\n }) });\n return Object.freeze({ frames: Object.freeze(frames), animations: Object.freeze(animations), dispose });\n } catch (error) { dispose(); throw error; }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["frames"]
|
|
7
|
+
}
|