@opsydyn/effect-three 0.2.0 → 0.4.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.
Files changed (134) hide show
  1. package/CHANGELOG.md +21 -1
  2. package/README.md +14 -1
  3. package/dist/{index-01kwfekm.js → index-h3vf50fn.js} +2418 -85
  4. package/dist/index-h3vf50fn.js.map +53 -0
  5. package/dist/index-ttwy0znv.js +145 -0
  6. package/dist/index-ttwy0znv.js.map +12 -0
  7. package/dist/index.js +543 -149
  8. package/dist/index.js.map +8 -6
  9. package/dist/kernel/behaviours.d.ts.map +1 -1
  10. package/dist/kernel/boxSelect.d.ts +22 -0
  11. package/dist/kernel/boxSelect.d.ts.map +1 -0
  12. package/dist/kernel/build.d.ts +197 -6
  13. package/dist/kernel/build.d.ts.map +1 -1
  14. package/dist/kernel/cameraMotion.d.ts +3 -1
  15. package/dist/kernel/cameraMotion.d.ts.map +1 -1
  16. package/dist/kernel/cameraShake.d.ts +33 -0
  17. package/dist/kernel/cameraShake.d.ts.map +1 -0
  18. package/dist/kernel/describeScene.d.ts +50 -0
  19. package/dist/kernel/describeScene.d.ts.map +1 -0
  20. package/dist/kernel/description.d.ts +240 -2
  21. package/dist/kernel/description.d.ts.map +1 -1
  22. package/dist/kernel/diff.d.ts +18 -1
  23. package/dist/kernel/diff.d.ts.map +1 -1
  24. package/dist/kernel/equality.d.ts +13 -1
  25. package/dist/kernel/equality.d.ts.map +1 -1
  26. package/dist/kernel/gizmo.d.ts +69 -0
  27. package/dist/kernel/gizmo.d.ts.map +1 -0
  28. package/dist/kernel/history.d.ts +61 -0
  29. package/dist/kernel/history.d.ts.map +1 -0
  30. package/dist/kernel/index.d.ts +13 -2
  31. package/dist/kernel/index.d.ts.map +1 -1
  32. package/dist/kernel/index.js +116 -3
  33. package/dist/kernel/index.js.map +1 -1
  34. package/dist/kernel/inspect.d.ts +85 -0
  35. package/dist/kernel/inspect.d.ts.map +1 -0
  36. package/dist/kernel/lineGeometry.d.ts +25 -0
  37. package/dist/kernel/lineGeometry.d.ts.map +1 -0
  38. package/dist/kernel/lockstep.d.ts +114 -0
  39. package/dist/kernel/lockstep.d.ts.map +1 -0
  40. package/dist/kernel/loop.d.ts.map +1 -1
  41. package/dist/kernel/materials.d.ts.map +1 -1
  42. package/dist/kernel/pivot.d.ts +54 -0
  43. package/dist/kernel/pivot.d.ts.map +1 -0
  44. package/dist/kernel/pointBuffers.d.ts +17 -0
  45. package/dist/kernel/pointBuffers.d.ts.map +1 -0
  46. package/dist/kernel/pointer.d.ts +12 -0
  47. package/dist/kernel/pointer.d.ts.map +1 -1
  48. package/dist/kernel/renderKit.d.ts +21 -1
  49. package/dist/kernel/renderKit.d.ts.map +1 -1
  50. package/dist/kernel/renderer.d.ts +6 -0
  51. package/dist/kernel/renderer.d.ts.map +1 -1
  52. package/dist/kernel/resources.d.ts.map +1 -1
  53. package/dist/kernel/sceneChanges.d.ts +87 -0
  54. package/dist/kernel/sceneChanges.d.ts.map +1 -0
  55. package/dist/kernel/sceneGraph.d.ts +6 -1
  56. package/dist/kernel/sceneGraph.d.ts.map +1 -1
  57. package/dist/kernel/seeded.d.ts +9 -0
  58. package/dist/kernel/seeded.d.ts.map +1 -0
  59. package/dist/kernel/shots.d.ts +26 -0
  60. package/dist/kernel/shots.d.ts.map +1 -0
  61. package/dist/kernel/tape.d.ts +38 -0
  62. package/dist/kernel/tape.d.ts.map +1 -0
  63. package/dist/kernel/trail.d.ts +31 -0
  64. package/dist/kernel/trail.d.ts.map +1 -0
  65. package/dist/kernel/viewportGizmo.d.ts +25 -0
  66. package/dist/kernel/viewportGizmo.d.ts.map +1 -0
  67. package/dist/runtime/Inspector.d.ts +20 -0
  68. package/dist/runtime/Inspector.d.ts.map +1 -0
  69. package/dist/runtime/SceneFile.d.ts +448 -0
  70. package/dist/runtime/SceneFile.d.ts.map +1 -0
  71. package/dist/runtime/SceneSchema.d.ts +614 -5
  72. package/dist/runtime/SceneSchema.d.ts.map +1 -1
  73. package/dist/runtime/errors.d.ts +9 -0
  74. package/dist/runtime/errors.d.ts.map +1 -1
  75. package/dist/runtime/index.d.ts +3 -1
  76. package/dist/runtime/index.d.ts.map +1 -1
  77. package/dist/webgl/index.d.ts.map +1 -1
  78. package/dist/webgl/index.js +228 -3
  79. package/dist/webgl/index.js.map +6 -4
  80. package/dist/webgl/line.d.ts +4 -0
  81. package/dist/webgl/line.d.ts.map +1 -0
  82. package/dist/webgl/points.d.ts +4 -0
  83. package/dist/webgl/points.d.ts.map +1 -0
  84. package/dist/webgpu/index.d.ts.map +1 -1
  85. package/dist/webgpu/index.js +206 -26
  86. package/dist/webgpu/index.js.map +6 -4
  87. package/dist/webgpu/line.d.ts +4 -0
  88. package/dist/webgpu/line.d.ts.map +1 -0
  89. package/dist/webgpu/points.d.ts +4 -0
  90. package/dist/webgpu/points.d.ts.map +1 -0
  91. package/package.json +2 -1
  92. package/src/kernel/behaviours.ts +5 -0
  93. package/src/kernel/bodySources.ts +1 -1
  94. package/src/kernel/boxSelect.ts +73 -0
  95. package/src/kernel/build.ts +430 -0
  96. package/src/kernel/cameraMotion.ts +3 -0
  97. package/src/kernel/cameraShake.ts +87 -0
  98. package/src/kernel/describeScene.ts +224 -0
  99. package/src/kernel/description.ts +266 -1
  100. package/src/kernel/diff.ts +46 -1
  101. package/src/kernel/equality.ts +148 -0
  102. package/src/kernel/gizmo.ts +478 -0
  103. package/src/kernel/history.ts +118 -0
  104. package/src/kernel/index.ts +102 -0
  105. package/src/kernel/inspect.ts +214 -0
  106. package/src/kernel/lineGeometry.ts +75 -0
  107. package/src/kernel/lockstep.ts +237 -0
  108. package/src/kernel/loop.ts +5 -0
  109. package/src/kernel/materials.ts +3 -0
  110. package/src/kernel/pivot.ts +418 -0
  111. package/src/kernel/pointBuffers.ts +115 -0
  112. package/src/kernel/pointer.ts +63 -12
  113. package/src/kernel/renderKit.ts +23 -1
  114. package/src/kernel/renderer.ts +6 -0
  115. package/src/kernel/resources.ts +69 -0
  116. package/src/kernel/sceneChanges.ts +265 -0
  117. package/src/kernel/sceneGraph.ts +461 -9
  118. package/src/kernel/seeded.ts +18 -0
  119. package/src/kernel/shots.ts +167 -0
  120. package/src/kernel/tape.ts +124 -0
  121. package/src/kernel/trail.ts +170 -0
  122. package/src/kernel/viewportGizmo.ts +194 -0
  123. package/src/runtime/Inspector.ts +43 -0
  124. package/src/runtime/SceneFile.ts +46 -0
  125. package/src/runtime/SceneSchema.ts +305 -4
  126. package/src/runtime/errors.ts +6 -0
  127. package/src/runtime/index.ts +3 -1
  128. package/src/webgl/index.ts +4 -0
  129. package/src/webgl/line.ts +66 -0
  130. package/src/webgl/points.ts +205 -0
  131. package/src/webgpu/index.ts +4 -0
  132. package/src/webgpu/line.ts +67 -0
  133. package/src/webgpu/points.ts +193 -0
  134. package/dist/index-01kwfekm.js.map +0 -40
