@opsydyn/effect-three 0.3.0 → 0.6.4

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.
Files changed (143) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +15 -1
  3. package/dist/{index-8cf8t6by.js → index-re3rrfwd.js} +2935 -104
  4. package/dist/index-re3rrfwd.js.map +56 -0
  5. package/dist/index-ttwy0znv.js +145 -0
  6. package/dist/index-ttwy0znv.js.map +12 -0
  7. package/dist/index.js +557 -147
  8. package/dist/index.js.map +8 -6
  9. package/dist/kernel/bodies.d.ts +20 -1
  10. package/dist/kernel/bodies.d.ts.map +1 -1
  11. package/dist/kernel/boxSelect.d.ts +22 -0
  12. package/dist/kernel/boxSelect.d.ts.map +1 -0
  13. package/dist/kernel/build.d.ts +165 -7
  14. package/dist/kernel/build.d.ts.map +1 -1
  15. package/dist/kernel/cameraShake.d.ts.map +1 -1
  16. package/dist/kernel/describeScene.d.ts +50 -0
  17. package/dist/kernel/describeScene.d.ts.map +1 -0
  18. package/dist/kernel/description.d.ts +223 -1
  19. package/dist/kernel/description.d.ts.map +1 -1
  20. package/dist/kernel/diff.d.ts +15 -0
  21. package/dist/kernel/diff.d.ts.map +1 -1
  22. package/dist/kernel/equality.d.ts +11 -1
  23. package/dist/kernel/equality.d.ts.map +1 -1
  24. package/dist/kernel/gizmo.d.ts +69 -0
  25. package/dist/kernel/gizmo.d.ts.map +1 -0
  26. package/dist/kernel/history.d.ts +61 -0
  27. package/dist/kernel/history.d.ts.map +1 -0
  28. package/dist/kernel/index.d.ts +19 -6
  29. package/dist/kernel/index.d.ts.map +1 -1
  30. package/dist/kernel/index.js +124 -3
  31. package/dist/kernel/index.js.map +1 -1
  32. package/dist/kernel/inspect.d.ts +85 -0
  33. package/dist/kernel/inspect.d.ts.map +1 -0
  34. package/dist/kernel/lineGeometry.d.ts +25 -0
  35. package/dist/kernel/lineGeometry.d.ts.map +1 -0
  36. package/dist/kernel/lockstep.d.ts +114 -0
  37. package/dist/kernel/lockstep.d.ts.map +1 -0
  38. package/dist/kernel/loop.d.ts.map +1 -1
  39. package/dist/kernel/materials.d.ts.map +1 -1
  40. package/dist/kernel/paintOrder.d.ts +53 -0
  41. package/dist/kernel/paintOrder.d.ts.map +1 -0
  42. package/dist/kernel/physics.d.ts +39 -0
  43. package/dist/kernel/physics.d.ts.map +1 -1
  44. package/dist/kernel/pivot.d.ts +54 -0
  45. package/dist/kernel/pivot.d.ts.map +1 -0
  46. package/dist/kernel/pointBuffers.d.ts +17 -0
  47. package/dist/kernel/pointBuffers.d.ts.map +1 -0
  48. package/dist/kernel/pointer.d.ts +31 -1
  49. package/dist/kernel/pointer.d.ts.map +1 -1
  50. package/dist/kernel/preview.d.ts +32 -0
  51. package/dist/kernel/preview.d.ts.map +1 -0
  52. package/dist/kernel/renderKit.d.ts +21 -1
  53. package/dist/kernel/renderKit.d.ts.map +1 -1
  54. package/dist/kernel/renderer.d.ts +6 -0
  55. package/dist/kernel/renderer.d.ts.map +1 -1
  56. package/dist/kernel/sceneChanges.d.ts +87 -0
  57. package/dist/kernel/sceneChanges.d.ts.map +1 -0
  58. package/dist/kernel/sceneGraph.d.ts +9 -1
  59. package/dist/kernel/sceneGraph.d.ts.map +1 -1
  60. package/dist/kernel/sceneIndex.d.ts +5 -0
  61. package/dist/kernel/sceneIndex.d.ts.map +1 -1
  62. package/dist/kernel/seeded.d.ts +9 -0
  63. package/dist/kernel/seeded.d.ts.map +1 -0
  64. package/dist/kernel/shots.d.ts +26 -0
  65. package/dist/kernel/shots.d.ts.map +1 -0
  66. package/dist/kernel/tape.d.ts +38 -0
  67. package/dist/kernel/tape.d.ts.map +1 -0
  68. package/dist/kernel/timeline.d.ts +60 -0
  69. package/dist/kernel/timeline.d.ts.map +1 -0
  70. package/dist/kernel/trail.d.ts +31 -0
  71. package/dist/kernel/trail.d.ts.map +1 -0
  72. package/dist/kernel/viewportGizmo.d.ts +25 -0
  73. package/dist/kernel/viewportGizmo.d.ts.map +1 -0
  74. package/dist/runtime/Inspector.d.ts +20 -0
  75. package/dist/runtime/Inspector.d.ts.map +1 -0
  76. package/dist/runtime/SceneFile.d.ts +462 -0
  77. package/dist/runtime/SceneFile.d.ts.map +1 -0
  78. package/dist/runtime/SceneSchema.d.ts +404 -0
  79. package/dist/runtime/SceneSchema.d.ts.map +1 -1
  80. package/dist/runtime/errors.d.ts +9 -0
  81. package/dist/runtime/errors.d.ts.map +1 -1
  82. package/dist/runtime/index.d.ts +3 -1
  83. package/dist/runtime/index.d.ts.map +1 -1
  84. package/dist/webgl/index.d.ts.map +1 -1
  85. package/dist/webgl/index.js +228 -3
  86. package/dist/webgl/index.js.map +6 -4
  87. package/dist/webgl/line.d.ts +4 -0
  88. package/dist/webgl/line.d.ts.map +1 -0
  89. package/dist/webgl/points.d.ts +4 -0
  90. package/dist/webgl/points.d.ts.map +1 -0
  91. package/dist/webgpu/index.d.ts.map +1 -1
  92. package/dist/webgpu/index.js +206 -26
  93. package/dist/webgpu/index.js.map +6 -4
  94. package/dist/webgpu/line.d.ts +4 -0
  95. package/dist/webgpu/line.d.ts.map +1 -0
  96. package/dist/webgpu/points.d.ts +4 -0
  97. package/dist/webgpu/points.d.ts.map +1 -0
  98. package/package.json +4 -2
  99. package/src/kernel/bodies.ts +299 -17
  100. package/src/kernel/boxSelect.ts +73 -0
  101. package/src/kernel/build.ts +374 -1
  102. package/src/kernel/cameraShake.ts +3 -13
  103. package/src/kernel/describeScene.ts +224 -0
  104. package/src/kernel/description.ts +243 -0
  105. package/src/kernel/diff.ts +39 -0
  106. package/src/kernel/equality.ts +123 -0
  107. package/src/kernel/gizmo.ts +478 -0
  108. package/src/kernel/history.ts +118 -0
  109. package/src/kernel/index.ts +110 -1
  110. package/src/kernel/inspect.ts +214 -0
  111. package/src/kernel/lineGeometry.ts +75 -0
  112. package/src/kernel/lockstep.ts +237 -0
  113. package/src/kernel/loop.ts +7 -0
  114. package/src/kernel/materials.ts +3 -0
  115. package/src/kernel/paintOrder.ts +274 -0
  116. package/src/kernel/physics.ts +86 -1
  117. package/src/kernel/pivot.ts +418 -0
  118. package/src/kernel/pointBuffers.ts +115 -0
  119. package/src/kernel/pointer.ts +98 -17
  120. package/src/kernel/preview.ts +467 -0
  121. package/src/kernel/renderKit.ts +23 -1
  122. package/src/kernel/renderer.ts +6 -0
  123. package/src/kernel/sceneChanges.ts +265 -0
  124. package/src/kernel/sceneGraph.ts +354 -11
  125. package/src/kernel/sceneIndex.ts +8 -0
  126. package/src/kernel/seeded.ts +18 -0
  127. package/src/kernel/shots.ts +167 -0
  128. package/src/kernel/tape.ts +124 -0
  129. package/src/kernel/timeline.ts +93 -0
  130. package/src/kernel/trail.ts +170 -0
  131. package/src/kernel/viewportGizmo.ts +194 -0
  132. package/src/runtime/Inspector.ts +43 -0
  133. package/src/runtime/SceneFile.ts +46 -0
  134. package/src/runtime/SceneSchema.ts +319 -0
  135. package/src/runtime/errors.ts +6 -0
  136. package/src/runtime/index.ts +3 -1
  137. package/src/webgl/index.ts +4 -0
  138. package/src/webgl/line.ts +66 -0
  139. package/src/webgl/points.ts +205 -0
  140. package/src/webgpu/index.ts +4 -0
  141. package/src/webgpu/line.ts +67 -0
  142. package/src/webgpu/points.ts +193 -0
  143. package/dist/index-8cf8t6by.js.map +0 -41
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import {
2
+ __export,
2
3
  handJoints2,
3
4
  clipTime2,
4
5
  clipRunning2,
@@ -30,6 +31,7 @@ import {
30
31
  skyEquals2,
31
32
  contactShadowsEquals2,
32
33
  bodyEquals2,
34
+ assetsEqual2,
33
35
  physicsEquals2,
34
36
  xrEquals2,
35
37
  capacityFor2,
@@ -68,6 +70,15 @@ import {
68
70
  sharedMaterial2,
69
71
  group2,
70
72
  detailed2,
73
+ line2,
74
+ points2,
75
+ sparkles2,
76
+ stars2,
77
+ catmullRomPoints2,
78
+ catmullRomPointAt2,
79
+ catmullRomColors2,
80
+ cubicBezierPoints2,
81
+ quadraticBezierPoints2,
71
82
  headSpace2,
72
83
  jointSpace2,
73
84
  controllerSpace2,
@@ -78,6 +89,8 @@ import {
78
89
  xrMesh2,
79
90
  xrAnchor2,
80
91
  mesh2,
92
+ trail2,
93
+ edges2,
81
94
  body2,
82
95
  interactionGroups2,
83
96
  cuboidCollider2,
@@ -123,7 +136,12 @@ import {
123
136
  sunPositionFromAngles2,
124
137
  sky2,
125
138
  contactShadows2,
139
+ modelAsset2,
140
+ textureAsset2,
141
+ environmentAsset2,
142
+ fontAsset2,
126
143
  overlay2,
144
+ hud2,
127
145
  scene2,
128
146
  emptyIndex2,
129
147
  indexScene2,
@@ -147,6 +165,8 @@ import {
147
165
  clipCamera2,
148
166
  placeOverlays2,
149
167
  interactionBits2,
168
+ snapshotText2,
169
+ snapshotBytes2,
150
170
  colliderFor2,
151
171
  describedColliders2,
152
172
  collidersFor2,
@@ -167,22 +187,50 @@ import {
167
187
  createPointerTracker2,
168
188
  createSceneLoop2,
169
189
  recordingRendererFactory2,
170
- createSceneGraph2
171
- } from "./index-8cf8t6by.js";
172
- var __defProp = Object.defineProperty;
173
- var __returnValue = (v) => v;
174
- function __exportSetter(name, newValue) {
175
- this[name] = __returnValue.bind(null, newValue);
176
- }
177
- var __export = (target, all) => {
178
- for (var name in all)
179
- __defProp(target, name, {
180
- get: all[name],
181
- enumerable: true,
182
- configurable: true,
183
- set: __exportSetter.bind(all, name)
184
- });
185
- };
190
+ createSceneGraph2,
191
+ previewSvg2,
192
+ gizmo2,
193
+ pressGizmo2,
194
+ releaseGizmo2,
195
+ hoverGizmo2,
196
+ dragGizmo2,
197
+ movedAlike2,
198
+ gizmoHandleOf2,
199
+ gizmoNodes2,
200
+ boxSelect2,
201
+ exports_history,
202
+ exports_lockstep,
203
+ exports_timeline,
204
+ thingsBounds2,
205
+ describeScene2,
206
+ formatSummary2,
207
+ shotAngles2,
208
+ shotCamera2,
209
+ moods2,
210
+ moodStaging2,
211
+ inspectFields2,
212
+ setAt2,
213
+ sceneChanges2,
214
+ formatChanges2,
215
+ tape2,
216
+ placeTapeEnd2,
217
+ pointTape2,
218
+ clearTape2,
219
+ tapeLength2,
220
+ tapeMiddle2,
221
+ tapeNodes2,
222
+ pivot2,
223
+ pressPivot2,
224
+ releasePivot2,
225
+ hoverPivot2,
226
+ dragPivot2,
227
+ pivotHandleOf2,
228
+ pivotNodes2,
229
+ viewportGizmoNodes2,
230
+ viewportAxisOf2,
231
+ cameraAlong2
232
+ } from "./index-re3rrfwd.js";
233
+ import"./index-ttwy0znv.js";
186
234
 
187
235
  // src/runtime/FrameSource.ts
188
236
  var exports_FrameSource = {};
@@ -192,17 +240,11 @@ __export(exports_FrameSource, {
192
240
  layer: () => layer
193
241
  });
194
242
 
195
- // src/runtime/ResourceRegistry.ts
196
- var exports_ResourceRegistry = {};
197
- __export(exports_ResourceRegistry, {
198
- ResourceRegistry: () => ResourceRegistry,
199
- layer: () => layer2
200
- });
201
-
202
- // src/runtime/SceneRuntime.ts
203
- var exports_SceneRuntime = {};
204
- __export(exports_SceneRuntime, {
205
- make: () => make
243
+ // src/runtime/Inspector.ts
244
+ var exports_Inspector = {};
245
+ __export(exports_Inspector, {
246
+ edit: () => edit,
247
+ fields: () => fields
206
248
  });
207
249
 
208
250
  // src/runtime/SceneSchema.ts
@@ -210,6 +252,10 @@ var exports_SceneSchema = {};
210
252
  __export(exports_SceneSchema, {
211
253
  AmbientLightNode: () => AmbientLightNode,
212
254
  Animation: () => Animation,
255
+ Asset: () => Asset,
256
+ AssetFailedDetail: () => AssetFailedDetail,
257
+ AssetKind: () => AssetKind,
258
+ AssetLoadedDetail: () => AssetLoadedDetail,
213
259
  AutoRotatedDetail: () => AutoRotatedDetail,
214
260
  Axis: () => Axis,
215
261
  BackdropGeometry: () => BackdropGeometry,
@@ -238,10 +284,15 @@ __export(exports_SceneSchema, {
238
284
  GeometryRef: () => GeometryRef,
239
285
  Gesture: () => Gesture,
240
286
  GestureDetail: () => GestureDetail,
287
+ GestureEndDetail: () => GestureEndDetail,
241
288
  Gestures: () => Gestures,
289
+ Gizmo: () => Gizmo,
242
290
  GridNode: () => GridNode,
243
291
  HemisphereLightNode: () => HemisphereLightNode,
292
+ History: () => History,
244
293
  HitDetail: () => HitDetail,
294
+ Hud: () => Hud,
295
+ HudAlignment: () => HudAlignment,
245
296
  Instance: () => Instance,
246
297
  InstancesNode: () => InstancesNode,
247
298
  InteractionGroups: () => InteractionGroups,
@@ -253,6 +304,10 @@ __export(exports_SceneSchema, {
253
304
  LabelMeasuredDetail: () => LabelMeasuredDetail,
254
305
  LabelNode: () => LabelNode,
255
306
  LambertMaterial: () => LambertMaterial,
307
+ LineNode: () => LineNode,
308
+ Lockstep: () => Lockstep,
309
+ LockstepMember: () => LockstepMember,
310
+ LockstepPacket: () => LockstepPacket,
256
311
  MaterialRef: () => MaterialRef,
257
312
  MaterialSide: () => MaterialSide,
258
313
  MeasuredDetail: () => MeasuredDetail,
@@ -267,8 +322,14 @@ __export(exports_SceneSchema, {
267
322
  PhongMaterial: () => PhongMaterial,
268
323
  PhysicalMaterial: () => PhysicalMaterial,
269
324
  Physics: () => Physics,
325
+ PhysicsReachedDetail: () => PhysicsReachedDetail,
326
+ Pivot: () => Pivot,
327
+ PivotHandle: () => PivotHandle,
328
+ Placement: () => Placement,
270
329
  PlaneGeometry: () => PlaneGeometry,
271
330
  PointLightNode: () => PointLightNode,
331
+ PointLook: () => PointLook,
332
+ PointsNode: () => PointsNode,
272
333
  PostEffect: () => PostEffect,
273
334
  Ray: () => Ray,
274
335
  RenderSettings: () => RenderSettings,
@@ -289,8 +350,11 @@ __export(exports_SceneSchema, {
289
350
  SpotLightNode: () => SpotLightNode,
290
351
  StandardMaterial: () => StandardMaterial,
291
352
  SurfaceMaterial: () => SurfaceMaterial,
353
+ Tape: () => Tape,
292
354
  TextGeometry: () => TextGeometry,
355
+ Timeline: () => Timeline,
293
356
  TorusGeometry: () => TorusGeometry,
357
+ Trail: () => Trail,
294
358
  Transition: () => Transition,
295
359
  Vec3: () => Vec3,
296
360
  View: () => View,
@@ -307,12 +371,36 @@ __export(exports_SceneSchema, {
307
371
  XrStickDetail: () => XrStickDetail,
308
372
  XrSurfaceDetail: () => XrSurfaceDetail
309
373
  });
374
+
375
+ // src/runtime/ResourceRegistry.ts
376
+ var exports_ResourceRegistry = {};
377
+ __export(exports_ResourceRegistry, {
378
+ ResourceRegistry: () => ResourceRegistry,
379
+ layer: () => layer2
380
+ });
381
+
382
+ // src/runtime/SceneFile.ts
383
+ var exports_SceneFile = {};
384
+ __export(exports_SceneFile, {
385
+ SceneFile: () => SceneFile,
386
+ read: () => read,
387
+ save: () => save
388
+ });
389
+
390
+ // src/runtime/SceneRuntime.ts
391
+ var exports_SceneRuntime = {};
392
+ __export(exports_SceneRuntime, {
393
+ make: () => make
394
+ });
310
395
  // src/runtime/errors.ts
311
396
  import { Data } from "effect";
312
397
 
313
398
  class InvalidScene extends Data.TaggedError("InvalidScene") {
314
399
  }
315
400
 
401
+ class UnreadableScene extends Data.TaggedError("UnreadableScene") {
402
+ }
403
+
316
404
  class RendererUnavailable extends Data.TaggedError("RendererUnavailable") {
317
405
  }
318
406
  // src/runtime/FrameSource.ts
@@ -336,128 +424,18 @@ var fromScheduler = (scheduler) => ({
336
424
  class FrameSource extends Context.Service()("effect-three/FrameSource") {
337
425
  }
338
426
  var layer = (scheduler) => Layer.succeed(FrameSource, fromScheduler(scheduler));
339
- // src/runtime/ResourceRegistry.ts
340
- import { Context as Context2, Effect as Effect2, Layer as Layer2 } from "effect";
341
- class ResourceRegistry extends Context2.Service()("effect-three/ResourceRegistry") {
342
- }
343
- var acquireStore = Effect2.sync(createResourceStore2);
344
- var toService = (store) => ({ store });
345
- var scopedStore = Effect2.acquireRelease(acquireStore, (store) => Effect2.sync(store.dispose));
346
- var layer2 = Layer2.effect(ResourceRegistry, scopedStore.pipe(Effect2.map(toService)));
347
- // src/runtime/SceneRuntime.ts
348
- import { Clock, Effect as Effect3, Exit, Match, Option, Queue, Result, Scope, Stream } from "effect";
349
- var defaultEventCapacity = 64;
350
- var noBehaviours = {};
351
- var ignorePlacements = (_placements) => {
352
- return;
353
- };
354
- var nanosPerMillisecond = 1e6;
355
- var nanosPerSecond = 1e9;
356
- var toResult = (result) => Match.valueTags(result, {
357
- Applied: (applied) => Result.succeed(applied.ops),
358
- Invalid: ({ error }) => Result.fail(new InvalidScene({ error }))
359
- });
360
- var applyViewport = (graph, renderer, viewport) => {
361
- graph.resize(viewport.width, viewport.height);
362
- renderer.setViewport(viewport);
363
- };
364
- var sceneGraph = (registry, behaviours, engines) => () => createSceneGraph2({
365
- store: registry.store,
366
- behaviours,
367
- physics: engines.physics,
368
- labels: engines.labels,
369
- kit: engines.renderer.kit
370
- });
371
- var reconcileNow = (graph, sceneClock, scene) => {
372
- graph.tick(sceneClock.elapsedSeconds());
373
- return graph.reconcile(scene);
374
- };
375
- var viewportChange = (graph, renderer, viewport) => () => applyViewport(graph, renderer, viewport);
376
- var animationChange = (sceneClock, graph, animating) => () => {
377
- sceneClock.setAnimating(animating);
378
- graph.setAnimating(animating);
379
- };
380
- var acquireGraph = (registry, behaviours, engines) => {
381
- const create = Effect3.sync(sceneGraph(registry, behaviours, engines));
382
- return Effect3.acquireRelease(create, (graph) => Effect3.sync(graph.dispose));
383
- };
384
- var acquireRenderer = (factory) => {
385
- const create = Effect3.try({
386
- try: factory.create,
387
- catch: (cause) => new RendererUnavailable({ cause })
388
- });
389
- return Effect3.acquireRelease(create, (renderer) => Effect3.sync(renderer.dispose));
390
- };
391
- var awaitReady = (renderer) => Option.match(Option.fromNullishOr(renderer.ready), {
392
- onNone: () => Effect3.void,
393
- onSome: (ready) => Effect3.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) })
394
- });
395
- var invalidationListening = (graph, onInvalidated) => () => graph.onInvalidated(onInvalidated);
396
- var acquireInvalidation = (graph, onInvalidated) => {
397
- const listen = Effect3.sync(invalidationListening(graph, onInvalidated));
398
- return Effect3.acquireRelease(listen, Effect3.sync);
399
- };
400
- var acquireEvents = (capacity) => {
401
- const create = Queue.sliding(capacity);
402
- return Effect3.acquireRelease(create, Queue.shutdown);
403
- };
404
- function* startScene(options) {
405
- const registry = yield* ResourceRegistry;
406
- const frames = yield* FrameSource;
407
- const clock = yield* Clock.Clock;
408
- const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);
409
- const startupOps = yield* Effect3.fromResult(toResult(graph.reconcile(options.scene)));
410
- const renderer = yield* acquireRenderer(options.renderer);
411
- yield* awaitReady(renderer);
412
- applyViewport(graph, renderer, options.viewport);
413
- const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);
414
- const sceneClock = createSceneClock2(() => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond);
415
- const loop = createSceneLoop2({
416
- graph,
417
- renderer,
418
- elapsedSeconds: sceneClock.elapsedSeconds,
419
- emit: (event) => {
420
- Queue.offerUnsafe(events, event);
421
- },
422
- now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,
423
- placeOverlays: options.placeOverlays ?? ignorePlacements
424
- });
425
- yield* Effect3.addFinalizer(() => Effect3.sync(loop.dispose));
426
- const pacer = createFramePacer2(loop);
427
- pacer.attach(yield* frames.subscribe(pacer.frame));
428
- yield* acquireInvalidation(graph, pacer.wake);
429
- return {
430
- graph,
431
- startupOps,
432
- update: (scene) => Effect3.suspend(() => Effect3.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),
433
- resize: (viewport) => Effect3.sync(viewportChange(graph, renderer, viewport)),
434
- setAnimating: (animating) => Effect3.sync(animationChange(sceneClock, graph, animating)),
435
- advance: Effect3.sync(pacer.advance),
436
- drawNow: pacer.advance,
437
- pointer: loop.pointer,
438
- xrInput: loop.xrInput,
439
- events: Stream.fromQueue(events),
440
- drainEvents: Queue.clear(events)
441
- };
442
- }
443
- function* startAtomically(options) {
444
- const parent = yield* Effect3.scope;
445
- const child = yield* Scope.fork(parent);
446
- return yield* Effect3.gen(() => startScene(options)).pipe(Scope.provide(child), Effect3.onError((cause) => Scope.close(child, Exit.failCause(cause))));
447
- }
448
- var make = (options) => {
449
- const program = Effect3.gen(() => startAtomically(options));
450
- return program.pipe(Effect3.withSpan("effect-three/SceneRuntime.make"));
451
- };
427
+ // src/runtime/Inspector.ts
428
+ import { Result, Schema as Schema2 } from "effect";
429
+
452
430
  // src/runtime/SceneSchema.ts
453
- import { Effect as Effect4, Schema } from "effect";
431
+ import { Effect as Effect2, Schema } from "effect";
454
432
  var NonNegative = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));
455
433
  var Positive = Schema.Finite.check(Schema.isGreaterThan(0));
456
434
  var UnitInterval = Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }));
457
435
  var Vec3 = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite]);
458
436
  var Axis = Schema.Literals(["x", "y", "z"]);
459
- var absentAsNull = (schema) => Schema.NullOr(schema).pipe(Schema.withDecodingDefaultKey(Effect4.succeed(null)));
460
- var absentAsFalse = Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect4.succeed(false)));
437
+ var absentAsNull = (schema) => Schema.NullOr(schema).pipe(Schema.withDecodingDefaultKey(Effect2.succeed(null)));
438
+ var absentAsFalse = Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect2.succeed(false)));
461
439
  var Rgb = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 16777215 }));
