@opsydyn/effect-three 0.0.0-stage → 0.2.0
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/CHANGELOG.md +69 -0
- package/LICENSE +21 -0
- package/README.md +189 -2
- package/dist/index-01kwfekm.js +5118 -0
- package/dist/index-01kwfekm.js.map +40 -0
- package/dist/index-4045wme0.js +129 -0
- package/dist/index-4045wme0.js.map +10 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1361 -0
- package/dist/index.js.map +14 -0
- package/dist/kernel/animation.d.ts +14 -0
- package/dist/kernel/animation.d.ts.map +1 -0
- package/dist/kernel/behaviours.d.ts +16 -0
- package/dist/kernel/behaviours.d.ts.map +1 -0
- package/dist/kernel/bodies.d.ts +60 -0
- package/dist/kernel/bodies.d.ts.map +1 -0
- package/dist/kernel/bodySources.d.ts +47 -0
- package/dist/kernel/bodySources.d.ts.map +1 -0
- package/dist/kernel/build.d.ts +564 -0
- package/dist/kernel/build.d.ts.map +1 -0
- package/dist/kernel/cameraMotion.d.ts +39 -0
- package/dist/kernel/cameraMotion.d.ts.map +1 -0
- package/dist/kernel/clock.d.ts +17 -0
- package/dist/kernel/clock.d.ts.map +1 -0
- package/dist/kernel/contactShadowPasses.d.ts +47 -0
- package/dist/kernel/contactShadowPasses.d.ts.map +1 -0
- package/dist/kernel/description.d.ts +1120 -0
- package/dist/kernel/description.d.ts.map +1 -0
- package/dist/kernel/diff.d.ts +90 -0
- package/dist/kernel/diff.d.ts.map +1 -0
- package/dist/kernel/environmentPresets.d.ts +30 -0
- package/dist/kernel/environmentPresets.d.ts.map +1 -0
- package/dist/kernel/equality.d.ts +64 -0
- package/dist/kernel/equality.d.ts.map +1 -0
- package/dist/kernel/frames.d.ts +55 -0
- package/dist/kernel/frames.d.ts.map +1 -0
- package/dist/kernel/index.d.ts +37 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +335 -0
- package/dist/kernel/index.js.map +9 -0
- package/dist/kernel/instances.d.ts +26 -0
- package/dist/kernel/instances.d.ts.map +1 -0
- package/dist/kernel/labels.d.ts +51 -0
- package/dist/kernel/labels.d.ts.map +1 -0
- package/dist/kernel/loop.d.ts +49 -0
- package/dist/kernel/loop.d.ts.map +1 -0
- package/dist/kernel/materials.d.ts +24 -0
- package/dist/kernel/materials.d.ts.map +1 -0
- package/dist/kernel/motion.d.ts +36 -0
- package/dist/kernel/motion.d.ts.map +1 -0
- package/dist/kernel/orbit.d.ts +127 -0
- package/dist/kernel/orbit.d.ts.map +1 -0
- package/dist/kernel/overlays.d.ts +16 -0
- package/dist/kernel/overlays.d.ts.map +1 -0
- package/dist/kernel/performance.d.ts +41 -0
- package/dist/kernel/performance.d.ts.map +1 -0
- package/dist/kernel/physics.d.ts +166 -0
- package/dist/kernel/physics.d.ts.map +1 -0
- package/dist/kernel/physicsDebug.d.ts +18 -0
- package/dist/kernel/physicsDebug.d.ts.map +1 -0
- package/dist/kernel/pointer.d.ts +357 -0
- package/dist/kernel/pointer.d.ts.map +1 -0
- package/dist/kernel/renderKit.d.ts +49 -0
- package/dist/kernel/renderKit.d.ts.map +1 -0
- package/dist/kernel/renderer.d.ts +83 -0
- package/dist/kernel/renderer.d.ts.map +1 -0
- package/dist/kernel/resources.d.ts +112 -0
- package/dist/kernel/resources.d.ts.map +1 -0
- package/dist/kernel/sceneGraph.d.ts +155 -0
- package/dist/kernel/sceneGraph.d.ts.map +1 -0
- package/dist/kernel/sceneIndex.d.ts +90 -0
- package/dist/kernel/sceneIndex.d.ts.map +1 -0
- package/dist/kernel/stage.d.ts +87 -0
- package/dist/kernel/stage.d.ts.map +1 -0
- package/dist/kernel/textLayout.d.ts +29 -0
- package/dist/kernel/textLayout.d.ts.map +1 -0
- package/dist/kernel/tween.d.ts +35 -0
- package/dist/kernel/tween.d.ts.map +1 -0
- package/dist/kernel/xrInput.d.ts +107 -0
- package/dist/kernel/xrInput.d.ts.map +1 -0
- package/dist/kernel/xrLocomotion.d.ts +38 -0
- package/dist/kernel/xrLocomotion.d.ts.map +1 -0
- package/dist/runtime/FrameSource.d.ts +29 -0
- package/dist/runtime/FrameSource.d.ts.map +1 -0
- package/dist/runtime/ResourceRegistry.d.ts +18 -0
- package/dist/runtime/ResourceRegistry.d.ts.map +1 -0
- package/dist/runtime/SceneRuntime.d.ts +68 -0
- package/dist/runtime/SceneRuntime.d.ts.map +1 -0
- package/dist/runtime/SceneSchema.d.ts +2536 -0
- package/dist/runtime/SceneSchema.d.ts.map +1 -0
- package/dist/runtime/errors.d.ts +19 -0
- package/dist/runtime/errors.d.ts.map +1 -0
- package/dist/runtime/index.d.ts +11 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/webgl/contactShadows.d.ts +5 -0
- package/dist/webgl/contactShadows.d.ts.map +1 -0
- package/dist/webgl/index.d.ts +11 -0
- package/dist/webgl/index.d.ts.map +1 -0
- package/dist/webgl/index.js +239 -0
- package/dist/webgl/index.js.map +13 -0
- package/dist/webgl/shaderGrid.d.ts +27 -0
- package/dist/webgl/shaderGrid.d.ts.map +1 -0
- package/dist/webgl/sky.d.ts +4 -0
- package/dist/webgl/sky.d.ts.map +1 -0
- package/dist/webgpu/contactShadows.d.ts +5 -0
- package/dist/webgpu/contactShadows.d.ts.map +1 -0
- package/dist/webgpu/index.d.ts +10 -0
- package/dist/webgpu/index.d.ts.map +1 -0
- package/dist/webgpu/index.js +216 -0
- package/dist/webgpu/index.js.map +13 -0
- package/dist/webgpu/shaderGrid.d.ts +5 -0
- package/dist/webgpu/shaderGrid.d.ts.map +1 -0
- package/dist/webgpu/sky.d.ts +4 -0
- package/dist/webgpu/sky.d.ts.map +1 -0
- package/package.json +82 -4
- package/src/index.ts +11 -0
- package/src/kernel/animation.ts +24 -0
- package/src/kernel/behaviours.ts +36 -0
- package/src/kernel/bodies.ts +338 -0
- package/src/kernel/bodySources.ts +203 -0
- package/src/kernel/build.ts +1325 -0
- package/src/kernel/cameraMotion.ts +202 -0
- package/src/kernel/clock.ts +35 -0
- package/src/kernel/contactShadowPasses.ts +207 -0
- package/src/kernel/description.ts +1197 -0
- package/src/kernel/diff.ts +383 -0
- package/src/kernel/environmentPresets.ts +38 -0
- package/src/kernel/equality.ts +604 -0
- package/src/kernel/frames.ts +124 -0
- package/src/kernel/index.ts +274 -0
- package/src/kernel/instances.ts +97 -0
- package/src/kernel/labels.ts +54 -0
- package/src/kernel/loop.ts +248 -0
- package/src/kernel/materials.ts +258 -0
- package/src/kernel/motion.ts +75 -0
- package/src/kernel/orbit.ts +554 -0
- package/src/kernel/overlays.ts +130 -0
- package/src/kernel/performance.ts +101 -0
- package/src/kernel/physics.ts +361 -0
- package/src/kernel/physicsDebug.ts +68 -0
- package/src/kernel/pointer.ts +785 -0
- package/src/kernel/renderKit.ts +54 -0
- package/src/kernel/renderer.ts +136 -0
- package/src/kernel/resources.ts +504 -0
- package/src/kernel/sceneGraph.ts +1442 -0
- package/src/kernel/sceneIndex.ts +219 -0
- package/src/kernel/stage.ts +157 -0
- package/src/kernel/textLayout.ts +102 -0
- package/src/kernel/tween.ts +80 -0
- package/src/kernel/xrInput.ts +230 -0
- package/src/kernel/xrLocomotion.ts +72 -0
- package/src/runtime/FrameSource.ts +41 -0
- package/src/runtime/ResourceRegistry.ts +24 -0
- package/src/runtime/SceneRuntime.ts +229 -0
- package/src/runtime/SceneSchema.ts +983 -0
- package/src/runtime/errors.ts +18 -0
- package/src/runtime/index.ts +10 -0
- package/src/webgl/contactShadows.ts +67 -0
- package/src/webgl/index.ts +19 -0
- package/src/webgl/shaderGrid.ts +196 -0
- package/src/webgl/sky.ts +42 -0
- package/src/webgpu/contactShadows.ts +83 -0
- package/src/webgpu/index.ts +19 -0
- package/src/webgpu/shaderGrid.ts +158 -0
- package/src/webgpu/sky.ts +35 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/runtime/errors.ts", "../src/runtime/FrameSource.ts", "../src/runtime/ResourceRegistry.ts", "../src/runtime/SceneRuntime.ts", "../src/runtime/SceneSchema.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Typed failures of the scene runtime.\n *\n * @module\n */\nimport { Data } from 'effect';\n\nimport type { DescriptionError } from '../kernel/index.ts';\n\n/** A scene description was rejected. Nothing was applied. */\nexport class InvalidScene extends Data.TaggedError('InvalidScene')<{\n readonly error: DescriptionError;\n}> {}\n\n/** The renderer backend could not be created (for example, no WebGL2 context). */\nexport class RendererUnavailable extends Data.TaggedError('RendererUnavailable')<{\n readonly cause: unknown;\n}> {}\n",
|
|
6
|
+
"/**\n * Where frames come from. Wraps a kernel `FrameScheduler` so a scene's per-frame callback\n * is registered for exactly the lifetime of its scope.\n *\n * @module\n */\nimport { Context, Effect, Layer } from 'effect';\n\nimport { createGatedFrames, type FrameControl, type FrameScheduler } from '../kernel/index.ts';\n\nconst registration = (scheduler: FrameScheduler, onFrame: () => void) => () => {\n const gate = createGatedFrames(scheduler);\n const unsubscribe = gate.subscribe(onFrame);\n const control: FrameControl = {\n wake: () => gate.setOpen(true),\n sleep: () => gate.setOpen(false),\n };\n return { control, unsubscribe };\n};\n\n/** The frame source service for `scheduler`, for providing directly with `provideService`. */\nexport const fromScheduler = (scheduler: FrameScheduler) => ({\n /**\n * Calls `onFrame` once per frame until the current scope closes, while awake. Returns\n * the control that puts the subscription to sleep and wakes it.\n */\n subscribe: (onFrame: () => void) => {\n const register = Effect.sync(registration(scheduler, onFrame));\n return Effect.acquireRelease(register, (registered) =>\n Effect.sync(registered.unsubscribe),\n ).pipe(Effect.map((registered) => registered.control));\n },\n});\n\nexport class FrameSource extends Context.Service<FrameSource, ReturnType<typeof fromScheduler>>()(\n 'effect-three/FrameSource',\n) {}\n\n/** Provides a frame source backed by `scheduler`. */\nexport const layer = (scheduler: FrameScheduler) =>\n Layer.succeed(FrameSource, fromScheduler(scheduler));\n",
|
|
7
|
+
"/**\n * App-level owner of shared GPU resources (ADR-005). Every scene runtime built with the\n * same Layer shares one kernel resource store; the store is disposed when the Layer's\n * scope closes.\n *\n * @module\n */\nimport { Context, Effect, Layer } from 'effect';\n\nimport { createResourceStore, type ResourceStore } from '../kernel/index.ts';\n\nexport class ResourceRegistry extends Context.Service<\n ResourceRegistry,\n { readonly store: ResourceStore }\n>()('effect-three/ResourceRegistry') {}\n\nconst acquireStore = Effect.sync(createResourceStore);\n\nconst toService = (store: ResourceStore) => ({ store });\n\nconst scopedStore = Effect.acquireRelease(acquireStore, (store) => Effect.sync(store.dispose));\n\n/** Provides one shared resource store for the lifetime of the Layer. */\nexport const layer = Layer.effect(ResourceRegistry, scopedStore.pipe(Effect.map(toService)));\n",
|
|
8
|
+
"/**\n * A running scene: a kernel scene graph, a renderer and a frame subscription, all owned\n * by the caller's `Scope`. Closing the scope stops the frame loop, then releases the\n * event queue, the renderer and every resource the scene acquired, in that order.\n *\n * @module\n */\nimport { Clock, Effect, Exit, Match, Option, Queue, Result, Scope, Stream } from 'effect';\n\nimport {\n createSceneClock,\n createSceneGraph,\n type Behaviour,\n createFramePacer,\n createSceneLoop,\n type Op,\n type OverlayPlacement,\n type LabelEngine,\n type PhysicsEngine,\n type ReconcileResult,\n type RendererFactory,\n type SceneDescription,\n type SceneEvent,\n type SceneClock,\n type SceneGraph,\n type SceneRenderer,\n type Viewport,\n} from '../kernel/index.ts';\nimport { InvalidScene, RendererUnavailable } from './errors.ts';\nimport { FrameSource } from './FrameSource.ts';\nimport { ResourceRegistry } from './ResourceRegistry.ts';\n\nexport type SceneRuntimeOptions = {\n readonly scene: SceneDescription;\n readonly renderer: RendererFactory;\n readonly viewport: Viewport;\n /** Events kept when the consumer falls behind; older events are dropped. Default 64. */\n readonly eventCapacity?: number;\n /** Behaviours nodes may name, beside the built-in ones. */\n readonly behaviours?: Readonly<Record<string, Behaviour>>;\n /** The physics engine for meshes with a `body`; without one, bodies stay put. */\n readonly physics?: PhysicsEngine | undefined;\n /** Draws `label` nodes (distance-field text); without one, labels are empty. */\n readonly labels?: LabelEngine | undefined;\n /** Receives where the overlays are after each drawn frame, to move their HTML there. */\n readonly placeOverlays?: (placements: ReadonlyArray<OverlayPlacement>) => void;\n};\n\nconst defaultEventCapacity = 64;\nconst noBehaviours: Readonly<Record<string, Behaviour>> = {};\nconst ignorePlacements = (_placements: ReadonlyArray<OverlayPlacement>): void => undefined;\nconst nanosPerMillisecond = 1_000_000;\nconst nanosPerSecond = 1_000_000_000;\n\nconst toResult = (result: ReconcileResult): Result.Result<ReadonlyArray<Op>, InvalidScene> =>\n Match.valueTags(result, {\n Applied: (applied) => Result.succeed(applied.ops),\n Invalid: ({ error }) => Result.fail(new InvalidScene({ error })),\n });\n\nconst applyViewport = (graph: SceneGraph, renderer: SceneRenderer, viewport: Viewport): void => {\n graph.resize(viewport.width, viewport.height);\n renderer.setViewport(viewport);\n};\n\n/** The engines a scene graph hands work to, and the renderer whose kit shades it. */\ntype Engines = Pick<SceneRuntimeOptions, 'physics' | 'labels' | 'renderer'>;\n\nconst sceneGraph =\n (\n registry: ResourceRegistry['Service'],\n behaviours: Readonly<Record<string, Behaviour>>,\n engines: Engines,\n ) =>\n () =>\n createSceneGraph({\n store: registry.store,\n behaviours,\n physics: engines.physics,\n labels: engines.labels,\n kit: engines.renderer.kit,\n });\n\n/**\n * Reconciles at the current scene time. An idle scene draws no frames, so its last tick\n * can be long past; catching up first makes new transitions start now, not back then.\n */\nconst reconcileNow = (graph: SceneGraph, sceneClock: SceneClock, scene: SceneDescription) => {\n graph.tick(sceneClock.elapsedSeconds());\n return graph.reconcile(scene);\n};\n\nconst viewportChange = (graph: SceneGraph, renderer: SceneRenderer, viewport: Viewport) => () =>\n applyViewport(graph, renderer, viewport);\n\nconst animationChange = (sceneClock: SceneClock, graph: SceneGraph, animating: boolean) => () => {\n sceneClock.setAnimating(animating);\n graph.setAnimating(animating);\n};\n\nconst acquireGraph = (\n registry: ResourceRegistry['Service'],\n behaviours: Readonly<Record<string, Behaviour>>,\n engines: Engines,\n) => {\n const create = Effect.sync(sceneGraph(registry, behaviours, engines));\n return Effect.acquireRelease(create, (graph) => Effect.sync(graph.dispose));\n};\n\nconst acquireRenderer = (factory: RendererFactory) => {\n const create = Effect.try({\n try: factory.create,\n catch: (cause) => new RendererUnavailable({ cause }),\n });\n return Effect.acquireRelease(create, (renderer) => Effect.sync(renderer.dispose));\n};\n\n/** Waits for a renderer that starts asynchronously (WebGPU); a failed start is unavailable. */\nconst awaitReady = (renderer: SceneRenderer) =>\n Option.match(Option.fromNullishOr(renderer.ready), {\n onNone: () => Effect.void,\n onSome: (ready) =>\n Effect.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) }),\n });\n\nconst invalidationListening = (graph: SceneGraph, onInvalidated: () => void) => () =>\n graph.onInvalidated(onInvalidated);\n\nconst acquireInvalidation = (graph: SceneGraph, onInvalidated: () => void) => {\n const listen = Effect.sync(invalidationListening(graph, onInvalidated));\n return Effect.acquireRelease(listen, Effect.sync);\n};\n\nconst acquireEvents = (capacity: number) => {\n const create = Queue.sliding<SceneEvent>(capacity);\n return Effect.acquireRelease(create, Queue.shutdown);\n};\n\nfunction* startScene(options: SceneRuntimeOptions) {\n const registry = yield* ResourceRegistry;\n const frames = yield* FrameSource;\n const clock = yield* Clock.Clock;\n\n const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);\n const startupOps = yield* Effect.fromResult(toResult(graph.reconcile(options.scene)));\n const renderer = yield* acquireRenderer(options.renderer);\n yield* awaitReady(renderer);\n applyViewport(graph, renderer, options.viewport);\n const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);\n\n const sceneClock = createSceneClock(\n () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond,\n );\n const loop = createSceneLoop({\n graph,\n renderer,\n elapsedSeconds: sceneClock.elapsedSeconds,\n emit: (event) => {\n Queue.offerUnsafe(events, event);\n },\n now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,\n placeOverlays: options.placeOverlays ?? ignorePlacements,\n });\n yield* Effect.addFinalizer(() => Effect.sync(loop.dispose));\n const pacer = createFramePacer(loop);\n pacer.attach(yield* frames.subscribe(pacer.frame));\n yield* acquireInvalidation(graph, pacer.wake);\n\n return {\n /** The hosted scene graph, for inspection. */\n graph,\n /** The operations that built the initial scene. */\n startupOps,\n /**\n * Applies a new description and returns the operations it took. Structurally equal\n * descriptions return no operations and cost no host changes.\n */\n update: (scene: SceneDescription) =>\n Effect.suspend(() => Effect.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),\n /** Resizes the camera aspect and the renderer's drawing surface. */\n resize: (viewport: Viewport) => Effect.sync(viewportChange(graph, renderer, viewport)),\n /** Freezes (`false`) or resumes (`true`) behaviours; frozen, transitions land at once. */\n setAnimating: (animating: boolean) =>\n Effect.sync(animationChange(sceneClock, graph, animating)),\n /**\n * Draws one frame now, whatever the frame mode: React Three Fiber's `advance`, for\n * `frames: 'never'` scenes and frame-exact capture.\n */\n advance: Effect.sync(pacer.advance),\n /**\n * Draws one frame now, synchronously, for a host's own frame source to call directly:\n * an immersive (WebXR) session's animation loop.\n */\n drawNow: pacer.advance,\n /** Routes pointer input. Synchronous, so DOM listeners can call it directly. */\n pointer: loop.pointer,\n /** Routes XR input: aims, selects, sticks, buttons and surfaces. Synchronous, as `pointer`. */\n xrInput: loop.xrInput,\n /** Scene events, newest kept when the consumer falls behind. */\n events: Stream.fromQueue(events),\n /** Removes and returns every pending event without waiting. */\n drainEvents: Queue.clear(events),\n };\n}\n\n// Startup is atomic: everything is acquired into a child of the caller's scope, which is\n// closed immediately if startup fails or is interrupted. Otherwise a partial scene would\n// stay allocated until the caller's scope closed (under Foldkit: until unmount).\nfunction* startAtomically(options: SceneRuntimeOptions) {\n const parent = yield* Effect.scope;\n const child = yield* Scope.fork(parent);\n return yield* Effect.gen(() => startScene(options)).pipe(\n Scope.provide(child),\n Effect.onError((cause) => Scope.close(child, Exit.failCause(cause))),\n );\n}\n\n/**\n * Starts a scene in the current scope. Fails with `InvalidScene` if the initial\n * description is rejected and `RendererUnavailable` if the renderer can't be created.\n * A failed or interrupted start releases everything it acquired before returning.\n */\nexport const make = (options: SceneRuntimeOptions) => {\n const program = Effect.gen(() => startAtomically(options));\n return program.pipe(Effect.withSpan('effect-three/SceneRuntime.make'));\n};\n\n/** The handle `make` returns. */\nexport type SceneHandle = Effect.Success<ReturnType<typeof make>>;\n",
|
|
9
|
+
"/**\n * Effect Schemas for scene descriptions.\n *\n * They validate untrusted descriptions at the boundary, type the Foldkit `scene`\n * property and derive property-test generators. Each decoded `Type` is checked at compile\n * time to be exactly the kernel's description type, so the two can't drift.\n *\n * @module\n */\nimport { Schema } from 'effect';\n\nimport { handJoints, type SceneNode as KernelSceneNode } from '../kernel/description.ts';\n\nconst NonNegative = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\nconst Positive = Schema.Finite.check(Schema.isGreaterThan(0));\nconst UnitInterval = Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }));\n\n/** A three-component vector `[x, y, z]` of finite numbers. */\nexport const Vec3 = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite]);\n\n/** A rotation axis. */\nexport const Axis = Schema.Literals(['x', 'y', 'z']);\n\n/** A 24-bit RGB colour, for example `0x3366ff`. */\nexport const Rgb = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 0xffffff }));\n\n/** Model-owned Euler angles, or a spin behaviour that owns the rotation. */\nexport const Rotation = Schema.Union([\n Schema.TaggedStruct('Fixed', { euler: Vec3 }),\n Schema.TaggedStruct('Spin', {\n axis: Axis,\n radiansPerSecond: Schema.Finite,\n phase: Schema.Finite,\n }),\n]);\n\n/** Box geometry parameters. */\nexport const BoxGeometry = Schema.TaggedStruct('Box', {\n width: Positive,\n height: Positive,\n depth: Positive,\n});\n\nconst Segments = Schema.Int.check(Schema.isGreaterThanOrEqualTo(3));\n\n/** Sphere geometry parameters. */\nexport const SphereGeometry = Schema.TaggedStruct('Sphere', {\n radius: Positive,\n widthSegments: Segments,\n heightSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(2)),\n});\n\n/** Plane geometry parameters. */\nexport const PlaneGeometry = Schema.TaggedStruct('Plane', { width: Positive, height: Positive });\n\n/** Cylinder geometry parameters. A zero radius makes a cone. */\nexport const CylinderGeometry = Schema.TaggedStruct('Cylinder', {\n radiusTop: NonNegative,\n radiusBottom: NonNegative,\n height: Positive,\n radialSegments: Segments,\n});\n\n/** Torus geometry parameters. */\nexport const TorusGeometry = Schema.TaggedStruct('Torus', {\n radius: Positive,\n tube: Positive,\n radialSegments: Segments,\n tubularSegments: Segments,\n});\n\n/** Cone geometry parameters. */\nexport const ConeGeometry = Schema.TaggedStruct('Cone', {\n radius: Positive,\n height: Positive,\n radialSegments: Segments,\n});\n\n/** Capsule geometry parameters. */\nexport const CapsuleGeometry = Schema.TaggedStruct('Capsule', {\n radius: Positive,\n height: NonNegative,\n capSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n radialSegments: Segments,\n});\n\n/** Ring geometry parameters. */\nexport const RingGeometry = Schema.TaggedStruct('Ring', {\n innerRadius: NonNegative,\n outerRadius: Positive,\n thetaSegments: Segments,\n});\n\n/** Circle geometry parameters. */\nexport const CircleGeometry = Schema.TaggedStruct('Circle', {\n radius: Positive,\n segments: Segments,\n});\n\nconst Steps = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));\n\n/** Text from a lent typeface font. */\nexport const TextGeometry = Schema.TaggedStruct('Text', {\n text: Schema.String,\n font: Schema.String,\n size: Positive,\n depth: NonNegative,\n curveSegments: Steps,\n bevel: Schema.NullOr(\n Schema.Struct({\n thickness: NonNegative,\n size: NonNegative,\n offset: Schema.Finite,\n segments: Steps,\n }),\n ),\n center: Schema.Boolean,\n letterSpacing: Schema.Finite,\n lineHeight: NonNegative,\n align: Schema.Literals(['left', 'center', 'right']),\n});\n\n/** Any geometry shape. */\nexport const ShapeGeometry = Schema.Union([\n TextGeometry,\n BoxGeometry,\n SphereGeometry,\n PlaneGeometry,\n CylinderGeometry,\n TorusGeometry,\n ConeGeometry,\n CapsuleGeometry,\n RingGeometry,\n CircleGeometry,\n]);\n\n/** A registered behaviour, by name, with numeric parameters. */\nexport const Behave = Schema.Struct({\n name: Schema.String,\n params: Schema.Record(Schema.String, Schema.Finite),\n});\n\n/** How a transition progresses. */\nexport const Easing = Schema.Literals(['linear', 'easeInOutCubic', 'easeOutCubic', 'easeOutBack']);\n\n/** How position and scale changes are shown. */\nexport const Transition = Schema.Union([\n Schema.TaggedStruct('Instant', {}),\n Schema.TaggedStruct('Ease', { seconds: Positive, easing: Easing }),\n]);\n\n/** Which faces a material draws. */\nexport const MaterialSide = Schema.Literals(['front', 'back', 'double']);\n\n/** A texture lent to the store, by id, or `null` for none. */\nconst TextureId = Schema.NullOr(Schema.String);\n\nconst surface = {\n opacity: UnitInterval,\n transparent: Schema.Boolean,\n side: MaterialSide,\n wireframe: Schema.Boolean,\n};\n\nconst shaded = { ...surface, flatShading: Schema.Boolean };\n\n/** Unlit material parameters. */\nexport const BasicMaterial = Schema.TaggedStruct('Basic', {\n color: Rgb,\n map: TextureId,\n ...surface,\n});\n\n/** Matte material parameters. */\nexport const LambertMaterial = Schema.TaggedStruct('Lambert', {\n color: Rgb,\n map: TextureId,\n emissive: Rgb,\n ...shaded,\n});\n\n/** Shiny material parameters. */\nexport const PhongMaterial = Schema.TaggedStruct('Phong', {\n color: Rgb,\n map: TextureId,\n emissive: Rgb,\n specular: Rgb,\n shininess: NonNegative,\n ...shaded,\n});\n\nconst pbr = {\n color: Rgb,\n map: TextureId,\n roughness: UnitInterval,\n metalness: UnitInterval,\n emissive: Rgb,\n emissiveIntensity: NonNegative,\n};\n\n/** Standard (PBR) material parameters. */\nexport const StandardMaterial = Schema.TaggedStruct('Standard', { ...pbr, ...shaded });\n\n/** Physical material parameters: index of refraction in [1, 2.333], the range three.js documents. */\nexport const PhysicalMaterial = Schema.TaggedStruct('Physical', {\n ...pbr,\n clearcoat: UnitInterval,\n clearcoatRoughness: UnitInterval,\n transmission: UnitInterval,\n ior: Schema.Finite.check(Schema.isBetween({ minimum: 1, maximum: 2.333 })),\n ...shaded,\n});\n\n/** Normal-coloured material parameters. */\nexport const NormalMaterial = Schema.TaggedStruct('Normal', shaded);\n\n/** A shadow catcher: only the shadows cast onto it. */\nexport const ShadowMaterial = Schema.TaggedStruct('Shadow', { color: Rgb, opacity: UnitInterval });\n\n/** Any material kind. */\nexport const SurfaceMaterial = Schema.Union([\n ShadowMaterial,\n BasicMaterial,\n LambertMaterial,\n PhongMaterial,\n StandardMaterial,\n PhysicalMaterial,\n NormalMaterial,\n]);\n\n/** An owned geometry or a reference to a shared one. */\nexport const GeometryRef = Schema.Union([\n ...ShapeGeometry.members,\n Schema.TaggedStruct('SharedGeometry', { id: Schema.String }),\n Schema.TaggedStruct('LentGeometry', { id: Schema.String }),\n]);\n\n/** An owned material or a reference to a shared one. */\nexport const MaterialRef = Schema.Union([\n ...SurfaceMaterial.members,\n Schema.TaggedStruct('SharedMaterial', { id: Schema.String }),\n]);\n\n/** Shared resource definitions. */\nexport const ResourceDefinitions = Schema.Struct({\n geometries: Schema.Array(Schema.Struct({ id: Schema.String, geometry: ShapeGeometry })),\n materials: Schema.Array(Schema.Struct({ id: Schema.String, material: SurfaceMaterial })),\n});\n\n/** A renderable mesh. */\nconst Upright = { halfHeight: Positive, radius: Positive };\n\n/** A collider of a body's own, placed in it. */\nexport const ColliderDescription = Schema.Struct({\n shape: Schema.Union([\n Schema.TaggedStruct('Cuboid', { halfExtents: Vec3 }),\n Schema.TaggedStruct('Ball', { radius: Positive }),\n Schema.TaggedStruct('Capsule', Upright),\n Schema.TaggedStruct('Cylinder', Upright),\n Schema.TaggedStruct('Cone', Upright),\n ]),\n position: Vec3,\n rotation: Vec3,\n name: Schema.NullOr(Schema.String),\n});\n\nconst Group = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 15 }));\n\n/** Collision groups: those a body is in, and those it interacts with (null: all). */\nexport const InteractionGroups = Schema.Struct({\n memberships: Schema.Array(Group),\n filters: Schema.NullOr(Schema.Array(Group)),\n});\n\n/** A rigid body for a mesh, group, model or instances. */\nexport const Body = Schema.Struct({\n type: Schema.Literals(['dynamic', 'fixed', 'kinematic']),\n collider: Schema.Literals(['cuboid', 'ball', 'hull', 'trimesh']),\n mass: Schema.NullOr(Positive),\n friction: NonNegative,\n restitution: NonNegative,\n linearDamping: NonNegative,\n angularDamping: NonNegative,\n gravityScale: Schema.Finite,\n ccd: Schema.Boolean,\n sensor: Schema.Boolean,\n linearVelocity: Vec3,\n angularVelocity: Vec3,\n impulse: Schema.NullOr(Schema.Struct({ id: Schema.Finite, impulse: Vec3 })),\n colliders: Schema.NullOr(Schema.Array(ColliderDescription)),\n contactForces: Schema.NullOr(NonNegative),\n collisionGroups: Schema.NullOr(InteractionGroups),\n solverGroups: Schema.NullOr(InteractionGroups),\n});\n\n/** A physics world. */\nconst Handedness = Schema.Literals(['left', 'right']);\n\n/** A space an immersive session tracks, for a group to follow. */\nexport const XrSpace = Schema.Union([\n Schema.TaggedStruct('Head', {}),\n Schema.TaggedStruct('Joint', { hand: Handedness, joint: Schema.Literals(handJoints) }),\n Schema.TaggedStruct('Controller', { hand: Handedness, space: Schema.Literals(['grip', 'ray']) }),\n Schema.TaggedStruct('Anchor', { id: Schema.String }),\n Schema.TaggedStruct('Plane', { id: Schema.String }),\n Schema.TaggedStruct('Mesh', { id: Schema.String }),\n]);\n\n/** A body a joint holds: a node's, or one instance's. */\nexport const BodyRef = Schema.Struct({\n key: Schema.String,\n instance: Schema.NullOr(Schema.String),\n});\n\n/** A joint's motor: a target position and velocity, and how hard it pursues each. */\nexport const JointMotor = Schema.Struct({\n position: Schema.Finite,\n velocity: Schema.Finite,\n stiffness: NonNegative,\n damping: NonNegative,\n});\n\n/** A joint's range of motion. */\nexport const JointLimits = Schema.Tuple([Schema.Finite, Schema.Finite]);\n\n/** How a joint holds its bodies. */\nexport const JointKind = Schema.Union([\n Schema.TaggedStruct('Fixed', { frameA: Vec3, frameB: Vec3 }),\n Schema.TaggedStruct('Spherical', {}),\n Schema.TaggedStruct('Revolute', {\n axis: Vec3,\n limits: Schema.NullOr(JointLimits),\n motor: Schema.NullOr(JointMotor),\n }),\n Schema.TaggedStruct('Prismatic', {\n axis: Vec3,\n limits: Schema.NullOr(JointLimits),\n motor: Schema.NullOr(JointMotor),\n }),\n Schema.TaggedStruct('Rope', { length: Schema.Finite }),\n Schema.TaggedStruct('Spring', {\n restLength: Schema.Finite,\n stiffness: Schema.Finite,\n damping: Schema.Finite,\n }),\n]);\n\n/** A joint between two bodies. */\nexport const Joint = Schema.Struct({\n key: Schema.String,\n a: BodyRef,\n b: BodyRef,\n anchorA: Vec3,\n anchorB: Vec3,\n kind: JointKind,\n contacts: Schema.Boolean,\n});\n\nexport const Physics = Schema.Struct({\n gravity: Vec3,\n paused: Schema.Boolean,\n timeStep: Positive,\n interpolate: Schema.Boolean,\n debug: Schema.Boolean,\n joints: Schema.Array(Joint),\n});\n\nexport const MeshNode = Schema.TaggedStruct('Mesh', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n geometry: GeometryRef,\n material: MaterialRef,\n interactive: Schema.Boolean,\n castShadow: Schema.Boolean,\n receiveShadow: Schema.Boolean,\n body: Schema.NullOr(Body),\n});\n\n/** One instance of an instances node. */\nexport const Instance = Schema.Struct({\n key: Schema.String,\n position: Vec3,\n rotation: Vec3,\n scale: Vec3,\n color: Rgb,\n});\n\n/** Many instances of one geometry and material. */\nexport const InstancesNode = Schema.TaggedStruct('Instances', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n geometry: GeometryRef,\n material: MaterialRef,\n interactive: Schema.Boolean,\n castShadow: Schema.Boolean,\n receiveShadow: Schema.Boolean,\n instances: Schema.Array(Instance),\n body: Schema.NullOr(Body),\n});\n\n/** An application object lent to the store under `id`. */\nexport const Animation = Schema.Struct({\n clip: Schema.String,\n speed: Schema.Finite,\n loop: Schema.Boolean,\n});\n\nexport const BorrowedNode = Schema.TaggedStruct('Borrowed', {\n key: Schema.String,\n id: Schema.String,\n animation: Schema.NullOr(Animation),\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n body: Schema.NullOr(Body),\n});\n\n/** Distance-field text. */\nexport const LabelNode = Schema.TaggedStruct('Label', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n text: Schema.String,\n font: Schema.NullOr(Schema.String),\n fontSize: Positive,\n color: Rgb,\n fillOpacity: NonNegative,\n anchorX: Schema.Union([Schema.Literals(['left', 'center', 'right']), Schema.Finite]),\n anchorY: Schema.Union([\n Schema.Literals(['top', 'top-baseline', 'middle', 'bottom-baseline', 'bottom']),\n Schema.Finite,\n ]),\n maxWidth: Schema.NullOr(Positive),\n lineHeight: Schema.NullOr(Positive),\n letterSpacing: Schema.Finite,\n textAlign: Schema.Literals(['left', 'right', 'center', 'justify']),\n outlineWidth: NonNegative,\n outlineColor: Rgb,\n outlineOpacity: NonNegative,\n outlineBlur: NonNegative,\n colorRanges: Schema.Array(\n Schema.Struct({ start: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)), color: Rgb }),\n ),\n curveRadius: Schema.Finite,\n material: Schema.NullOr(MaterialRef),\n});\n\n/** Uniform ambient light. */\nexport const AmbientLightNode = Schema.TaggedStruct('AmbientLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n});\n\n/** Directional light. */\nconst isPowerOfTwo = (size: number) =>\n Number.isInteger(Math.log2(size)) || 'expected a power of two';\n\n/** Shadow map size: a power of two from 16 to 8192 texels. */\nconst ShadowMapSize = Schema.Int.check(\n Schema.isBetween({ minimum: 16, maximum: 8192 }),\n Schema.makeFilter(isPowerOfTwo),\n);\n\nexport const DirectionalLightNode = Schema.TaggedStruct('DirectionalLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n shadowArea: Positive,\n});\n\n/** Point light. */\nexport const PointLightNode = Schema.TaggedStruct('PointLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n distance: NonNegative,\n decay: NonNegative,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n});\n\n/** Spot light: `angle` in (0, π/2], `penumbra` in [0, 1]. */\nexport const SpotLightNode = Schema.TaggedStruct('SpotLight', {\n key: Schema.String,\n color: Rgb,\n intensity: NonNegative,\n position: Vec3,\n target: Vec3,\n distance: NonNegative,\n angle: Schema.Finite.check(\n Schema.isBetween({ minimum: 0, maximum: Math.PI / 2, exclusiveMinimum: true }),\n ),\n penumbra: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n decay: NonNegative,\n castShadow: Schema.Boolean,\n shadowMapSize: ShadowMapSize,\n shadowBias: Schema.Finite,\n});\n\n/** Hemisphere light. */\n/** A grid of lines on the XZ plane. */\nexport const GridNode = Schema.TaggedStruct('Grid', {\n key: Schema.String,\n position: Vec3,\n size: Positive,\n divisions: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),\n color: Rgb,\n centerColor: Rgb,\n});\n\n/** Drei's shader grid. */\nexport const ShaderGridNode = Schema.TaggedStruct('ShaderGrid', {\n key: Schema.String,\n position: Vec3,\n rotation: Vec3,\n size: Schema.Tuple([Positive, Positive]),\n cellSize: Positive,\n cellThickness: NonNegative,\n cellColor: Rgb,\n sectionSize: Positive,\n sectionThickness: NonNegative,\n sectionColor: Rgb,\n infinite: Schema.Boolean,\n followCamera: Schema.Boolean,\n fadeDistance: Positive,\n fadeStrength: NonNegative,\n fadeFrom: Schema.Finite,\n side: Schema.Literals(['front', 'back', 'double']),\n});\n\nexport const HemisphereLightNode = Schema.TaggedStruct('HemisphereLight', {\n key: Schema.String,\n color: Rgb,\n groundColor: Rgb,\n intensity: NonNegative,\n position: Vec3,\n});\n\n/** Any scene node. Groups nest recursively. */\nexport const SceneNode: Schema.Codec<KernelSceneNode> = Schema.Union([\n Schema.TaggedStruct('Group', {\n key: Schema.String,\n position: Vec3,\n rotation: Rotation,\n scale: Vec3,\n transition: Transition,\n behaviour: Schema.NullOr(Behave),\n interactive: Schema.Boolean,\n children: Schema.Array(Schema.suspend((): Schema.Codec<KernelSceneNode> => SceneNode)),\n body: Schema.NullOr(Body),\n follow: Schema.NullOr(XrSpace),\n }),\n MeshNode,\n InstancesNode,\n BorrowedNode,\n LabelNode,\n ShaderGridNode,\n AmbientLightNode,\n DirectionalLightNode,\n PointLightNode,\n SpotLightNode,\n HemisphereLightNode,\n GridNode,\n]);\n\n/** The fraction of the way a camera closes every sixtieth of a second: 0 jumps. */\nconst CameraDamping = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThan(1));\n\n/** A perspective camera. */\nexport const PerspectiveCamera = Schema.TaggedStruct('Perspective', {\n fov: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 180, exclusiveMinimum: true })),\n near: Positive,\n far: Positive,\n position: Vec3,\n lookAt: Vec3,\n damping: CameraDamping,\n autoRotate: Schema.Finite,\n});\n\n/** An orthographic camera; `zoom` is CSS pixels per world unit. */\nexport const OrthographicCamera = Schema.TaggedStruct('Orthographic', {\n zoom: Positive,\n near: Positive,\n far: Positive,\n position: Vec3,\n lookAt: Vec3,\n damping: CameraDamping,\n autoRotate: Schema.Finite,\n});\n\n/** The active camera. */\nexport const Camera = Schema.Union([PerspectiveCamera, OrthographicCamera]);\n\nconst NonNegativeFinite = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));\n\n/** A post-processing effect. */\nexport const PostEffect = Schema.Union([\n Schema.TaggedStruct('Bloom', {\n strength: NonNegativeFinite,\n radius: NonNegativeFinite,\n threshold: NonNegativeFinite,\n }),\n Schema.TaggedStruct('Vignette', { offset: NonNegativeFinite, darkness: NonNegativeFinite }),\n Schema.TaggedStruct('Film', { intensity: NonNegativeFinite, grayscale: Schema.Boolean }),\n]);\n\n/** Scene-wide render settings. */\nexport const RenderSettings = Schema.Struct({\n effects: Schema.Array(PostEffect),\n frames: Schema.Literals(['always', 'demand', 'never']),\n resolution: Schema.Finite.check(\n Schema.isBetween({ minimum: 0, maximum: 1, exclusiveMinimum: true }),\n ),\n shadows: Schema.Literals(['off', 'basic', 'percentage', 'soft', 'variance']),\n toneMapping: Schema.Literals(['none', 'linear', 'reinhard', 'cineon', 'aces', 'agx', 'neutral']),\n exposure: Positive,\n colorSpace: Schema.Literals(['srgb', 'linear']),\n});\n\n/** A view of the scene into part of the canvas. */\nexport const View = Schema.Struct({\n key: Schema.String,\n camera: Camera,\n rect: Schema.Struct({\n x: Schema.Finite,\n y: Schema.Finite,\n width: Schema.Finite.check(Schema.isGreaterThan(0)),\n height: Schema.Finite.check(Schema.isGreaterThan(0)),\n }),\n});\n\n/** A scene rendered into a texture lent under `id`. */\nexport const RenderTexture = Schema.Struct({\n id: Schema.String,\n width: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n height: Schema.Int.check(Schema.isBetween({ minimum: 1, maximum: 8192 })),\n camera: Camera,\n background: Schema.NullOr(Rgb),\n children: Schema.Array(SceneNode),\n});\n\n/** A complete scene description. */\n/** A point to show HTML at. */\nexport const Overlay = Schema.Struct({\n key: Schema.String,\n node: Schema.NullOr(Schema.String),\n position: Vec3,\n center: Schema.Boolean,\n distanceFactor: Schema.NullOr(Positive),\n occlude: Schema.Boolean,\n zIndexRange: Schema.Tuple([Schema.Int, Schema.Int]),\n view: Schema.NullOr(Schema.String),\n});\n\n/** Image-based lighting and background. */\nexport const Environment = Schema.Struct({\n map: Schema.NullOr(Schema.String),\n background: Schema.Union([Schema.Boolean, Schema.Literal('only')]),\n backgroundBlurriness: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n backgroundIntensity: NonNegative,\n environmentIntensity: NonNegative,\n});\n\n/** A daylight sky. */\nexport const Sky = Schema.Struct({\n sunPosition: Vec3,\n turbidity: NonNegative,\n rayleigh: NonNegative,\n mieCoefficient: NonNegative,\n mieDirectionalG: UnitInterval,\n clouds: UnitInterval,\n distance: Positive,\n});\n\n/** Soft ground shadows. */\nexport const ContactShadows = Schema.Struct({\n position: Vec3,\n size: Schema.Tuple([Positive, Positive]),\n near: Schema.Finite,\n far: Positive,\n blur: NonNegative,\n smooth: Schema.Boolean,\n opacity: UnitInterval,\n color: Rgb,\n resolution: Schema.Int.check(Schema.isBetween({ minimum: 16, maximum: 4096 })),\n});\n\n/** Immersive presentation. */\n/** An anchor the description places in the scene. */\nexport const XrAnchor = Schema.Struct({ id: Schema.String, position: Vec3, rotation: Vec3 });\n\nexport const Xr = Schema.Struct({\n origin: Vec3,\n heading: Schema.Finite,\n referenceSpace: Schema.Literals(['local-floor', 'local', 'bounded-floor']),\n framebufferScale: Positive,\n hitTest: Schema.Boolean,\n showInputs: Schema.Boolean,\n anchors: Schema.Array(XrAnchor),\n planes: Schema.Boolean,\n meshes: Schema.Boolean,\n domOverlay: Schema.Boolean,\n glide: Schema.NullOr(\n Schema.Struct({\n speed: NonNegative,\n turn: Schema.Literals(['smooth', 'snap']),\n turnSpeed: NonNegative,\n snapDegrees: NonNegative,\n }),\n ),\n});\n\n/** Whether the scene claims the pointer's gestures from the page. */\nexport const Gestures = Schema.Literals(['page', 'scene']);\n\nexport const SceneDescription = Schema.Struct({\n camera: Camera,\n gestures: Gestures,\n views: Schema.Array(View),\n renderTextures: Schema.Array(RenderTexture),\n overlays: Schema.Array(Overlay),\n environment: Schema.NullOr(Environment),\n sky: Schema.NullOr(Sky),\n contactShadows: Schema.NullOr(ContactShadows),\n physics: Schema.NullOr(Physics),\n xr: Schema.NullOr(Xr),\n measure: Schema.Array(Schema.String),\n render: RenderSettings,\n resources: ResourceDefinitions,\n children: Schema.Array(SceneNode),\n});\n\n/** Detail of pointer-leave events: the interactive mesh's key. */\nexport const KeyDetail = Schema.Struct({ key: Schema.String });\n\n/**\n * Where the pointer met an interactive mesh: its key and ancestor path, the world-space\n * hit point, the distance from the camera, the world-space face normal, the texture\n * coordinates and the pointer's world-space ray.\n */\nexport const HitDetail = Schema.Struct({\n key: Schema.String,\n instance: Schema.optionalKey(Schema.String),\n part: Schema.optionalKey(Schema.String),\n view: Schema.optionalKey(Schema.String),\n path: Schema.Array(Schema.String),\n point: Vec3,\n distance: Schema.Finite,\n normal: Vec3,\n uv: Schema.Tuple([Schema.Finite, Schema.Finite]),\n ray: Schema.Struct({ origin: Vec3, direction: Vec3 }),\n});\n\n/** Detail of button events: the hit plus `MouseEvent.button`. */\nexport const ButtonDetail = Schema.Struct({ ...HitDetail.fields, button: Schema.Int });\n\n/** Detail of wheel events: the hit plus `WheelEvent.deltaX` and `deltaY`. */\nexport const WheelDetail = Schema.Struct({\n ...HitDetail.fields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n});\n\n/** Detail of a click that hit no interactive mesh. */\nexport const MissDetail = Schema.Struct({ button: Schema.Int });\n\n/** A world-space ray: an origin and a unit direction. */\nexport const Ray = HitDetail.fields.ray;\n\n/** Detail of drag events: the captured mesh, the pressed button and the pointer's ray. */\nexport const DragDetail = Schema.Struct({ key: Schema.String, button: Schema.Int, ray: Ray });\n\n/** Detail of performance changes: the fps average and the new factor (0 to 1). */\nexport const PerformanceDetail = Schema.Struct({\n fps: Schema.Finite,\n factor: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 })),\n});\n\n/** Modifier keys held during an input. */\nexport const Modifiers = Schema.Struct({\n shift: Schema.Boolean,\n control: Schema.Boolean,\n meta: Schema.Boolean,\n alt: Schema.Boolean,\n});\n\nconst regionFields = {\n view: Schema.optionalKey(Schema.String),\n width: Schema.Finite,\n height: Schema.Finite,\n x: Schema.Finite,\n y: Schema.Finite,\n};\n\n/** A drag, wheel or pinch on the canvas: distances in CSS pixels since the last one. */\nexport const Gesture = Schema.Union([\n Schema.TaggedStruct('Drag', {\n button: Schema.Int,\n modifiers: Modifiers,\n key: Schema.optionalKey(Schema.String),\n ...regionFields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n Schema.TaggedStruct('Wheel', {\n modifiers: Modifiers,\n ...regionFields,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n Schema.TaggedStruct('Pinch', {\n ...regionFields,\n scale: Schema.Finite,\n deltaX: Schema.Finite,\n deltaY: Schema.Finite,\n }),\n]);\n\n/**\n * Detail of collision events: the two bodies' keys (and instances', for bodies on\n * instances), and whether they began touching.\n */\nexport const CollisionDetail = Schema.Struct({\n a: Schema.String,\n aInstance: Schema.optionalKey(Schema.String),\n aPart: Schema.optionalKey(Schema.String),\n b: Schema.String,\n bInstance: Schema.optionalKey(Schema.String),\n bPart: Schema.optionalKey(Schema.String),\n started: Schema.Boolean,\n});\n\nconst XrHand = Schema.Literals(['left', 'right', 'none']);\n\n/** Detail of XR stick events: a thumbstick pushed past halfway, or let back. */\nexport const XrStickDetail = Schema.Struct({\n hand: XrHand,\n direction: Schema.Literals(['center', 'left', 'right', 'forward', 'back']),\n});\n\n/** Detail of XR button events: a controller button pressed or released. */\nexport const XrButtonDetail = Schema.Struct({\n hand: XrHand,\n button: Schema.Literals(['trigger', 'squeeze', 'touchpad', 'thumbstick', 'primary', 'secondary']),\n pressed: Schema.Boolean,\n});\n\n/** Detail of XR moved events: where gliding left the player. */\nexport const XrMovedDetail = Schema.Struct({ origin: Vec3, heading: Schema.Finite });\n\n/** Detail of XR surface events: in AR, where a select met a real surface. */\nexport const XrSurfaceDetail = Schema.Struct({ hand: XrHand, point: Vec3, normal: Vec3 });\n\n/** A detected plane, in the scene's space. */\nexport const XrPlane = Schema.Struct({\n id: Schema.String,\n orientation: Schema.Literals(['horizontal', 'vertical']),\n label: Schema.String,\n position: Vec3,\n rotation: Vec3,\n polygon: Schema.Array(Vec3),\n});\n\n/** Detail of XR planes events: every plane the session has detected, as it is now. */\nexport const XrPlanesDetail = Schema.Struct({ planes: Schema.Array(XrPlane) });\n\n/** A detected mesh, in the scene's space: its geometry is lent for `xrMesh(id)`. */\nexport const XrMesh = Schema.Struct({\n id: Schema.String,\n label: Schema.String,\n position: Vec3,\n rotation: Vec3,\n});\n\n/** Detail of XR meshes events: every mesh the session has detected, as it is now. */\nexport const XrMeshesDetail = Schema.Struct({ meshes: Schema.Array(XrMesh) });\n\n/** Detail of contact force events: the two bodies, and how hard they pushed. */\nexport const ContactForceDetail = Schema.Struct({\n a: Schema.String,\n aInstance: Schema.optionalKey(Schema.String),\n aPart: Schema.optionalKey(Schema.String),\n b: Schema.String,\n bInstance: Schema.optionalKey(Schema.String),\n bPart: Schema.optionalKey(Schema.String),\n totalForce: Vec3,\n totalForceMagnitude: Schema.Finite,\n maxForceDirection: Vec3,\n maxForceMagnitude: Schema.Finite,\n});\n\nconst Rect = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite, Schema.Finite]);\n\n/** Detail of label measured events: a label's laid-out size in its own units. */\nexport const LabelMeasuredDetail = Schema.Struct({\n key: Schema.String,\n block: Rect,\n visible: Rect,\n});\n\n/** Detail of measured events: a node's world bounding box. */\nexport const MeasuredDetail = Schema.Struct({ key: Schema.String, min: Vec3, max: Vec3 });\n\n/** Detail of auto-rotated events: where a camera turning by itself got to. */\nexport const AutoRotatedDetail = Schema.Struct({\n view: Schema.optionalKey(Schema.String),\n position: Vec3,\n});\n\n/** Detail of gesture events. */\nexport const GestureDetail = Schema.Struct({ gesture: Gesture });\n\n/** A pointer interaction with an interactive mesh, or a miss. */\nexport const SceneEvent = Schema.Union([\n Schema.TaggedStruct('PointerEnter', HitDetail.fields),\n Schema.TaggedStruct('PointerLeave', KeyDetail.fields),\n Schema.TaggedStruct('PointerMove', HitDetail.fields),\n Schema.TaggedStruct('PointerDown', ButtonDetail.fields),\n Schema.TaggedStruct('PointerUp', ButtonDetail.fields),\n Schema.TaggedStruct('Click', ButtonDetail.fields),\n Schema.TaggedStruct('DoubleClick', ButtonDetail.fields),\n Schema.TaggedStruct('ContextMenu', HitDetail.fields),\n Schema.TaggedStruct('Wheel', WheelDetail.fields),\n Schema.TaggedStruct('PointerMissed', MissDetail.fields),\n Schema.TaggedStruct('Drag', DragDetail.fields),\n Schema.TaggedStruct('DragEnd', DragDetail.fields),\n Schema.TaggedStruct('Gesture', GestureDetail.fields),\n Schema.TaggedStruct('AutoRotated', AutoRotatedDetail.fields),\n Schema.TaggedStruct('Collision', CollisionDetail.fields),\n Schema.TaggedStruct('Measured', MeasuredDetail.fields),\n Schema.TaggedStruct('LabelMeasured', LabelMeasuredDetail.fields),\n Schema.TaggedStruct('ContactForce', ContactForceDetail.fields),\n Schema.TaggedStruct('XrStick', XrStickDetail.fields),\n Schema.TaggedStruct('XrButton', XrButtonDetail.fields),\n Schema.TaggedStruct('XrSurface', XrSurfaceDetail.fields),\n Schema.TaggedStruct('XrMoved', XrMovedDetail.fields),\n Schema.TaggedStruct('XrPlanes', XrPlanesDetail.fields),\n Schema.TaggedStruct('XrMeshes', XrMeshesDetail.fields),\n Schema.TaggedStruct('PerformanceChanged', PerformanceDetail.fields),\n]);\n\n/** Why a scene description was rejected. */\nexport const DescriptionError = Schema.Union([\n Schema.TaggedStruct('DuplicateKey', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateResourceId', {\n resource: Schema.Literals(['geometry', 'material']),\n id: Schema.String,\n }),\n Schema.TaggedStruct('UnknownSharedGeometry', { nodeKey: Schema.String, id: Schema.String }),\n Schema.TaggedStruct('UnknownSharedMaterial', { nodeKey: Schema.String, id: Schema.String }),\n Schema.TaggedStruct('DuplicateInstanceKey', { nodeKey: Schema.String, key: Schema.String }),\n Schema.TaggedStruct('UnknownBehaviour', { nodeKey: Schema.String, name: Schema.String }),\n Schema.TaggedStruct('DuplicateViewKey', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateOverlayKey', { key: Schema.String }),\n Schema.TaggedStruct('UnknownOverlayNode', { key: Schema.String, node: Schema.String }),\n Schema.TaggedStruct('UnknownOverlayView', { key: Schema.String, view: Schema.String }),\n Schema.TaggedStruct('UnknownMeasuredNode', { key: Schema.String }),\n Schema.TaggedStruct('DuplicateJointKey', { key: Schema.String }),\n Schema.TaggedStruct('UnknownJointBody', { joint: Schema.String, body: Schema.String }),\n Schema.TaggedStruct('DuplicateRenderTextureId', { id: Schema.String }),\n]);\n"
|
|
10
|
+
],
|
|
11
|
+
"mappings": "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",
|
|
12
|
+
"debugId": "4A51874F0CADE91E64756E2164756E21",
|
|
13
|
+
"names": []
|
|
14
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clip playback as a pure function of scene time.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import type { Animation } from './description.ts';
|
|
7
|
+
/**
|
|
8
|
+
* The clip time to show `elapsed` seconds after playback started: wrapped for looping
|
|
9
|
+
* clips (backwards too, for negative speeds), held at the last frame otherwise.
|
|
10
|
+
*/
|
|
11
|
+
export declare const clipTime: (animation: Animation, duration: number, elapsed: number) => number;
|
|
12
|
+
/** Whether playback still changes the pose: always for loops, until the end otherwise. */
|
|
13
|
+
export declare const clipRunning: (animation: Animation, duration: number, elapsed: number) => boolean;
|
|
14
|
+
//# sourceMappingURL=animation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.d.ts","sourceRoot":"","sources":["../../src/kernel/animation.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAKlD;;;GAGG;AACH,eAAO,MAAM,QAAQ,cAAe,SAAS,YAAY,MAAM,WAAW,MAAM,KAAG,MAKlF,CAAC;AAEF,0FAA0F;AAC1F,eAAO,MAAM,WAAW,cAAe,SAAS,YAAY,MAAM,WAAW,MAAM,KAAG,OACO,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Behaviours own animated properties (PLAN D4). Their output is a pure function of
|
|
3
|
+
* elapsed scene time, so a frame's result doesn't depend on how many frames ran before
|
|
4
|
+
* it: deterministic and frame-rate independent.
|
|
5
|
+
*
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import type { Euler } from 'three';
|
|
9
|
+
import type { Rotation } from './description.ts';
|
|
10
|
+
/** The spin angle in radians after `elapsedSeconds`. */
|
|
11
|
+
export declare const spinAngle: (spin: Extract<Rotation, {
|
|
12
|
+
readonly _tag: 'Spin';
|
|
13
|
+
}>, elapsedSeconds: number) => number;
|
|
14
|
+
/** Writes a rotation into a three.js Euler without allocating. */
|
|
15
|
+
export declare const writeRotation: (target: Euler, rotation: Rotation, elapsedSeconds: number) => void;
|
|
16
|
+
//# sourceMappingURL=behaviours.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"behaviours.d.ts","sourceRoot":"","sources":["../../src/kernel/behaviours.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAEnC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,wDAAwD;AACxD,eAAO,MAAM,SAAS,SACd,OAAO,CAAC,QAAQ,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,kBAClC,MAAM,KACrB,MAA6D,CAAC;AAEjE,kEAAkE;AAClE,eAAO,MAAM,aAAa,WAAY,KAAK,YAAY,QAAQ,kBAAkB,MAAM,KAAG,IAiBzF,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rigid bodies for a scene graph's nodes: a physics world kept in step with the
|
|
3
|
+
* description, advanced on scene time, its poses written back to the nodes (or, for an
|
|
4
|
+
* instances node, to each instance's matrix).
|
|
5
|
+
*
|
|
6
|
+
* Behavioural reference: react-three-rapier at `ae5c3fe`, `src/components/Physics.tsx`:
|
|
7
|
+
* fixed steps from an accumulator, the frame delta clamped to 0.5 s, nothing stepped while
|
|
8
|
+
* paused, and each body placed between its last two simulated poses (`interpolate`),
|
|
9
|
+
* converted from world space into its parent's space.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
import { type Scene } from 'three';
|
|
14
|
+
import { type BodySource } from './bodySources.ts';
|
|
15
|
+
import type { Physics, Vec3 } from './description.ts';
|
|
16
|
+
import type { PhysicsEngine } from './physics.ts';
|
|
17
|
+
/** Two bodies began (`started`) or stopped touching: their nodes' keys, and instances'. */
|
|
18
|
+
export type BodyCollision = {
|
|
19
|
+
readonly a: string;
|
|
20
|
+
readonly aInstance?: string;
|
|
21
|
+
/** The part of body `a` that touched (a mesh's or collider's name), when it has one. */
|
|
22
|
+
readonly aPart?: string;
|
|
23
|
+
readonly b: string;
|
|
24
|
+
readonly bInstance?: string;
|
|
25
|
+
readonly bPart?: string;
|
|
26
|
+
readonly started: boolean;
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Two bodies pushing on each other harder than a threshold: their nodes' keys (and
|
|
30
|
+
* instances'), and Rapier's contact force payload, as react-three-rapier's
|
|
31
|
+
* `onContactForce`.
|
|
32
|
+
*/
|
|
33
|
+
export type BodyContactForce = {
|
|
34
|
+
readonly a: string;
|
|
35
|
+
readonly aInstance?: string;
|
|
36
|
+
readonly aPart?: string;
|
|
37
|
+
readonly b: string;
|
|
38
|
+
readonly bInstance?: string;
|
|
39
|
+
readonly bPart?: string;
|
|
40
|
+
readonly totalForce: Vec3;
|
|
41
|
+
readonly totalForceMagnitude: number;
|
|
42
|
+
readonly maxForceDirection: Vec3;
|
|
43
|
+
readonly maxForceMagnitude: number;
|
|
44
|
+
};
|
|
45
|
+
export type BodyHost = {
|
|
46
|
+
/** Brings the world in line with the description's physics and its bodies. */
|
|
47
|
+
readonly sync: (physics: Physics | null, sources: Iterable<BodySource>) => void;
|
|
48
|
+
/** Steps the world to scene time `elapsed` and moves dynamic bodies to their poses. */
|
|
49
|
+
readonly tick: (elapsed: number, animating: boolean) => void;
|
|
50
|
+
/** Whether the simulation still moves anything. */
|
|
51
|
+
readonly needsFrame: () => boolean;
|
|
52
|
+
/** Collisions since the last call. */
|
|
53
|
+
readonly drainCollisions: () => ReadonlyArray<BodyCollision>;
|
|
54
|
+
/** Contact forces over their thresholds since the last call. */
|
|
55
|
+
readonly drainContactForces: () => ReadonlyArray<BodyContactForce>;
|
|
56
|
+
readonly dispose: () => void;
|
|
57
|
+
};
|
|
58
|
+
/** Creates the body host for a scene. Without an engine, bodies are ignored. */
|
|
59
|
+
export declare const createBodyHost: (engine: PhysicsEngine | undefined, scene: Scene) => BodyHost;
|
|
60
|
+
//# sourceMappingURL=bodies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodies.d.ts","sourceRoot":"","sources":["../../src/kernel/bodies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAqB,KAAK,KAAK,EAAE,MAAM,OAAO,CAAC;AAEtD,OAAO,EAAU,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,KAAK,EAAe,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEnE,OAAO,KAAK,EAAY,aAAa,EAAoC,MAAM,cAAc,CAAC;AAG9F,2FAA2F;AAC3F,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,wFAAwF;IACxF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC;IAC1B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,IAAI,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC,CAAC;AAYF,MAAM,MAAM,QAAQ,GAAG;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;IAChF,uFAAuF;IACvF,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7D,mDAAmD;IACnD,QAAQ,CAAC,UAAU,EAAE,MAAM,OAAO,CAAC;IACnC,sCAAsC;IACtC,QAAQ,CAAC,eAAe,EAAE,MAAM,aAAa,CAAC,aAAa,CAAC,CAAC;IAC7D,gEAAgE;IAChE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACnE,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAwEF,gFAAgF;AAChF,eAAO,MAAM,cAAc,WAAY,aAAa,GAAG,SAAS,SAAS,KAAK,KAAG,QAgMhF,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the body host needs from each body in a scene: where it is, where the description
|
|
3
|
+
* puts it, what its colliders are made from, and how to put a simulated pose back. A body
|
|
4
|
+
* sits on a mesh, group or borrowed model, or on each instance of an instances node (as
|
|
5
|
+
* react-three-rapier's `InstancedRigidBodies`, `ae5c3fe`).
|
|
6
|
+
*
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { type InstancedMesh, type Object3D } from 'three';
|
|
10
|
+
import type { Body, BorrowedNode, GroupNode, InstancesNode, MeshNode } from './description.ts';
|
|
11
|
+
import { type BodyPose, type Collider } from './physics.ts';
|
|
12
|
+
/** The id of a node's body (`instance` null) or an instance's, in the physics world. */
|
|
13
|
+
export declare const bodyId: (key: string, instance: string | null) => string;
|
|
14
|
+
/** A node a body can sit on directly. */
|
|
15
|
+
export type BodiedNode = MeshNode | GroupNode | BorrowedNode;
|
|
16
|
+
/** One body, as the body host sees it. */
|
|
17
|
+
export type BodySource = {
|
|
18
|
+
/** The body's id in the physics world. */
|
|
19
|
+
readonly id: string;
|
|
20
|
+
/** The node's key, and for an instance its key, as collisions report them. */
|
|
21
|
+
readonly key: string;
|
|
22
|
+
readonly instance?: string;
|
|
23
|
+
readonly body: Body;
|
|
24
|
+
/** What it lives on (a hosted object, or an instances node's entry): a new one means a new body. */
|
|
25
|
+
readonly holder: object;
|
|
26
|
+
/** Where the description puts it, as text: a change teleports a non-kinematic body. */
|
|
27
|
+
readonly placement: string;
|
|
28
|
+
/** What its colliders are made from: a change remakes them. */
|
|
29
|
+
readonly signature: () => string;
|
|
30
|
+
readonly colliders: () => ReadonlyArray<Collider>;
|
|
31
|
+
/** Where it is now, in world space. */
|
|
32
|
+
readonly pose: () => BodyPose;
|
|
33
|
+
/** Where the description puts it, in world space. */
|
|
34
|
+
readonly described: () => BodyPose;
|
|
35
|
+
/** Puts it at a world pose (a simulated one). */
|
|
36
|
+
readonly place: (pose: BodyPose) => void;
|
|
37
|
+
};
|
|
38
|
+
/** A world pose written to an object in its parent's space, keeping its scale. */
|
|
39
|
+
export declare const placeObject: (object: Object3D, pose: BodyPose) => void;
|
|
40
|
+
/** The body on a mesh, group or borrowed model, if it has one. */
|
|
41
|
+
export declare const nodeSource: (key: string, node: BodiedNode, object: Object3D) => BodySource | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* A body per instance of an instances node with a body. `holder` outlives the mesh, which
|
|
44
|
+
* is swapped for a larger one as instances are added: the bodies stay.
|
|
45
|
+
*/
|
|
46
|
+
export declare const instanceSources: (key: string, node: InstancesNode, holder: object, mesh: InstancedMesh) => ReadonlyArray<BodySource>;
|
|
47
|
+
//# sourceMappingURL=bodySources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodySources.d.ts","sourceRoot":"","sources":["../../src/kernel/bodySources.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAS,KAAK,aAAa,EAAW,KAAK,QAAQ,EAAuB,MAAM,OAAO,CAAC;AAE/F,OAAO,KAAK,EACV,IAAI,EACJ,YAAY,EACZ,SAAS,EAET,aAAa,EACb,QAAQ,EAET,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,QAAQ,EACb,KAAK,QAAQ,EAKd,MAAM,cAAc,CAAC;AAEtB,wFAAwF;AACxF,eAAO,MAAM,MAAM,QAAS,MAAM,YAAY,MAAM,GAAG,IAAI,KAAG,MACT,CAAC;AAEtD,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC;AAE7D,0CAA0C;AAC1C,MAAM,MAAM,UAAU,GAAG;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,oGAAoG;IACpG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,uFAAuF;IACvF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,+DAA+D;IAC/D,QAAQ,CAAC,SAAS,EAAE,MAAM,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;IAClD,uCAAuC;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,QAAQ,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,SAAS,EAAE,MAAM,QAAQ,CAAC;IACnC,iDAAiD;IACjD,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC1C,CAAC;AAmCF,kFAAkF;AAClF,eAAO,MAAM,WAAW,WAAY,QAAQ,QAAQ,QAAQ,KAAG,IAK9D,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,UAAU,QAChB,MAAM,QACL,UAAU,UACR,QAAQ,KACf,UAAU,GAAG,SA4Bf,CAAC;AAuDF;;;GAGG;AACH,eAAO,MAAM,eAAe,QACrB,MAAM,QACL,aAAa,UACX,MAAM,QACR,aAAa,KAClB,aAAa,CAAC,UAAU,CAM1B,CAAC"}
|