package/dist/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import {
2
+ __export,
2
3
  handJoints2,
3
4
  clipTime2,
4
5
  clipRunning2,
@@ -39,6 +40,7 @@ import {
39
40
  applyTween2,
40
41
  fixed2,
41
42
  spin2,
43
+ billboard2,
42
44
  box2,
43
45
  sphere2,
44
46
  plane2,
@@ -46,6 +48,8 @@ import {
46
48
  torus2,
47
49
  cone2,
48
50
  capsule2,
51
+ roundedBox2,
52
+ backdrop2,
49
53
  ring2,
50
54
  circle2,
51
55
  text2,
@@ -64,6 +68,16 @@ import {
64
68
  lentGeometry2,
65
69
  sharedMaterial2,
66
70
  group2,
71
+ detailed2,
72
+ line2,
73
+ points2,
74
+ sparkles2,
75
+ stars2,
76
+ catmullRomPoints2,
77
+ catmullRomPointAt2,
78
+ catmullRomColors2,
79
+ cubicBezierPoints2,
80
+ quadraticBezierPoints2,
67
81
  headSpace2,
68
82
  jointSpace2,
69
83
  controllerSpace2,
@@ -74,6 +88,8 @@ import {
74
88
  xrMesh2,
75
89
  xrAnchor2,
76
90
  mesh2,
91
+ trail2,
92
+ edges2,
77
93
  body2,
78
94
  interactionGroups2,
79
95
  cuboidCollider2,
@@ -108,6 +124,7 @@ import {
108
124
  hemisphereLight2,
109
125
  perspectiveCamera2,
110
126
  orthographicCamera2,
127
+ cameraShake2,
111
128
  bloom2,
112
129
  vignette2,
113
130
  film2,
@@ -119,6 +136,7 @@ import {
119
136
  sky2,
120
137
  contactShadows2,
121
138
  overlay2,
139
+ hud2,
122
140
  scene2,
123
141
  emptyIndex2,
124
142
  indexScene2,
@@ -162,22 +180,48 @@ import {
162
180
  createPointerTracker2,
163
181
  createSceneLoop2,
164
182
  recordingRendererFactory2,
165
- createSceneGraph2
166
- } from "./index-01kwfekm.js";
167
- var __defProp = Object.defineProperty;
168
- var __returnValue = (v) => v;
169
- function __exportSetter(name, newValue) {
170
- this[name] = __returnValue.bind(null, newValue);
171
- }
172
- var __export = (target, all) => {
173
- for (var name in all)
174
- __defProp(target, name, {
175
- get: all[name],
176
- enumerable: true,
177
- configurable: true,
178
- set: __exportSetter.bind(all, name)
179
- });
180
- };
183
+ createSceneGraph2,
184
+ gizmo2,
185
+ pressGizmo2,
186
+ releaseGizmo2,
187
+ hoverGizmo2,
188
+ dragGizmo2,
189
+ movedAlike2,
190
+ gizmoHandleOf2,
191
+ gizmoNodes2,
192
+ boxSelect2,
193
+ exports_history,
194
+ exports_lockstep,
195
+ thingsBounds2,
196
+ describeScene2,
197
+ formatSummary2,
198
+ shotAngles2,
199
+ shotCamera2,
200
+ moods2,
201
+ moodStaging2,
202
+ inspectFields2,
203
+ setAt2,
204
+ sceneChanges2,
205
+ formatChanges2,
206
+ tape2,
207
+ placeTapeEnd2,
208
+ pointTape2,
209
+ clearTape2,
210
+ tapeLength2,
211
+ tapeMiddle2,
212
+ tapeNodes2,
213
+ pivot2,
214
+ pressPivot2,
215
+ releasePivot2,
216
+ hoverPivot2,
217
+ dragPivot2,
218
+ pivotHandleOf2,
219
+ pivotNodes2,
220
+ viewportGizmoNodes2,
221
+ viewportAxisOf2,
222
+ cameraAlong2
223
+ } from "./index-h3vf50fn.js";
224
+ import"./index-ttwy0znv.js";
181
225
 
182
226
  // src/runtime/FrameSource.ts
183
227
  var exports_FrameSource = {};
@@ -187,17 +231,11 @@ __export(exports_FrameSource, {
187
231
  layer: () => layer
188
232
  });
189
233
 
190
- // src/runtime/ResourceRegistry.ts
191
- var exports_ResourceRegistry = {};
192
- __export(exports_ResourceRegistry, {
193
- ResourceRegistry: () => ResourceRegistry,
194
- layer: () => layer2
195
- });
196
-
197
- // src/runtime/SceneRuntime.ts
198
- var exports_SceneRuntime = {};
199
- __export(exports_SceneRuntime, {
200
- make: () => make
234
+ // src/runtime/Inspector.ts
235
+ var exports_Inspector = {};
236
+ __export(exports_Inspector, {
237
+ edit: () => edit,
238
+ fields: () => fields
201
239
  });
202
240
 
203
241
  // src/runtime/SceneSchema.ts
@@ -207,6 +245,7 @@ __export(exports_SceneSchema, {
207
245
  Animation: () => Animation,
208
246
  AutoRotatedDetail: () => AutoRotatedDetail,
209
247
  Axis: () => Axis,
248
+ BackdropGeometry: () => BackdropGeometry,
210
249
  BasicMaterial: () => BasicMaterial,
211
250
  Behave: () => Behave,
212
251
  Body: () => Body,
@@ -215,6 +254,7 @@ __export(exports_SceneSchema, {
215
254
  BoxGeometry: () => BoxGeometry,
216
255
  ButtonDetail: () => ButtonDetail,
217
256
  Camera: () => Camera,
257
+ CameraShake: () => CameraShake,
218
258
  CapsuleGeometry: () => CapsuleGeometry,
219
259
  CircleGeometry: () => CircleGeometry,
220
260
  ColliderDescription: () => ColliderDescription,
@@ -231,10 +271,15 @@ __export(exports_SceneSchema, {
231
271
  GeometryRef: () => GeometryRef,
232
272
  Gesture: () => Gesture,
233
273
  GestureDetail: () => GestureDetail,
274
+ GestureEndDetail: () => GestureEndDetail,
234
275
  Gestures: () => Gestures,
276
+ Gizmo: () => Gizmo,
235
277
  GridNode: () => GridNode,
236
278
  HemisphereLightNode: () => HemisphereLightNode,
279
+ History: () => History,
237
280
  HitDetail: () => HitDetail,
281
+ Hud: () => Hud,
282
+ HudAlignment: () => HudAlignment,
238
283
  Instance: () => Instance,
239
284
  InstancesNode: () => InstancesNode,
240
285
  InteractionGroups: () => InteractionGroups,
@@ -246,6 +291,10 @@ __export(exports_SceneSchema, {
246
291
  LabelMeasuredDetail: () => LabelMeasuredDetail,
247
292
  LabelNode: () => LabelNode,
248
293
  LambertMaterial: () => LambertMaterial,
294
+ LineNode: () => LineNode,
295
+ Lockstep: () => Lockstep,
296
+ LockstepMember: () => LockstepMember,
297
+ LockstepPacket: () => LockstepPacket,
249
298
  MaterialRef: () => MaterialRef,
250
299
  MaterialSide: () => MaterialSide,
251
300
  MeasuredDetail: () => MeasuredDetail,
@@ -260,8 +309,13 @@ __export(exports_SceneSchema, {
260
309
  PhongMaterial: () => PhongMaterial,
261
310
  PhysicalMaterial: () => PhysicalMaterial,
262
311
  Physics: () => Physics,
312
+ Pivot: () => Pivot,
313
+ PivotHandle: () => PivotHandle,
314
+ Placement: () => Placement,
263
315
  PlaneGeometry: () => PlaneGeometry,
264
316
  PointLightNode: () => PointLightNode,
317
+ PointLook: () => PointLook,
318
+ PointsNode: () => PointsNode,
265
319
  PostEffect: () => PostEffect,
266
320
  Ray: () => Ray,
267
321
  RenderSettings: () => RenderSettings,
@@ -270,6 +324,7 @@ __export(exports_SceneSchema, {
270
324
  Rgb: () => Rgb,
271
325
  RingGeometry: () => RingGeometry,
272
326
  Rotation: () => Rotation,
327
+ RoundedBoxGeometry: () => RoundedBoxGeometry,
273
328
  SceneDescription: () => SceneDescription,
274
329
  SceneEvent: () => SceneEvent,
275
330
  SceneNode: () => SceneNode,
@@ -281,8 +336,10 @@ __export(exports_SceneSchema, {
281
336
  SpotLightNode: () => SpotLightNode,
282
337
  StandardMaterial: () => StandardMaterial,
283
338
  SurfaceMaterial: () => SurfaceMaterial,
339
+ Tape: () => Tape,
284
340
  TextGeometry: () => TextGeometry,
285
341
  TorusGeometry: () => TorusGeometry,
342
+ Trail: () => Trail,
286
343
  Transition: () => Transition,
287
344
  Vec3: () => Vec3,
288
345
  View: () => View,
@@ -299,12 +356,36 @@ __export(exports_SceneSchema, {
299
356
  XrStickDetail: () => XrStickDetail,
300
357
  XrSurfaceDetail: () => XrSurfaceDetail
301
358
  });
359
+
360
+ // src/runtime/ResourceRegistry.ts
361
+ var exports_ResourceRegistry = {};
362
+ __export(exports_ResourceRegistry, {
363
+ ResourceRegistry: () => ResourceRegistry,
364
+ layer: () => layer2
365
+ });
366
+
367
+ // src/runtime/SceneFile.ts
368
+ var exports_SceneFile = {};
369
+ __export(exports_SceneFile, {
370
+ SceneFile: () => SceneFile,
371
+ read: () => read,
372
+ save: () => save
373
+ });
374
+
375
+ // src/runtime/SceneRuntime.ts
376
+ var exports_SceneRuntime = {};
377
+ __export(exports_SceneRuntime, {
378
+ make: () => make
379
+ });
302
380
  // src/runtime/errors.ts
303
381
  import { Data } from "effect";
304
382
 
305
383
  class InvalidScene extends Data.TaggedError("InvalidScene") {
306
384
  }
307
385
 
386
+ class UnreadableScene extends Data.TaggedError("UnreadableScene") {
387
+ }
388
+
308
389
  class RendererUnavailable extends Data.TaggedError("RendererUnavailable") {
309
390
  }
310
391
  // src/runtime/FrameSource.ts
@@ -328,126 +409,18 @@ var fromScheduler = (scheduler) => ({
328
409
  class FrameSource extends Context.Service()("effect-three/FrameSource") {
329
410
  }
330
411
  var layer = (scheduler) => Layer.succeed(FrameSource, fromScheduler(scheduler));
331
- // src/runtime/ResourceRegistry.ts
332
- import { Context as Context2, Effect as Effect2, Layer as Layer2 } from "effect";
333
- class ResourceRegistry extends Context2.Service()("effect-three/ResourceRegistry") {
334
- }
335
- var acquireStore = Effect2.sync(createResourceStore2);
336
- var toService = (store) => ({ store });
337
- var scopedStore = Effect2.acquireRelease(acquireStore, (store) => Effect2.sync(store.dispose));
338
- var layer2 = Layer2.effect(ResourceRegistry, scopedStore.pipe(Effect2.map(toService)));
339
- // src/runtime/SceneRuntime.ts
340
- import { Clock, Effect as Effect3, Exit, Match, Option, Queue, Result, Scope, Stream } from "effect";
341
- var defaultEventCapacity = 64;
342
- var noBehaviours = {};
343
- var ignorePlacements = (_placements) => {
344
- return;
345
- };
346
- var nanosPerMillisecond = 1e6;
347
- var nanosPerSecond = 1e9;
348
- var toResult = (result) => Match.valueTags(result, {
349
- Applied: (applied) => Result.succeed(applied.ops),
350
- Invalid: ({ error }) => Result.fail(new InvalidScene({ error }))
351
- });
352
- var applyViewport = (graph, renderer, viewport) => {
353
- graph.resize(viewport.width, viewport.height);
354
- renderer.setViewport(viewport);
355
- };
356
- var sceneGraph = (registry, behaviours, engines) => () => createSceneGraph2({
357
- store: registry.store,
358
- behaviours,
359
- physics: engines.physics,
360
- labels: engines.labels,
361
- kit: engines.renderer.kit
362
- });
363
- var reconcileNow = (graph, sceneClock, scene) => {
364
- graph.tick(sceneClock.elapsedSeconds());
365
- return graph.reconcile(scene);
366
- };
367
- var viewportChange = (graph, renderer, viewport) => () => applyViewport(graph, renderer, viewport);
368
- var animationChange = (sceneClock, graph, animating) => () => {
369
- sceneClock.setAnimating(animating);
370
- graph.setAnimating(animating);
371
- };
372
- var acquireGraph = (registry, behaviours, engines) => {
373
- const create = Effect3.sync(sceneGraph(registry, behaviours, engines));
374
- return Effect3.acquireRelease(create, (graph) => Effect3.sync(graph.dispose));
375
- };
376
- var acquireRenderer = (factory) => {
377
- const create = Effect3.try({
378
- try: factory.create,
379
- catch: (cause) => new RendererUnavailable({ cause })
380
- });
381
- return Effect3.acquireRelease(create, (renderer) => Effect3.sync(renderer.dispose));
382
- };
383
- var awaitReady = (renderer) => Option.match(Option.fromNullishOr(renderer.ready), {
384
- onNone: () => Effect3.void,
385
- onSome: (ready) => Effect3.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) })
386
- });
387
- var invalidationListening = (graph, onInvalidated) => () => graph.onInvalidated(onInvalidated);
388
- var acquireInvalidation = (graph, onInvalidated) => {
389
- const listen = Effect3.sync(invalidationListening(graph, onInvalidated));
390
- return Effect3.acquireRelease(listen, Effect3.sync);
391
- };
392
- var acquireEvents = (capacity) => {
393
- const create = Queue.sliding(capacity);
394
- return Effect3.acquireRelease(create, Queue.shutdown);
395
- };
396
- function* startScene(options) {
397
- const registry = yield* ResourceRegistry;
398
- const frames = yield* FrameSource;
399
- const clock = yield* Clock.Clock;
400
- const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);
401
- const startupOps = yield* Effect3.fromResult(toResult(graph.reconcile(options.scene)));
402
- const renderer = yield* acquireRenderer(options.renderer);
403
- yield* awaitReady(renderer);
404
- applyViewport(graph, renderer, options.viewport);
405
- const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);
406
- const sceneClock = createSceneClock2(() => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond);
407
- const loop = createSceneLoop2({
408
- graph,
409
- renderer,
410
- elapsedSeconds: sceneClock.elapsedSeconds,
411
- emit: (event) => {
412
- Queue.offerUnsafe(events, event);
413
- },
414
- now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,
415
- placeOverlays: options.placeOverlays ?? ignorePlacements
416
- });
417
- yield* Effect3.addFinalizer(() => Effect3.sync(loop.dispose));
418
- const pacer = createFramePacer2(loop);
419
- pacer.attach(yield* frames.subscribe(pacer.frame));
420
- yield* acquireInvalidation(graph, pacer.wake);
421
- return {
422
- graph,
423
- startupOps,
424
- update: (scene) => Effect3.suspend(() => Effect3.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),
425
- resize: (viewport) => Effect3.sync(viewportChange(graph, renderer, viewport)),
426
- setAnimating: (animating) => Effect3.sync(animationChange(sceneClock, graph, animating)),
427
- advance: Effect3.sync(pacer.advance),
428
- drawNow: pacer.advance,
429
- pointer: loop.pointer,
430
- xrInput: loop.xrInput,
431
- events: Stream.fromQueue(events),
432
- drainEvents: Queue.clear(events)
433
- };
434
- }
435
- function* startAtomically(options) {
436
- const parent = yield* Effect3.scope;
437
- const child = yield* Scope.fork(parent);
438
- return yield* Effect3.gen(() => startScene(options)).pipe(Scope.provide(child), Effect3.onError((cause) => Scope.close(child, Exit.failCause(cause))));
439
- }
440
- var make = (options) => {
441
- const program = Effect3.gen(() => startAtomically(options));
442
- return program.pipe(Effect3.withSpan("effect-three/SceneRuntime.make"));
443
- };
412
+ // src/runtime/Inspector.ts
413
+ import { Result, Schema as Schema2 } from "effect";
414
+
444
415
  // src/runtime/SceneSchema.ts
445
- import { Schema } from "effect";
416
+ import { Effect as Effect2, Schema } from "effect";
446
417
  var NonNegative = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));
447
418
  var Positive = Schema.Finite.check(Schema.isGreaterThan(0));
448
419
  var UnitInterval = Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 1 }));
449
420
  var Vec3 = Schema.Tuple([Schema.Finite, Schema.Finite, Schema.Finite]);
450
421
  var Axis = Schema.Literals(["x", "y", "z"]);
422
+ var absentAsNull = (schema) => Schema.NullOr(schema).pipe(Schema.withDecodingDefaultKey(Effect2.succeed(null)));
423
+ var absentAsFalse = Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect2.succeed(false)));
451
424
  var Rgb = Schema.Int.check(Schema.isBetween({ minimum: 0, maximum: 16777215 }));
452
425
  var Rotation = Schema.Union([
453
426
  Schema.TaggedStruct("Fixed", { euler: Vec3 }),
@@ -455,6 +428,11 @@ var Rotation = Schema.Union([
455
428
  axis: Axis,
456
429
  radiansPerSecond: Schema.Finite,
457
430
  phase: Schema.Finite
431
+ }),
432
+ Schema.TaggedStruct("Billboard", {
433
+ lockX: Schema.Boolean,
434
+ lockY: Schema.Boolean,
435
+ lockZ: Schema.Boolean
458
436
  })
459
437
  ]);
460
438
  var BoxGeometry = Schema.TaggedStruct("Box", {
@@ -492,6 +470,20 @@ var CapsuleGeometry = Schema.TaggedStruct("Capsule", {
492
470
  capSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
493
471
  radialSegments: Segments
494
472
  });
473
+ var RoundedBoxGeometry = Schema.TaggedStruct("RoundedBox", {
474
+ width: Positive,
475
+ height: Positive,
476
+ depth: Positive,
477
+ radius: NonNegative,
478
+ smoothness: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
479
+ bevelSegments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
480
+ steps: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
481
+ creaseAngle: NonNegative
482
+ });
483
+ var BackdropGeometry = Schema.TaggedStruct("Backdrop", {
484
+ floor: NonNegative,
485
+ segments: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))
486
+ });
495
487
  var RingGeometry = Schema.TaggedStruct("Ring", {
496
488
  innerRadius: NonNegative,
497
489
  outerRadius: Positive,
@@ -529,7 +521,9 @@ var ShapeGeometry = Schema.Union([
529
521
  ConeGeometry,
530
522
  CapsuleGeometry,
531
523
  RingGeometry,
532
- CircleGeometry
524
+ CircleGeometry,
525
+ RoundedBoxGeometry,
526
+ BackdropGeometry
533
527
  ]);
534
528
  var Behave = Schema.Struct({
535
529
  name: Schema.String,
@@ -552,7 +546,8 @@ var shaded = { ...surface, flatShading: Schema.Boolean };
552
546
  var BasicMaterial = Schema.TaggedStruct("Basic", {
553
547
  color: Rgb,
554
548
  map: TextureId,
555
- ...surface
549
+ ...surface,
550
+ depthTest: Schema.Boolean.pipe(Schema.withDecodingDefaultKey(Effect2.succeed(true)))
556
551
  });
557
552
  var LambertMaterial = Schema.TaggedStruct("Lambert", {
558
553
  color: Rgb,
@@ -686,6 +681,17 @@ var JointKind = Schema.Union([
686
681
  damping: Schema.Finite
687
682
  })
688
683
  ]);
684
+ var Trail = absentAsNull(Schema.Struct({
685
+ width: NonNegative,
686
+ length: NonNegative,
687
+ decay: NonNegative,
688
+ local: Schema.Boolean,
689
+ stride: NonNegative,
690
+ interval: NonNegative,
691
+ color: Rgb,
692
+ taper: Schema.Literals(["none", "linear", "quadratic"]),
693
+ fade: Schema.Boolean
694
+ }));
689
695
  var Joint = Schema.Struct({
690
696
  key: Schema.String,
691
697
  a: BodyRef,
@@ -715,7 +721,19 @@ var MeshNode = Schema.TaggedStruct("Mesh", {
715
721
  interactive: Schema.Boolean,
716
722
  castShadow: Schema.Boolean,
717
723
  receiveShadow: Schema.Boolean,
718
- body: Schema.NullOr(Body)
724
+ body: Schema.NullOr(Body),
725
+ edges: absentAsNull(Schema.Struct({
726
+ threshold: NonNegative,
727
+ color: Rgb,
728
+ width: NonNegative,
729
+ worldUnits: Schema.Boolean,
730
+ dashed: Schema.Boolean,
731
+ dashSize: NonNegative,
732
+ gapSize: NonNegative,
733
+ opacity: NonNegative,
734
+ transparent: Schema.Boolean
735
+ })),
736
+ trail: Trail
719
737
  });
720
738
  var Instance = Schema.Struct({
721
739
  key: Schema.String,
@@ -754,7 +772,9 @@ var BorrowedNode = Schema.TaggedStruct("Borrowed", {
754
772
  transition: Transition,
755
773
  behaviour: Schema.NullOr(Behave),
756
774
  interactive: Schema.Boolean,
757
- body: Schema.NullOr(Body)
775
+ body: Schema.NullOr(Body),
776
+ castShadow: absentAsFalse,
777
+ receiveShadow: absentAsFalse
758
778
  });
759
779
  var LabelNode = Schema.TaggedStruct("Label", {
760
780
  key: Schema.String,
@@ -861,6 +881,70 @@ var HemisphereLightNode = Schema.TaggedStruct("HemisphereLight", {
861
881
  intensity: NonNegative,
862
882
  position: Vec3
863
883
  });
884
+ var PointLook = Schema.Union([
885
+ Schema.TaggedStruct("Dots", {
886
+ positions: Schema.Array(Vec3),
887
+ colors: Schema.NullOr(Schema.Array(Rgb)),
888
+ sizes: Schema.NullOr(Schema.Array(NonNegative)),
889
+ color: Rgb,
890
+ size: NonNegative,
891
+ sizeAttenuation: Schema.Boolean,
892
+ round: Schema.Boolean,
893
+ opacity: NonNegative,
894
+ transparent: Schema.Boolean
895
+ }),
896
+ Schema.TaggedStruct("Sparkles", {
897
+ count: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
898
+ speed: Schema.Finite,
899
+ opacity: NonNegative,
900
+ scale: Vec3,
901
+ size: Schema.NullOr(NonNegative),
902
+ color: Rgb,
903
+ noise: Vec3,
904
+ seed: Schema.Finite
905
+ }),
906
+ Schema.TaggedStruct("Stars", {
907
+ radius: NonNegative,
908
+ depth: NonNegative,
909
+ count: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
910
+ factor: NonNegative,
911
+ saturation: NonNegative,
912
+ fade: Schema.Boolean,
913
+ speed: Schema.Finite,
914
+ seed: Schema.Finite
915
+ })
916
+ ]);
917
+ var PointsNode = Schema.TaggedStruct("Points", {
918
+ key: Schema.String,
919
+ position: Vec3,
920
+ rotation: Rotation,
921
+ scale: Vec3,
922
+ transition: Transition,
923
+ behaviour: Schema.NullOr(Behave),
924
+ look: PointLook
925
+ });
926
+ var LineNode = Schema.TaggedStruct("Line", {
927
+ key: Schema.String,
928
+ position: Vec3,
929
+ rotation: Rotation,
930
+ scale: Vec3,
931
+ transition: Transition,
932
+ behaviour: Schema.NullOr(Behave),
933
+ interactive: Schema.Boolean,
934
+ points: Schema.Array(Vec3),
935
+ segments: Schema.Boolean,
936
+ color: Rgb,
937
+ vertexColors: Schema.NullOr(Schema.Array(Rgb)),
938
+ width: NonNegative,
939
+ worldUnits: Schema.Boolean,
940
+ dashed: Schema.Boolean,
941
+ dashSize: NonNegative,
942
+ gapSize: NonNegative,
943
+ dashScale: NonNegative,
944
+ dashOffset: Schema.Finite,
945
+ opacity: NonNegative,
946
+ transparent: Schema.Boolean
947
+ });
864
948
  var SceneNode = Schema.Union([
865
949
  Schema.TaggedStruct("Group", {
866
950
  key: Schema.String,
@@ -872,12 +956,16 @@ var SceneNode = Schema.Union([
872
956
  interactive: Schema.Boolean,
873
957
  children: Schema.Array(Schema.suspend(() => SceneNode)),
874
958
  body: Schema.NullOr(Body),
875
- follow: Schema.NullOr(XrSpace)
959
+ follow: Schema.NullOr(XrSpace),
960
+ detail: absentAsNull(Schema.Struct({ distances: Schema.Array(NonNegative), hysteresis: NonNegative })),
961
+ trail: Trail
876
962
  }),
877
963
  MeshNode,
878
964
  InstancesNode,
879
965
  BorrowedNode,
880
966
  LabelNode,
967
+ LineNode,
968
+ PointsNode,
881
969
  ShaderGridNode,
882
970
  AmbientLightNode,
883
971
  DirectionalLightNode,
@@ -887,6 +975,18 @@ var SceneNode = Schema.Union([
887
975
  GridNode
888
976
  ]);
889
977
  var CameraDamping = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0), Schema.isLessThan(1));
978
+ var CameraShake = Schema.Struct({
979
+ intensity: NonNegative,
980
+ decay: Schema.Boolean,
981
+ decayRate: NonNegative,
982
+ maxYaw: NonNegative,
983
+ maxPitch: NonNegative,
984
+ maxRoll: NonNegative,
985
+ yawFrequency: NonNegative,
986
+ pitchFrequency: NonNegative,
987
+ rollFrequency: NonNegative,
988
+ trigger: Schema.Finite
989
+ });
890
990
  var PerspectiveCamera = Schema.TaggedStruct("Perspective", {
891
991
  fov: Schema.Finite.check(Schema.isBetween({ minimum: 0, maximum: 180, exclusiveMinimum: true })),
892
992
  near: Positive,
@@ -894,7 +994,8 @@ var PerspectiveCamera = Schema.TaggedStruct("Perspective", {
894
994
  position: Vec3,
895
995
  lookAt: Vec3,
896
996
  damping: CameraDamping,
897
- autoRotate: Schema.Finite
997
+ autoRotate: Schema.Finite,
998
+ shake: absentAsNull(CameraShake)
898
999
  });
899
1000
  var OrthographicCamera = Schema.TaggedStruct("Orthographic", {
900
1001
  zoom: Positive,
@@ -903,7 +1004,8 @@ var OrthographicCamera = Schema.TaggedStruct("Orthographic", {
903
1004
  position: Vec3,
904
1005
  lookAt: Vec3,
905
1006
  damping: CameraDamping,
906
- autoRotate: Schema.Finite
1007
+ autoRotate: Schema.Finite,
1008
+ shake: absentAsNull(CameraShake)
907
1009
  });
908
1010
  var Camera = Schema.Union([PerspectiveCamera, OrthographicCamera]);
909
1011
  var NonNegativeFinite = Schema.Finite.check(Schema.isGreaterThanOrEqualTo(0));
@@ -943,6 +1045,22 @@ var RenderTexture = Schema.Struct({
943
1045
  background: Schema.NullOr(Rgb),
944
1046
  children: Schema.Array(SceneNode)
945
1047
  });
1048
+ var HudAlignment = Schema.Literals([
1049
+ "top-left",
1050
+ "top-center",
1051
+ "top-right",
1052
+ "center-left",
1053
+ "center-center",
1054
+ "center-right",
1055
+ "bottom-left",
1056
+ "bottom-center",
1057
+ "bottom-right"
1058
+ ]);
1059
+ var Hud = Schema.Struct({
1060
+ alignment: HudAlignment,
1061
+ margin: Schema.Tuple([Schema.Finite, Schema.Finite]),
1062
+ children: Schema.Array(SceneNode)
1063
+ });
946
1064
  var Overlay = Schema.Struct({
947
1065
  key: Schema.String,
948
1066
  node: Schema.NullOr(Schema.String),
@@ -1005,6 +1123,7 @@ var SceneDescription = Schema.Struct({
1005
1123
  gestures: Gestures,
1006
1124
  views: Schema.Array(View),
1007
1125
  renderTextures: Schema.Array(RenderTexture),
1126
+ hud: absentAsNull(Hud),
1008
1127
  overlays: Schema.Array(Overlay),
1009
1128
  environment: Schema.NullOr(Environment),
1010
1129
  sky: Schema.NullOr(Sky),
@@ -1138,6 +1257,12 @@ var AutoRotatedDetail = Schema.Struct({
1138
1257
  position: Vec3
1139
1258
  });
1140
1259
  var GestureDetail = Schema.Struct({ gesture: Gesture });
1260
+ var GestureEndDetail = Schema.Struct({
1261
+ button: Schema.Int,
1262
+ modifiers: Modifiers,
1263
+ key: Schema.optionalKey(Schema.String),
1264
+ view: Schema.optionalKey(Schema.String)
1265
+ });
1141
1266
  var SceneEvent = Schema.Union([
1142
1267
  Schema.TaggedStruct("PointerEnter", HitDetail.fields),
1143
1268
  Schema.TaggedStruct("PointerLeave", KeyDetail.fields),
@@ -1152,6 +1277,7 @@ var SceneEvent = Schema.Union([
1152
1277
  Schema.TaggedStruct("Drag", DragDetail.fields),
1153
1278
  Schema.TaggedStruct("DragEnd", DragDetail.fields),
1154
1279
  Schema.TaggedStruct("Gesture", GestureDetail.fields),
1280
+ Schema.TaggedStruct("GestureEnd", GestureEndDetail.fields),
1155
1281
  Schema.TaggedStruct("AutoRotated", AutoRotatedDetail.fields),
1156
1282
  Schema.TaggedStruct("Collision", CollisionDetail.fields),
1157
1283
  Schema.TaggedStruct("Measured", MeasuredDetail.fields),
@@ -1184,37 +1310,260 @@ var DescriptionError = Schema.Union([
1184
1310
  Schema.TaggedStruct("UnknownJointBody", { joint: Schema.String, body: Schema.String }),
1185
1311
  Schema.TaggedStruct("DuplicateRenderTextureId", { id: Schema.String })
1186
1312
  ]);
1313
+ var Placement = Schema.Struct({ position: Vec3, rotation: Vec3, scale: Vec3 });
1314
+ var GizmoHandle = Schema.Literals(["x", "y", "z", "xy", "yz", "xz", "xyz"]);
1315
+ var Gizmo = Schema.Struct({
1316
+ mode: Schema.Literals(["translate", "rotate", "scale"]),
1317
+ space: Schema.Literals(["world", "local"]),
1318
+ size: Positive,
1319
+ translationSnap: Schema.NullOr(Positive),
1320
+ rotationSnap: Schema.NullOr(Positive),
1321
+ scaleSnap: Schema.NullOr(Positive),
1322
+ showX: Schema.Boolean,
1323
+ showY: Schema.Boolean,
1324
+ showZ: Schema.Boolean,
1325
+ hovered: Schema.NullOr(GizmoHandle),
1326
+ grab: Schema.NullOr(Schema.Struct({
1327
+ handle: GizmoHandle,
1328
+ start: Placement,
1329
+ from: Vec3,
1330
+ plane: Schema.Struct({ normal: Vec3, constant: Schema.Finite }),
1331
+ eye: Vec3,
1332
+ distance: Schema.Finite
1333
+ }))
1334
+ });
1335
+ var History = (value) => Schema.Struct({
1336
+ entries: Schema.Array(Schema.Struct({
1337
+ id: Schema.Int,
1338
+ parent: Schema.NullOr(Schema.Int),
1339
+ label: Schema.String,
1340
+ value,
1341
+ next: Schema.NullOr(Schema.Int)
1342
+ })),
1343
+ current: Schema.Int
1344
+ });
1345
+ var LockstepEntry = (input) => Schema.Union([
1346
+ Schema.TaggedStruct("Input", { input }),
1347
+ Schema.TaggedStruct("Admit", { peer: Schema.String })
1348
+ ]);
1349
+ var LockstepPacket = (input) => Schema.Struct({
1350
+ peer: Schema.String,
1351
+ turn: Schema.Int,
1352
+ entries: Schema.Array(LockstepEntry(input))
1353
+ });
1354
+ var LockstepMember = Schema.Struct({
1355
+ peer: Schema.String,
1356
+ from: Schema.Int,
1357
+ until: Schema.NullOr(Schema.Int)
1358
+ });
1359
+ var Lockstep = (input) => Schema.Struct({
1360
+ self: Schema.String,
1361
+ members: Schema.Array(LockstepMember),
1362
+ turn: Schema.Int,
1363
+ sent: Schema.Int,
1364
+ lead: Schema.Int,
1365
+ pending: Schema.Array(LockstepEntry(input)),
1366
+ received: Schema.Array(LockstepPacket(input))
1367
+ });
1368
+ var Tape = Schema.Struct({
1369
+ from: Schema.NullOr(Vec3),
1370
+ to: Schema.NullOr(Vec3),
1371
+ pointer: Schema.NullOr(Vec3),
1372
+ snap: Schema.NullOr(Positive)
1373
+ });
1374
+ var PivotHandle = Schema.Literals(["arrow", "slider", "rotator", "sphere"].flatMap((kind) => ["x", "y", "z"].map((axis) => `${kind}-${axis}`)));
1375
+ var Pivot = Schema.Struct({
1376
+ scale: Positive,
1377
+ depthTest: Schema.Boolean,
1378
+ disableAxes: Schema.Boolean,
1379
+ disableSliders: Schema.Boolean,
1380
+ disableRotations: Schema.Boolean,
1381
+ disableScaling: Schema.Boolean,
1382
+ hovered: Schema.NullOr(PivotHandle),
1383
+ grab: Schema.NullOr(Schema.Struct({
1384
+ handle: PivotHandle,
1385
+ start: Placement,
1386
+ point: Vec3,
1387
+ e1: Vec3,
1388
+ e2: Vec3,
1389
+ normal: Vec3
1390
+ }))
1391
+ });
1392
+
1393
+ // src/runtime/Inspector.ts
1394
+ var hints = { colours: [Rgb.ast], vectors: [Vec3.ast] };
1395
+ var inspectable = (schema) => schema.ast;
1396
+ var fields = (schema, value) => inspectFields2(inspectable(schema), value, hints);
1397
+ var edit = (schema, value, path, next) => Schema2.decodeUnknownResult(schema)(setAt2(value, path, next)).pipe(Result.mapError((error) => error.message));
1398
+ // src/runtime/ResourceRegistry.ts
1399
+ import { Context as Context2, Effect as Effect3, Layer as Layer2 } from "effect";
1400
+ class ResourceRegistry extends Context2.Service()("effect-three/ResourceRegistry") {
1401
+ }
1402
+ var acquireStore = Effect3.sync(createResourceStore2);
1403
+ var toService = (store) => ({ store });
1404
+ var scopedStore = Effect3.acquireRelease(acquireStore, (store) => Effect3.sync(store.dispose));
1405
+ var layer2 = Layer2.effect(ResourceRegistry, scopedStore.pipe(Effect3.map(toService)));
1406
+ // src/runtime/SceneFile.ts
1407
+ import { Result as Result2, Schema as Schema3 } from "effect";
1408
+ var SceneFile = Schema3.Struct({
1409
+ format: Schema3.Literal("effect-three/scene"),
1410
+ version: Schema3.Literal(1),
1411
+ scene: SceneDescription
1412
+ });
1413
+ var asJson = Schema3.fromJsonString(SceneFile, { space: 2 });
1414
+ var save = (scene) => Schema3.encodeSync(asJson)(SceneFile.make({ format: "effect-three/scene", version: 1, scene }));
1415
+ var unreadable = (error) => new UnreadableScene({ issue: error.message });
1416
+ var read = (text) => Schema3.decodeUnknownResult(asJson)(text).pipe(Result2.map((file) => file.scene), Result2.mapError(unreadable));
1417
+ // src/runtime/SceneRuntime.ts
1418
+ import { Clock, Effect as Effect4, Exit, Match, Option, Queue, Result as Result3, Scope, Stream } from "effect";
1419
+ var defaultEventCapacity = 64;
1420
+ var noBehaviours = {};
1421
+ var ignorePlacements = (_placements) => {
1422
+ return;
1423
+ };
1424
+ var nanosPerMillisecond = 1e6;
1425
+ var nanosPerSecond = 1e9;
1426
+ var toResult = (result) => Match.valueTags(result, {
1427
+ Applied: (applied) => Result3.succeed(applied.ops),
1428
+ Invalid: ({ error }) => Result3.fail(new InvalidScene({ error }))
1429
+ });
1430
+ var applyViewport = (graph, renderer, viewport) => {
1431
+ graph.resize(viewport.width, viewport.height);
1432
+ renderer.setViewport(viewport);
1433
+ };
1434
+ var sceneGraph = (registry, behaviours, engines) => () => createSceneGraph2({
1435
+ store: registry.store,
1436
+ behaviours,
1437
+ physics: engines.physics,
1438
+ labels: engines.labels,
1439
+ kit: engines.renderer.kit
1440
+ });
1441
+ var reconcileNow = (graph, sceneClock, scene) => {
1442
+ graph.tick(sceneClock.elapsedSeconds());
1443
+ return graph.reconcile(scene);
1444
+ };
1445
+ var viewportChange = (graph, renderer, viewport) => () => applyViewport(graph, renderer, viewport);
1446
+ var animationChange = (sceneClock, graph, animating) => () => {
1447
+ sceneClock.setAnimating(animating);
1448
+ graph.setAnimating(animating);
1449
+ };
1450
+ var acquireGraph = (registry, behaviours, engines) => {
1451
+ const create = Effect4.sync(sceneGraph(registry, behaviours, engines));
1452
+ return Effect4.acquireRelease(create, (graph) => Effect4.sync(graph.dispose));
1453
+ };
1454
+ var acquireRenderer = (factory) => {
1455
+ const create = Effect4.try({
1456
+ try: factory.create,
1457
+ catch: (cause) => new RendererUnavailable({ cause })
1458
+ });
1459
+ return Effect4.acquireRelease(create, (renderer) => Effect4.sync(renderer.dispose));
1460
+ };
1461
+ var awaitReady = (renderer) => Option.match(Option.fromNullishOr(renderer.ready), {
1462
+ onNone: () => Effect4.void,
1463
+ onSome: (ready) => Effect4.tryPromise({ try: ready, catch: (cause) => new RendererUnavailable({ cause }) })
1464
+ });
1465
+ var invalidationListening = (graph, onInvalidated) => () => graph.onInvalidated(onInvalidated);
1466
+ var acquireInvalidation = (graph, onInvalidated) => {
1467
+ const listen = Effect4.sync(invalidationListening(graph, onInvalidated));
1468
+ return Effect4.acquireRelease(listen, Effect4.sync);
1469
+ };
1470
+ var acquireEvents = (capacity) => {
1471
+ const create = Queue.sliding(capacity);
1472
+ return Effect4.acquireRelease(create, Queue.shutdown);
1473
+ };
1474
+ function* startScene(options) {
1475
+ const registry = yield* ResourceRegistry;
1476
+ const frames = yield* FrameSource;
1477
+ const clock = yield* Clock.Clock;
1478
+ const graph = yield* acquireGraph(registry, options.behaviours ?? noBehaviours, options);
1479
+ const startupOps = yield* Effect4.fromResult(toResult(graph.reconcile(options.scene)));
1480
+ const renderer = yield* acquireRenderer(options.renderer);
1481
+ yield* awaitReady(renderer);
1482
+ applyViewport(graph, renderer, options.viewport);
1483
+ const events = yield* acquireEvents(options.eventCapacity ?? defaultEventCapacity);
1484
+ const sceneClock = createSceneClock2(() => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerSecond);
1485
+ const loop = createSceneLoop2({
1486
+ graph,
1487
+ renderer,
1488
+ elapsedSeconds: sceneClock.elapsedSeconds,
1489
+ emit: (event) => {
1490
+ Queue.offerUnsafe(events, event);
1491
+ },
1492
+ now: () => Number(clock.monotonicTimeNanosUnsafe()) / nanosPerMillisecond,
1493
+ placeOverlays: options.placeOverlays ?? ignorePlacements
1494
+ });
1495
+ yield* Effect4.addFinalizer(() => Effect4.sync(loop.dispose));
1496
+ const pacer = createFramePacer2(loop);
1497
+ pacer.attach(yield* frames.subscribe(pacer.frame));
1498
+ yield* acquireInvalidation(graph, pacer.wake);
1499
+ return {
1500
+ graph,
1501
+ startupOps,
1502
+ update: (scene) => Effect4.suspend(() => Effect4.fromResult(toResult(reconcileNow(graph, sceneClock, scene)))),
1503
+ resize: (viewport) => Effect4.sync(viewportChange(graph, renderer, viewport)),
1504
+ setAnimating: (animating) => Effect4.sync(animationChange(sceneClock, graph, animating)),
1505
+ advance: Effect4.sync(pacer.advance),
1506
+ drawNow: pacer.advance,
1507
+ pointer: loop.pointer,
1508
+ xrInput: loop.xrInput,
1509
+ events: Stream.fromQueue(events),
1510
+ drainEvents: Queue.clear(events)
1511
+ };
1512
+ }
1513
+ function* startAtomically(options) {
1514
+ const parent = yield* Effect4.scope;
1515
+ const child = yield* Scope.fork(parent);
1516
+ return yield* Effect4.gen(() => startScene(options)).pipe(Scope.provide(child), Effect4.onError((cause) => Scope.close(child, Exit.failCause(cause))));
1517
+ }
1518
+ var make = (options) => {
1519
+ const program = Effect4.gen(() => startAtomically(options));
1520
+ return program.pipe(Effect4.withSpan("effect-three/SceneRuntime.make"));
1521
+ };
1187
1522
  export {
1188
1523
  exports_FrameSource as FrameSource,
1524
+ exports_history as History,
1525
+ exports_Inspector as Inspector,
1189
1526
  InvalidScene,
1527
+ exports_lockstep as Lockstep,
1190
1528
  RendererUnavailable,
1191
1529
  exports_ResourceRegistry as ResourceRegistry,
1530
+ exports_SceneFile as SceneFile,
1192
1531
  exports_SceneRuntime as SceneRuntime,
1193
1532
  exports_SceneSchema as SceneSchema,
1533
+ UnreadableScene,
1194
1534
  ambientLight2 as ambientLight,
1195
1535
  anchorSpace2 as anchorSpace,
1196
1536
  animationEquals2 as animationEquals,
1197
1537
  applyTween2 as applyTween,
1198
1538
  autoRotated2 as autoRotated,
1539
+ backdrop2 as backdrop,
1199
1540
  ballCollider2 as ballCollider,
1200
1541
  basic2 as basic,
1201
1542
  behave2 as behave,
1202
1543
  behaviourEquals2 as behaviourEquals,
1544
+ billboard2 as billboard,
1203
1545
  bloom2 as bloom,
1204
1546
  body2 as body,
1205
1547
  bodyEquals2 as bodyEquals,
1206
1548
  bodyRef2 as bodyRef,
1207
1549
  borrowed2 as borrowed,
1208
1550
  box2 as box,
1551
+ boxSelect2 as boxSelect,
1209
1552
  buildMaterial2 as buildMaterial,
1210
1553
  builtinBehaviours2 as builtinBehaviours,
1554
+ cameraAlong2 as cameraAlong,
1211
1555
  cameraEquals2 as cameraEquals,
1556
+ cameraShake2 as cameraShake,
1212
1557
  capacityFor2 as capacityFor,
1213
1558
  capsule2 as capsule,
1214
1559
  capsuleCollider2 as capsuleCollider,
1560
+ catmullRomColors2 as catmullRomColors,
1561
+ catmullRomPointAt2 as catmullRomPointAt,
1562
+ catmullRomPoints2 as catmullRomPoints,
1215
1563
  centerOffset2 as centerOffset,
1216
1564
  changedFields2 as changedFields,
1217
1565
  circle2 as circle,
1566
+ clearTape2 as clearTape,
1218
1567
  clipCamera2 as clipCamera,
1219
1568
  clipRunning2 as clipRunning,
1220
1569
  clipTime2 as clipTime,
@@ -1239,17 +1588,23 @@ export {
1239
1588
  createSceneGraph2 as createSceneGraph,
1240
1589
  createSceneLoop2 as createSceneLoop,
1241
1590
  createXrTracker2 as createXrTracker,
1591
+ cubicBezierPoints2 as cubicBezierPoints,
1242
1592
  cuboidCollider2 as cuboidCollider,
1243
1593
  cylinder2 as cylinder,
1244
1594
  cylinderCollider2 as cylinderCollider,
1245
1595
  defaultOrbit2 as defaultOrbit,
1596
+ describeScene2 as describeScene,
1246
1597
  describedColliders2 as describedColliders,
1598
+ detailed2 as detailed,
1247
1599
  diff2 as diff,
1248
1600
  directionalLight2 as directionalLight,
1249
1601
  dollyCamera2 as dollyCamera,
1250
1602
  dollyCameraToward2 as dollyCameraToward,
1603
+ dragGizmo2 as dragGizmo,
1604
+ dragPivot2 as dragPivot,
1251
1605
  ease2 as ease,
1252
1606
  easeProgress2 as easeProgress,
1607
+ edges2 as edges,
1253
1608
  effectsEqual2 as effectsEqual,
1254
1609
  emptyIndex2 as emptyIndex,
1255
1610
  environment2 as environment,
@@ -1261,7 +1616,12 @@ export {
1261
1616
  fixed2 as fixed,
1262
1617
  fixedJoint2 as fixedJoint,
1263
1618
  float2 as float,
1619
+ formatChanges2 as formatChanges,
1620
+ formatSummary2 as formatSummary,
1264
1621
  geometryRefEquals2 as geometryRefEquals,
1622
+ gizmo2 as gizmo,
1623
+ gizmoHandleOf2 as gizmoHandleOf,
1624
+ gizmoNodes2 as gizmoNodes,
1265
1625
  glide2 as glide,
1266
1626
  glided2 as glided,
1267
1627
  grid2 as grid,
@@ -1269,7 +1629,11 @@ export {
1269
1629
  handJoints2 as handJoints,
1270
1630
  headSpace2 as headSpace,
1271
1631
  hemisphereLight2 as hemisphereLight,
1632
+ hoverGizmo2 as hoverGizmo,
1633
+ hoverPivot2 as hoverPivot,
1634
+ hud2 as hud,
1272
1635
  indexScene2 as indexScene,
1636
+ inspectFields2 as inspectFields,
1273
1637
  instance2 as instance,
1274
1638
  instanceEquals2 as instanceEquals,
1275
1639
  instances2 as instances,
@@ -1282,10 +1646,14 @@ export {
1282
1646
  label2 as label,
1283
1647
  lambert2 as lambert,
1284
1648
  lentGeometry2 as lentGeometry,
1649
+ line2 as line,
1285
1650
  locomote2 as locomote,
1286
1651
  materialRefEquals2 as materialRefEquals,
1287
1652
  mesh2 as mesh,
1288
1653
  meshSpace2 as meshSpace,
1654
+ moodStaging2 as moodStaging,
1655
+ moods2 as moods,
1656
+ movedAlike2 as movedAlike,
1289
1657
  noModifiers2 as noModifiers,
1290
1658
  normalMaterial2 as normalMaterial,
1291
1659
  orbit2 as orbit,
@@ -1300,15 +1668,26 @@ export {
1300
1668
  physical2 as physical,
1301
1669
  physics2 as physics,
1302
1670
  physicsEquals2 as physicsEquals,
1671
+ pivot2 as pivot,
1672
+ pivotHandleOf2 as pivotHandleOf,
1673
+ pivotNodes2 as pivotNodes,
1303
1674
  placeOverlays2 as placeOverlays,
1675
+ placeTapeEnd2 as placeTapeEnd,
1304
1676
  plane2 as plane,
1305
1677
  planeSpace2 as planeSpace,
1306
1678
  play2 as play,
1307
1679
  pointLight2 as pointLight,
1308
1680
  pointOnPlane2 as pointOnPlane,
1681
+ pointTape2 as pointTape,
1682
+ points2 as points,
1309
1683
  positionMotor2 as positionMotor,
1684
+ pressGizmo2 as pressGizmo,
1685
+ pressPivot2 as pressPivot,
1310
1686
  prismaticJoint2 as prismaticJoint,
1687
+ quadraticBezierPoints2 as quadraticBezierPoints,
1311
1688
  recordingRendererFactory2 as recordingRendererFactory,
1689
+ releaseGizmo2 as releaseGizmo,
1690
+ releasePivot2 as releasePivot,
1312
1691
  renderSettings2 as renderSettings,
1313
1692
  renderSettingsEquals2 as renderSettingsEquals,
1314
1693
  renderTexture2 as renderTexture,
@@ -1319,14 +1698,20 @@ export {
1319
1698
  ropeJoint2 as ropeJoint,
1320
1699
  rotateCamera2 as rotateCamera,
1321
1700
  rotationEquals2 as rotationEquals,
1701
+ roundedBox2 as roundedBox,
1322
1702
  scene2 as scene,
1703
+ sceneChanges2 as sceneChanges,
1704
+ setAt2 as setAt,
1323
1705
  shaderGrid2 as shaderGrid,
1324
1706
  shadowMaterial2 as shadowMaterial,
1325
1707
  shapeEquals2 as shapeEquals,
1326
1708
  sharedGeometry2 as sharedGeometry,
1327
1709
  sharedMaterial2 as sharedMaterial,
1710
+ shotAngles2 as shotAngles,
1711
+ shotCamera2 as shotCamera,
1328
1712
  sky2 as sky,
1329
1713
  skyEquals2 as skyEquals,
1714
+ sparkles2 as sparkles,
1330
1715
  sphere2 as sphere,
1331
1716
  sphericalJoint2 as sphericalJoint,
1332
1717
  spin2 as spin,
@@ -1337,16 +1722,25 @@ export {
1337
1722
  stageBounds2 as stageBounds,
1338
1723
  stagePresets2 as stagePresets,
1339
1724
  standard2 as standard,
1725
+ stars2 as stars,
1340
1726
  startTween2 as startTween,
1341
1727
  sunPositionFromAngles2 as sunPositionFromAngles,
1728
+ tape2 as tape,
1729
+ tapeLength2 as tapeLength,
1730
+ tapeMiddle2 as tapeMiddle,
1731
+ tapeNodes2 as tapeNodes,
1342
1732
  teleport2 as teleport,
1343
1733
  text2 as text,
1734
+ thingsBounds2 as thingsBounds,
1344
1735
  torus2 as torus,
1736
+ trail2 as trail,
1345
1737
  transitionEquals2 as transitionEquals,
1346
1738
  updateMaterial2 as updateMaterial,
1347
1739
  vec3Equals2 as vec3Equals,
1348
1740
  velocityMotor2 as velocityMotor,
1349
1741
  view2 as view,
1742
+ viewportAxisOf2 as viewportAxisOf,
1743
+ viewportGizmoNodes2 as viewportGizmoNodes,
1350
1744
  viewsEqual2 as viewsEqual,
1351
1745
  vignette2 as vignette,
1352
1746
  writeRotation2 as writeRotation,
@@ -1357,5 +1751,5 @@ export {
1357
1751
  xrMeshGeometryId2 as xrMeshGeometryId
1358
1752
  };
1359
1753
 
1360
- //# debugId=4A51874F0CADE91E64756E2164756E21
1754
+ //# debugId=B502AD310FB99B5964756E2164756E21
1361
1755
  //# sourceMappingURL=index.js.map