462
440
  var Rotation = Schema.Union([
463
441
  Schema.TaggedStruct("Fixed", { euler: Vec3 }),
@@ -583,7 +561,8 @@ var shaded = { ...surface, flatShading: Schema.Boolean };
583
561
  var BasicMaterial = Schema.TaggedStruct("Basic", {
584
562
  color: Rgb,
585
563
  map: TextureId,
586
- ...surface
564
+ ...surface,
565
+ depthTest: Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect2.succeed(true)))
587
566
  });
588
567
  var LambertMaterial = Schema.TaggedStruct("Lambert", {
589
568
  color: Rgb,
@@ -717,6 +696,17 @@ var JointKind = Schema.Union([
717
696
  damping: Schema.Finite
718
697
  })
719
698
  ]);
699
+ var Trail = absentAsNull(Schema.Struct({
700
+ width: NonNegative,
701
+ length: NonNegative,
702
+ decay: NonNegative,
703
+ local: Schema.Boolean,
704
+ stride: NonNegative,
705
+ interval: NonNegative,
706
+ color: Rgb,
707
+ taper: Schema.Literals(["none", "linear", "quadratic"]),
708
+ fade: Schema.Boolean
709
+ }));
720
710
  var Joint = Schema.Struct({
721
711
  key: Schema.String,
722
712
  a: BodyRef,
@@ -726,11 +716,17 @@ var Joint = Schema.Struct({
726
716
  kind: JointKind,
727
717
  contacts: Schema.Boolean
728
718
  });
719
+ var StepCount = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
729
720
  var Physics = Schema.Struct({
730
721
  gravity: Vec3,
731
722
  paused: Schema.Boolean,
732
723
  timeStep: Positive,
733
724
  interpolate: Schema.Boolean,
725
+ until: absentAsNull(StepCount),
726
+ run: Schema.Int.pipe(Schema.withDecodingDefaultKey(Effect2.succeed(0))),
727
+ snapshotAt: absentAsNull(StepCount),
728
+ from: absentAsNull(Schema.Struct({ step: StepCount, snapshot: Schema.NullOr(Schema.String) })),
729
+ keep: StepCount.pipe(Schema.withDecodingDefaultKey(Effect2.succeed(0))),
734
730
  debug: Schema.Boolean,
735
731
  joints: Schema.Array(Joint)
736
732
  });
@@ -746,7 +742,19 @@ var MeshNode = Schema.TaggedStruct("Mesh", {
746
742
  interactive: Schema.Boolean,
747
743
  castShadow: Schema.Boolean,
748
744
  receiveShadow: Schema.Boolean,
749
- body: Schema.NullOr(Body)
745
+ body: Schema.NullOr(Body),
746
+ edges: absentAsNull(Schema.Struct({
747
+ threshold: NonNegative,
748
+ color: Rgb,
749
+ width: NonNegative,
750
+ worldUnits: Schema.Boolean,
751
+ dashed: Schema.Boolean,
752
+ dashSize: NonNegative,
753
+ gapSize: NonNegative,
754
+ opacity: NonNegative,
755
+ transparent: Schema.Boolean
756
+ })),
757
+ trail: Trail
750
758
  });
751
759
  var Instance = Schema.Struct({
752
760
  key: Schema.String,
@@ -894,6 +902,70 @@ var HemisphereLightNode = Schema.TaggedStruct("HemisphereLight", {
894
902
  intensity: NonNegative,
895
903
  position: Vec3
896
904
  });
905
+ var PointLook = Schema.Union([
906
+ Schema.TaggedStruct("Dots", {
907
+ positions: Schema.Array(Vec3),
908
+ colors: Schema.NullOr(Schema.Array(Rgb)),
909
+ sizes: Schema.NullOr(Schema.Array(NonNegative)),
910
+ color: Rgb,
911
+ size: NonNegative,
912
+ sizeAttenuation: Schema.Boolean,
913
+ round: Schema.Boolean,
914
+ opacity: NonNegative,
915
+ transparent: Schema.Boolean
916
+ }),
917
+ Schema.TaggedStruct("Sparkles", {
918
+ count: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
919
+ speed: Schema.Finite,
920
+ opacity: NonNegative,
921
+ scale: Vec3,
922
+ size: Schema.NullOr(NonNegative),
923
+ color: Rgb,
924
+ noise: Vec3,
925
+ seed: Schema.Finite
926
+ }),
927
+ Schema.TaggedStruct("Stars", {
928
+ radius: NonNegative,
929
+ depth: NonNegative,
930
+ count: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
931
+ factor: NonNegative,
932
+ saturation: NonNegative,
933
+ fade: Schema.Boolean,
934
+ speed: Schema.Finite,
935
+ seed: Schema.Finite
936
+ })
937
+ ]);
938
+ var PointsNode = Schema.TaggedStruct("Points", {
939
+ key: Schema.String,
940
+ position: Vec3,
941
+ rotation: Rotation,
942
+ scale: Vec3,
943
+ transition: Transition,
944
+ behaviour: Schema.NullOr(Behave),
945
+ look: PointLook
946
+ });
947
+ var LineNode = Schema.TaggedStruct("Line", {
948
+ key: Schema.String,
949
+ position: Vec3,
950
+ rotation: Rotation,
951
+ scale: Vec3,
952
+ transition: Transition,
953
+ behaviour: Schema.NullOr(Behave),
954
+ interactive: Schema.Boolean,
955
+ points: Schema.Array(Vec3),
956
+ segments: Schema.Boolean,
957
+ color: Rgb,
958
+ vertexColors: Schema.NullOr(Schema.Array(Rgb)),
959
+ width: NonNegative,
960
+ worldUnits: Schema.Boolean,
961
+ dashed: Schema.Boolean,
962
+ dashSize: NonNegative,
963
+ gapSize: NonNegative,
964
+ dashScale: NonNegative,
965
+ dashOffset: Schema.Finite,
966
+ opacity: NonNegative,
967
+ transparent: Schema.Boolean
968
+ });
897
969
  var SceneNode = Schema.Union([
898
970
  Schema.TaggedStruct("Group", {
899
971
  key: Schema.String,
@@ -906,12 +978,15 @@ var SceneNode = Schema.Union([
906
978
  children: Schema.Array(Schema.suspend(() => SceneNode)),
907
979
  body: Schema.NullOr(Body),
908
980
  follow: Schema.NullOr(XrSpace),
909
- detail: absentAsNull(Schema.Struct({ distances: Schema.Array(NonNegative), hysteresis: NonNegative }))
981
+ detail: absentAsNull(Schema.Struct({ distances: Schema.Array(NonNegative), hysteresis: NonNegative })),
982
+ trail: Trail
910
983
  }),
911
984
  MeshNode,
912
985
  InstancesNode,
913
986
  BorrowedNode,
914
987
  LabelNode,
988
+ LineNode,
989
+ PointsNode,
915
990
  ShaderGridNode,
916
991
  AmbientLightNode,
917
992
  DirectionalLightNode,
@@ -991,6 +1066,22 @@ var RenderTexture = Schema.Struct({
991
1066
  background: Schema.NullOr(Rgb),
992
1067
  children: Schema.Array(SceneNode)
993
1068
  });
1069
+ var HudAlignment = Schema.Literals([
1070
+ "top-left",
1071
+ "top-center",
1072
+ "top-right",
1073
+ "center-left",
1074
+ "center-center",
1075
+ "center-right",
1076
+ "bottom-left",
1077
+ "bottom-center",
1078
+ "bottom-right"
1079
+ ]);
1080
+ var Hud = Schema.Struct({
1081
+ alignment: HudAlignment,
1082
+ margin: Schema.Tuple([Schema.Finite, Schema.Finite]),
1083
+ children: Schema.Array(SceneNode)
1084
+ });
994
1085
  var Overlay = Schema.Struct({
995
1086
  key: Schema.String,
996
1087
  node: Schema.NullOr(Schema.String),
@@ -1048,11 +1139,19 @@ var Xr = Schema.Struct({
1048
1139
  }))
1049
1140
  });
1050
1141
  var Gestures = Schema.Literals(["page", "scene"]);
1142
+ var AssetKind = Schema.Literals(["model", "texture", "environment", "font"]);
1143
+ var Asset = Schema.Struct({
1144
+ kind: AssetKind,
1145
+ id: Schema.String,
1146
+ url: Schema.String,
1147
+ levels: Schema.Array(Schema.String).pipe(Schema.withDecodingDefaultKey(Effect2.succeed([])))
1148
+ });
1051
1149
  var SceneDescription = Schema.Struct({
1052
1150
  camera: Camera,
1053
1151
  gestures: Gestures,
1054
1152
  views: Schema.Array(View),
1055
1153
  renderTextures: Schema.Array(RenderTexture),
1154
+ hud: absentAsNull(Hud),
1056
1155
  overlays: Schema.Array(Overlay),
1057
1156
  environment: Schema.NullOr(Environment),
1058
1157
  sky: Schema.NullOr(Sky),
@@ -1060,10 +1159,28 @@ var SceneDescription = Schema.Struct({
1060
1159
  physics: Schema.NullOr(Physics),
1061
1160
  xr: Schema.NullOr(Xr),
1062
1161
  measure: Schema.Array(Schema.String),
1162
+ assets: Schema.Array(Asset).pipe(Schema.withDecodingDefaultKey(Effect2.succeed([]))),
1063
1163
  render: RenderSettings,
1064
1164
  resources: ResourceDefinitions,
1065
1165
  children: Schema.Array(SceneNode)
1066
1166
  });
1167
+ var AssetLoadedDetail = Schema.Struct({
1168
+ kind: AssetKind,
1169
+ id: Schema.String,
1170
+ url: Schema.String,
1171
+ levels: Schema.Array(Schema.String),
1172
+ level: Schema.Int,
1173
+ final: Schema.Boolean,
1174
+ parts: Schema.Array(Schema.String),
1175
+ clips: Schema.Array(Schema.String)
1176
+ });
1177
+ var AssetFailedDetail = Schema.Struct({
1178
+ kind: AssetKind,
1179
+ id: Schema.String,
1180
+ url: Schema.String,
1181
+ levels: Schema.Array(Schema.String),
1182
+ reason: Schema.String
1183
+ });
1067
1184
  var KeyDetail = Schema.Struct({ key: Schema.String });
1068
1185
  var HitDetail = Schema.Struct({
1069
1186
  key: Schema.String,
@@ -1134,6 +1251,12 @@ var CollisionDetail = Schema.Struct({
1134
1251
  bPart: Schema.optionalKey(Schema.String),
1135
1252
  started: Schema.Boolean
1136
1253
  });
1254
+ var PhysicsReachedDetail = Schema.Struct({
1255
+ run: Schema.Int,
1256
+ step: StepCount,
1257
+ checksum: Schema.String,
1258
+ snapshot: Schema.optionalKey(Schema.String)
1259
+ });
1137
1260
  var XrHand = Schema.Literals(["left", "right", "none"]);
1138
1261
  var XrStickDetail = Schema.Struct({
1139
1262
  hand: XrHand,
@@ -1186,6 +1309,12 @@ var AutoRotatedDetail = Schema.Struct({
1186
1309
  position: Vec3
1187
1310
  });
1188
1311
  var GestureDetail = Schema.Struct({ gesture: Gesture });
1312
+ var GestureEndDetail = Schema.Struct({
1313
+ button: Schema.Int,
1314
+ modifiers: Modifiers,
1315
+ key: Schema.optionalKey(Schema.String),
1316
+ view: Schema.optionalKey(Schema.String)
1317
+ });
1189
1318
  var SceneEvent = Schema.Union([
1190
1319
  Schema.TaggedStruct("PointerEnter", HitDetail.fields),
1191
1320
  Schema.TaggedStruct("PointerLeave", KeyDetail.fields),
@@ -1200,11 +1329,13 @@ var SceneEvent = Schema.Union([
1200
1329
  Schema.TaggedStruct("Drag", DragDetail.fields),
1201
1330
  Schema.TaggedStruct("DragEnd", DragDetail.fields),
1202
1331
  Schema.TaggedStruct("Gesture", GestureDetail.fields),
1332
+ Schema.TaggedStruct("GestureEnd", GestureEndDetail.fields),
1203
1333
  Schema.TaggedStruct("AutoRotated", AutoRotatedDetail.fields),
1204
1334
  Schema.TaggedStruct("Collision", CollisionDetail.fields),
1205
1335
  Schema.TaggedStruct("Measured", MeasuredDetail.fields),
1206
1336
  Schema.TaggedStruct("LabelMeasured", LabelMeasuredDetail.fields),
1207
1337
  Schema.TaggedStruct("ContactForce", ContactForceDetail.fields),
1338
+ Schema.TaggedStruct("PhysicsReached", PhysicsReachedDetail.fields),
1208
1339
  Schema.TaggedStruct("XrStick", XrStickDetail.fields),
1209
1340
  Schema.TaggedStruct("XrButton", XrButtonDetail.fields),
1210
1341
  Schema.TaggedStruct("XrSurface", XrSurfaceDetail.fields),
@@ -1228,21 +1359,244 @@ var DescriptionError = Schema.Union([
1228
1359
  Schema.TaggedStruct("UnknownOverlayNode", { key: Schema.String, node: Schema.String }),
1229
1360
  Schema.TaggedStruct("UnknownOverlayView", { key: Schema.String, view: Schema.String }),
1230
1361
  Schema.TaggedStruct("UnknownMeasuredNode", { key: Schema.String }),
1362
+ Schema.TaggedStruct("DuplicateAssetId", { id: Schema.String }),
1231
1363
  Schema.TaggedStruct("DuplicateJointKey", { key: Schema.String }),
1232
1364
  Schema.TaggedStruct("UnknownJointBody", { joint: Schema.String, body: Schema.String }),
1233
1365
  Schema.TaggedStruct("DuplicateRenderTextureId", { id: Schema.String })
1234
1366
  ]);
1367
+ var Placement = Schema.Struct({ position: Vec3, rotation: Vec3, scale: Vec3 });
1368
+ var GizmoHandle = Schema.Literals(["x", "y", "z", "xy", "yz", "xz", "xyz"]);
1369
+ var Gizmo = Schema.Struct({
1370
+ mode: Schema.Literals(["translate", "rotate", "scale"]),
1371
+ space: Schema.Literals(["world", "local"]),
1372
+ size: Positive,
1373
+ translationSnap: Schema.NullOr(Positive),
1374
+ rotationSnap: Schema.NullOr(Positive),
1375
+ scaleSnap: Schema.NullOr(Positive),
1376
+ showX: Schema.Boolean,
1377
+ showY: Schema.Boolean,
1378
+ showZ: Schema.Boolean,
1379
+ hovered: Schema.NullOr(GizmoHandle),
1380
+ grab: Schema.NullOr(Schema.Struct({
1381
+ handle: GizmoHandle,
1382
+ start: Placement,
1383
+ from: Vec3,
1384
+ plane: Schema.Struct({ normal: Vec3, constant: Schema.Finite }),
1385
+ eye: Vec3,
1386
+ distance: Schema.Finite
1387
+ }))
1388
+ });
1389
+ var History = (value) => Schema.Struct({
1390
+ entries: Schema.Array(Schema.Struct({
1391
+ id: Schema.Int,
1392
+ parent: Schema.NullOr(Schema.Int),
1393
+ label: Schema.String,
1394
+ value,
1395
+ next: Schema.NullOr(Schema.Int)
1396
+ })),
1397
+ current: Schema.Int
1398
+ });
1399
+ var LockstepEntry = (input) => Schema.Union([
1400
+ Schema.TaggedStruct("Input", { input }),
1401
+ Schema.TaggedStruct("Admit", { peer: Schema.String })
1402
+ ]);
1403
+ var LockstepPacket = (input) => Schema.Struct({
1404
+ peer: Schema.String,
1405
+ turn: Schema.Int,
1406
+ entries: Schema.Array(LockstepEntry(input))
1407
+ });
1408
+ var LockstepMember = Schema.Struct({
1409
+ peer: Schema.String,
1410
+ from: Schema.Int,
1411
+ until: Schema.NullOr(Schema.Int)
1412
+ });
1413
+ var Lockstep = (input) => Schema.Struct({
1414
+ self: Schema.String,
1415
+ members: Schema.Array(LockstepMember),
1416
+ turn: Schema.Int,
1417
+ sent: Schema.Int,
1418
+ lead: Schema.Int,
1419
+ pending: Schema.Array(LockstepEntry(input)),
1420
+ received: Schema.Array(LockstepPacket(input))
1421
+ });
1422
+ var Timeline = (input) => Schema.Struct({
1423
+ inputs: Schema.Array(Schema.Struct({ step: StepCount, input })),
1424
+ applied: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
1425
+ reached: Schema.NullOr(StepCount),
1426
+ frontier: StepCount
1427
+ });
1428
+ var Tape = Schema.Struct({
1429
+ from: Schema.NullOr(Vec3),
1430
+ to: Schema.NullOr(Vec3),
1431
+ pointer: Schema.NullOr(Vec3),
1432
+ snap: Schema.NullOr(Positive)
1433
+ });
1434
+ var PivotHandle = Schema.Literals(["arrow", "slider", "rotator", "sphere"].flatMap((kind) => ["x", "y", "z"].map((axis) => `${kind}-${axis}`)));
1435
+ var Pivot = Schema.Struct({
1436
+ scale: Positive,
1437
+ depthTest: Schema.Boolean,
1438
+ disableAxes: Schema.Boolean,
1439
+ disableSliders: Schema.Boolean,
1440
+ disableRotations: Schema.Boolean,
1441
+ disableScaling: Schema.Boolean,
1442
+ hovered: Schema.NullOr(PivotHandle),
1443
+ grab: Schema.NullOr(Schema.Struct({
1444
+ handle: PivotHandle,
1445
+ start: Placement,
1446
+ point: Vec3,
1447
+ e1: Vec3,
1448
+ e2: Vec3,
1449
+ normal: Vec3
1450
+ }))
1451
+ });
1452
+
1453
+ // src/runtime/Inspector.ts
1454
+ var hints = { colours: [Rgb.ast], vectors: [Vec3.ast] };
1455
+ var inspectable = (schema) => schema.ast;
1456
+ var fields = (schema, value) => inspectFields2(inspectable(schema), value, hints);
1457
+ var edit = (schema, value, path, next) => Schema2.decodeUnknownResult(schema)(setAt2(value, path, next)).pipe(Result.mapError((error) => error.message));
1458
+ // src/runtime/ResourceRegistry.ts
1459
+ import { Context as Context2, Effect as Effect3, Layer as Layer2 } from "effect";
1460
+ class ResourceRegistry extends Context2.Service()("effect-three/ResourceRegistry") {
1461
+ }
1462
+ var acquireStore = Effect3.sync(createResourceStore2);
1463
+ var toService = (store) => ({ store });
1464
+ var scopedStore = Effect3.acquireRelease(acquireStore, (store) => Effect3.sync(store.dispose));
1465
+ var layer2 = Layer2.effect(ResourceRegistry, scopedStore.pipe(Effect3.map(toService)));
1466
+ // src/runtime/SceneFile.ts
1467
+ import { Result as Result2, Schema as Schema3 } from "effect";
1468
+ var SceneFile = Schema3.Struct({
1469
+ format: Schema3.Literal("effect-three/scene"),
1470
+ version: Schema3.Literal(1),
1471
+ scene: SceneDescription
1472
+ });
1473
+ var asJson = Schema3.fromJsonString(SceneFile, { space: 2 });
1474
+ var save = (scene) => Schema3.encodeSync(asJson)(SceneFile.make({ format: "effect-three/scene", version: 1, scene }));
1475
+ var unreadable = (error) => new UnreadableScene({ issue: error.message });
1476
+ var read = (text) => Schema3.decodeUnknownResult(asJson)(text).pipe(Result2.map((file) => file.scene), Result2.mapError(unreadable));
1477
+ // src/runtime/SceneRuntime.ts
1478
+ import { Clock, Effect as Effect4, Exit, Match, Option, Queue, Result as Result3, Scope, Stream } from "effect";
1479
+ var defaultEventCapacity = 64;
1480
+ var noBehaviours = {};
1481
+ var ignorePlacements = (_placements) => {
1482
+ return;
1483
+ };
1484
+ var nanosPerMillisecond = 1e6;
1485
+ var nanosPerSecond = 1e9;
1486
+ var toResult = (result) => Match.valueTags(result, {
1487
+ Applied: (applied) => Result3.succeed(applied.ops),
1488
+ Invalid: ({ error }) => Result3.fail(new InvalidScene({ error }))
1489
+ });
1490
+ var applyViewport = (graph, renderer, viewport) => {
1491
+ graph.resize(viewport.width, viewport.height);
1492
+ renderer.setViewport(viewport);
1493
+ };
1494
+ var sceneGraph = (registry, behaviours, engines) => () => createSceneGraph2({
1495
+ store: registry.store,
1496
+ behaviours,
1497
+ physics: engines.physics,
1498
+ labels: engines.labels,
1499
+ kit: engines.renderer.kit
1500
+ });
1501
+ var reconcileNow = (graph, sceneClock, scene) => {
1502
+ graph.tick(sceneClock.elapsedSeconds());
1503
+ return graph.reconcile(scene);
1504
+ };
1505
+ var viewportChange = (graph, renderer, viewport) => () => applyViewport(graph, renderer, viewport);
1506
+ var animationChange = (sceneClock, graph, animating) => () => {
1507
+ sceneClock.setAnimating(animating);
1508
+ graph.setAnimating(animating);
1509
+ };
1510
+ var acquireGraph = (registry, behaviours, engines) => {
1511
+ const create = Effect4.sync(sceneGraph(registry, behaviours, engines));
1512
+ return Effect4.acquireRelease(create, (graph) => Effect4.sync(graph.dispose));
1513
+ };
1514
+ var acquireRenderer = (factory) => {
1515
+ const create = Effect4.try({
1516
+ try: factory.create,
1517
+ catch: (cause) => new RendererUnavailable({ cause })
1518
+ });
1519
+ return Effect4.acquireRelease(create, (renderer) => Effect4.sync(renderer.dispose));
1520
+ };
1521
+ var awaitReady = (renderer) => Option.match(Option.fromNullishOr(renderer.ready), {
1522
+ onNone: () => Effect4.void,
1523
+ onSome: (ready) => Effect4.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) })
1524
+ });
1525
+ var invalidationListening = (graph, onInvalidated) => () => graph.onInvalidated(onInvalidated);
1526
+ var acquireInvalidation = (graph, onInvalidated) => {
1527
+ const listen = Effect4.sync(invalidationListening(graph, onInvalidated));
1528
+ return Effect4.acquireRelease(listen, Effect4.sync);
1529
+ };
1530
+ var acquireEvents = (capacity) => {
1531
+ const create = Queue.sliding(capacity);
1532
+ return Effect4.acquireRelease(create, Queue.shutdown);
1533
+ };
1534
+ function* startScene(options) {
1535
+ const registry = yield* ResourceRegistry;
1536
+ const frames = yield* FrameSource;
1537
+ const clock = yield* Clock.Clock;
1538
+ const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);
1539
+ const startupOps = yield* Effect4.fromResult(toResult(graph.reconcile(options.scene)));
1540
+ const renderer = yield* acquireRenderer(options.renderer);
1541
+ yield* awaitReady(renderer);
1542
+ applyViewport(graph, renderer, options.viewport);
1543
+ const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);
1544
+ const sceneClock = createSceneClock2(() => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond);
1545
+ const loop = createSceneLoop2({
1546
+ graph,
1547
+ renderer,
1548
+ elapsedSeconds: sceneClock.elapsedSeconds,
1549
+ emit: (event) => {
1550
+ Queue.offerUnsafe(events, event);
1551
+ },
1552
+ now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,
1553
+ placeOverlays: options.placeOverlays ?? ignorePlacements
1554
+ });
1555
+ yield* Effect4.addFinalizer(() => Effect4.sync(loop.dispose));
1556
+ const pacer = createFramePacer2(loop);
1557
+ pacer.attach(yield* frames.subscribe(pacer.frame));
1558
+ yield* acquireInvalidation(graph, pacer.wake);
1559
+ return {
1560
+ graph,
1561
+ startupOps,
1562
+ update: (scene) => Effect4.suspend(() => Effect4.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),
1563
+ resize: (viewport) => Effect4.sync(viewportChange(graph, renderer, viewport)),
1564
+ setAnimating: (animating) => Effect4.sync(animationChange(sceneClock, graph, animating)),
1565
+ advance: Effect4.sync(pacer.advance),
1566
+ drawNow: pacer.advance,
1567
+ pointer: loop.pointer,
1568
+ xrInput: loop.xrInput,
1569
+ events: Stream.fromQueue(events),
1570
+ drainEvents: Queue.clear(events)
1571
+ };
1572
+ }
1573
+ function* startAtomically(options) {
1574
+ const parent = yield* Effect4.scope;
1575
+ const child = yield* Scope.fork(parent);
1576
+ return yield* Effect4.gen(() => startScene(options)).pipe(Scope.provide(child), Effect4.onError((cause) => Scope.close(child, Exit.failCause(cause))));
1577
+ }
1578
+ var make = (options) => {
1579
+ const program = Effect4.gen(() => startAtomically(options));
1580
+ return program.pipe(Effect4.withSpan("effect-three/SceneRuntime.make"));
1581
+ };
1235
1582
  export {
1236
1583
  exports_FrameSource as FrameSource,
1584
+ exports_history as History,
1585
+ exports_Inspector as Inspector,
1237
1586
  InvalidScene,
1587
+ exports_lockstep as Lockstep,
1238
1588
  RendererUnavailable,
1239
1589
  exports_ResourceRegistry as ResourceRegistry,
1590
+ exports_SceneFile as SceneFile,
1240
1591
  exports_SceneRuntime as SceneRuntime,
1241
1592
  exports_SceneSchema as SceneSchema,
1593
+ exports_timeline as Timeline,
1594
+ UnreadableScene,
1242
1595
  ambientLight2 as ambientLight,
1243
1596
  anchorSpace2 as anchorSpace,
1244
1597
  animationEquals2 as animationEquals,
1245
1598
  applyTween2 as applyTween,
1599
+ assetsEqual2 as assetsEqual,
1246
1600
  autoRotated2 as autoRotated,
1247
1601
  backdrop2 as backdrop,
1248
1602
  ballCollider2 as ballCollider,
@@ -1256,16 +1610,22 @@ export {
1256
1610
  bodyRef2 as bodyRef,
1257
1611
  borrowed2 as borrowed,
1258
1612
  box2 as box,
1613
+ boxSelect2 as boxSelect,
1259
1614
  buildMaterial2 as buildMaterial,
1260
1615
  builtinBehaviours2 as builtinBehaviours,
1616
+ cameraAlong2 as cameraAlong,
1261
1617
  cameraEquals2 as cameraEquals,
1262
1618
  cameraShake2 as cameraShake,
1263
1619
  capacityFor2 as capacityFor,
1264
1620
  capsule2 as capsule,
1265
1621
  capsuleCollider2 as capsuleCollider,
1622
+ catmullRomColors2 as catmullRomColors,
1623
+ catmullRomPointAt2 as catmullRomPointAt,
1624
+ catmullRomPoints2 as catmullRomPoints,
1266
1625
  centerOffset2 as centerOffset,
1267
1626
  changedFields2 as changedFields,
1268
1627
  circle2 as circle,
1628
+ clearTape2 as clearTape,
1269
1629
  clipCamera2 as clipCamera,
1270
1630
  clipRunning2 as clipRunning,
1271
1631
  clipTime2 as clipTime,
@@ -1290,21 +1650,27 @@ export {
1290
1650
  createSceneGraph2 as createSceneGraph,
1291
1651
  createSceneLoop2 as createSceneLoop,
1292
1652
  createXrTracker2 as createXrTracker,
1653
+ cubicBezierPoints2 as cubicBezierPoints,
1293
1654
  cuboidCollider2 as cuboidCollider,
1294
1655
  cylinder2 as cylinder,
1295
1656
  cylinderCollider2 as cylinderCollider,
1296
1657
  defaultOrbit2 as defaultOrbit,
1658
+ describeScene2 as describeScene,
1297
1659
  describedColliders2 as describedColliders,
1298
1660
  detailed2 as detailed,
1299
1661
  diff2 as diff,
1300
1662
  directionalLight2 as directionalLight,
1301
1663
  dollyCamera2 as dollyCamera,
1302
1664
  dollyCameraToward2 as dollyCameraToward,
1665
+ dragGizmo2 as dragGizmo,
1666
+ dragPivot2 as dragPivot,
1303
1667
  ease2 as ease,
1304
1668
  easeProgress2 as easeProgress,
1669
+ edges2 as edges,
1305
1670
  effectsEqual2 as effectsEqual,
1306
1671
  emptyIndex2 as emptyIndex,
1307
1672
  environment2 as environment,
1673
+ environmentAsset2 as environmentAsset,
1308
1674
  environmentEquals2 as environmentEquals,
1309
1675
  environmentPresetUrl2 as environmentPresetUrl,
1310
1676
  environmentPresets2 as environmentPresets,
@@ -1313,7 +1679,13 @@ export {
1313
1679
  fixed2 as fixed,
1314
1680
  fixedJoint2 as fixedJoint,
1315
1681
  float2 as float,
1682
+ fontAsset2 as fontAsset,
1683
+ formatChanges2 as formatChanges,
1684
+ formatSummary2 as formatSummary,
1316
1685
  geometryRefEquals2 as geometryRefEquals,
1686
+ gizmo2 as gizmo,
1687
+ gizmoHandleOf2 as gizmoHandleOf,
1688
+ gizmoNodes2 as gizmoNodes,
1317
1689
  glide2 as glide,
1318
1690
  glided2 as glided,
1319
1691
  grid2 as grid,
@@ -1321,7 +1693,11 @@ export {
1321
1693
  handJoints2 as handJoints,
1322
1694
  headSpace2 as headSpace,
1323
1695
  hemisphereLight2 as hemisphereLight,
1696
+ hoverGizmo2 as hoverGizmo,
1697
+ hoverPivot2 as hoverPivot,
1698
+ hud2 as hud,
1324
1699
  indexScene2 as indexScene,
1700
+ inspectFields2 as inspectFields,
1325
1701
  instance2 as instance,
1326
1702
  instanceEquals2 as instanceEquals,
1327
1703
  instances2 as instances,
@@ -1334,10 +1710,15 @@ export {
1334
1710
  label2 as label,
1335
1711
  lambert2 as lambert,
1336
1712
  lentGeometry2 as lentGeometry,
1713
+ line2 as line,
1337
1714
  locomote2 as locomote,
1338
1715
  materialRefEquals2 as materialRefEquals,
1339
1716
  mesh2 as mesh,
1340
1717
  meshSpace2 as meshSpace,
1718
+ modelAsset2 as modelAsset,
1719
+ moodStaging2 as moodStaging,
1720
+ moods2 as moods,
1721
+ movedAlike2 as movedAlike,
1341
1722
  noModifiers2 as noModifiers,
1342
1723
  normalMaterial2 as normalMaterial,
1343
1724
  orbit2 as orbit,
@@ -1352,15 +1733,27 @@ export {
1352
1733
  physical2 as physical,
1353
1734
  physics2 as physics,
1354
1735
  physicsEquals2 as physicsEquals,
1736
+ pivot2 as pivot,
1737
+ pivotHandleOf2 as pivotHandleOf,
1738
+ pivotNodes2 as pivotNodes,
1355
1739
  placeOverlays2 as placeOverlays,
1740
+ placeTapeEnd2 as placeTapeEnd,
1356
1741
  plane2 as plane,
1357
1742
  planeSpace2 as planeSpace,
1358
1743
  play2 as play,
1359
1744
  pointLight2 as pointLight,
1360
1745
  pointOnPlane2 as pointOnPlane,
1746
+ pointTape2 as pointTape,
1747
+ points2 as points,
1361
1748
  positionMotor2 as positionMotor,
1749
+ pressGizmo2 as pressGizmo,
1750
+ pressPivot2 as pressPivot,
1751
+ previewSvg2 as previewSvg,
1362
1752
  prismaticJoint2 as prismaticJoint,
1753
+ quadraticBezierPoints2 as quadraticBezierPoints,
1363
1754
  recordingRendererFactory2 as recordingRendererFactory,
1755
+ releaseGizmo2 as releaseGizmo,
1756
+ releasePivot2 as releasePivot,
1364
1757
  renderSettings2 as renderSettings,
1365
1758
  renderSettingsEquals2 as renderSettingsEquals,
1366
1759
  renderTexture2 as renderTexture,
@@ -1373,13 +1766,20 @@ export {
1373
1766
  rotationEquals2 as rotationEquals,
1374
1767
  roundedBox2 as roundedBox,
1375
1768
  scene2 as scene,
1769
+ sceneChanges2 as sceneChanges,
1770
+ setAt2 as setAt,
1376
1771
  shaderGrid2 as shaderGrid,
1377
1772
  shadowMaterial2 as shadowMaterial,
1378
1773
  shapeEquals2 as shapeEquals,
1379
1774
  sharedGeometry2 as sharedGeometry,
1380
1775
  sharedMaterial2 as sharedMaterial,
1776
+ shotAngles2 as shotAngles,
1777
+ shotCamera2 as shotCamera,
1381
1778
  sky2 as sky,
1382
1779
  skyEquals2 as skyEquals,
1780
+ snapshotBytes2 as snapshotBytes,
1781
+ snapshotText2 as snapshotText,
1782
+ sparkles2 as sparkles,
1383
1783
  sphere2 as sphere,
1384
1784
  sphericalJoint2 as sphericalJoint,
1385
1785
  spin2 as spin,
@@ -1390,16 +1790,26 @@ export {
1390
1790
  stageBounds2 as stageBounds,
1391
1791
  stagePresets2 as stagePresets,
1392
1792
  standard2 as standard,
1793
+ stars2 as stars,
1393
1794
  startTween2 as startTween,
1394
1795
  sunPositionFromAngles2 as sunPositionFromAngles,
1796
+ tape2 as tape,
1797
+ tapeLength2 as tapeLength,
1798
+ tapeMiddle2 as tapeMiddle,
1799
+ tapeNodes2 as tapeNodes,
1395
1800
  teleport2 as teleport,
1396
1801
  text2 as text,
1802
+ textureAsset2 as textureAsset,
1803
+ thingsBounds2 as thingsBounds,
1397
1804
  torus2 as torus,
1805
+ trail2 as trail,
1398
1806
  transitionEquals2 as transitionEquals,
1399
1807
  updateMaterial2 as updateMaterial,
1400
1808
  vec3Equals2 as vec3Equals,
1401
1809
  velocityMotor2 as velocityMotor,
1402
1810
  view2 as view,
1811
+ viewportAxisOf2 as viewportAxisOf,
1812
+ viewportGizmoNodes2 as viewportGizmoNodes,
1403
1813
  viewsEqual2 as viewsEqual,
1404
1814
  vignette2 as vignette,
1405
1815
  writeRotation2 as writeRotation,
@@ -1410,5 +1820,5 @@ export {
1410
1820
  xrMeshGeometryId2 as xrMeshGeometryId
1411
1821
  };
1412
1822
 
1413
- //# debugId=B67B56D9B9035A5364756E2164756E21
1823
+ //# debugId=95B403F31DB6CB4364756E2164756E21
1414
1824
  //# sourceMappingURL=index.js.map