effect-motion 0.4.0 → 0.5.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 (91) hide show
  1. package/README.md +2 -2
  2. package/dist/Camera.d.ts +186 -49
  3. package/dist/Camera.js +343 -76
  4. package/dist/Color.d.ts +101 -1
  5. package/dist/Color.js +101 -1
  6. package/dist/EffectMotionError.d.ts +17 -0
  7. package/dist/EffectMotionError.js +17 -0
  8. package/dist/Entity.d.ts +682 -38
  9. package/dist/Entity.js +271 -27
  10. package/dist/Font.d.ts +108 -0
  11. package/dist/Font.js +95 -0
  12. package/dist/Image.d.ts +71 -0
  13. package/dist/Image.js +50 -0
  14. package/dist/Instance.d.ts +73 -11
  15. package/dist/Instance.js +44 -11
  16. package/dist/Motion.d.ts +328 -53
  17. package/dist/Motion.js +278 -46
  18. package/dist/Physics.d.ts +154 -20
  19. package/dist/Physics.js +92 -11
  20. package/dist/Projection.d.ts +37 -132
  21. package/dist/Projection.js +33 -292
  22. package/dist/Resource.d.ts +26 -0
  23. package/dist/Resource.js +41 -0
  24. package/dist/Runner.d.ts +639 -350
  25. package/dist/Runner.js +197 -150
  26. package/dist/Scene.d.ts +603 -175
  27. package/dist/Scene.js +596 -112
  28. package/dist/Timing.d.ts +170 -13
  29. package/dist/Timing.js +124 -6
  30. package/dist/Tree.d.ts +39 -0
  31. package/dist/Tree.js +127 -0
  32. package/dist/index.d.ts +54 -5
  33. package/dist/index.js +56 -5
  34. package/dist/particles/Particle.d.ts +2 -2
  35. package/dist/particles/ParticleField.d.ts +8 -6
  36. package/dist/particles/ParticleField.js +8 -9
  37. package/dist/particles/constructors.d.ts +5 -6
  38. package/dist/particles/constructors.js +8 -3
  39. package/dist/particles/legacy.d.ts +58 -0
  40. package/dist/particles/legacy.js +46 -0
  41. package/dist/particles/simulate.js +11 -3
  42. package/dist/particles/step.js +14 -10
  43. package/dist/types.d.ts +5 -0
  44. package/dist/types.js +1 -0
  45. package/package.json +2 -4
  46. package/dist/CameraHelpers.d.ts +0 -70
  47. package/dist/CameraHelpers.js +0 -239
  48. package/dist/CanvasExporter.d.ts +0 -12
  49. package/dist/CanvasExporter.js +0 -40
  50. package/dist/Fonts.d.ts +0 -41
  51. package/dist/Fonts.js +0 -27
  52. package/dist/Images.d.ts +0 -33
  53. package/dist/Images.js +0 -24
  54. package/dist/PngExporter.d.ts +0 -6
  55. package/dist/PngExporter.js +0 -85
  56. package/dist/Renderer.d.ts +0 -118
  57. package/dist/Renderer.js +0 -508
  58. package/dist/Shapes.d.ts +0 -11
  59. package/dist/Shapes.js +0 -11
  60. package/dist/demo.d.ts +0 -3
  61. package/dist/demo.js +0 -71
  62. package/dist/render/dof.d.ts +0 -27
  63. package/dist/render/dof.js +0 -37
  64. package/dist/render/paint.d.ts +0 -30
  65. package/dist/render/paint.js +0 -36
  66. package/dist/render/shapes.d.ts +0 -42
  67. package/dist/render/shapes.js +0 -310
  68. package/dist/shapes/Circle.d.ts +0 -32
  69. package/dist/shapes/Circle.js +0 -9
  70. package/dist/shapes/Ellipse.d.ts +0 -35
  71. package/dist/shapes/Ellipse.js +0 -10
  72. package/dist/shapes/Group.d.ts +0 -126
  73. package/dist/shapes/Group.js +0 -89
  74. package/dist/shapes/Hud.d.ts +0 -38
  75. package/dist/shapes/Hud.js +0 -35
  76. package/dist/shapes/Image.d.ts +0 -45
  77. package/dist/shapes/Image.js +0 -28
  78. package/dist/shapes/Line.d.ts +0 -47
  79. package/dist/shapes/Line.js +0 -35
  80. package/dist/shapes/Path.d.ts +0 -107
  81. package/dist/shapes/Path.js +0 -32
  82. package/dist/shapes/Rect.d.ts +0 -51
  83. package/dist/shapes/Rect.js +0 -22
  84. package/dist/shapes/Shape2D.d.ts +0 -49
  85. package/dist/shapes/Shape2D.js +0 -52
  86. package/dist/shapes/Shapes.d.ts +0 -11
  87. package/dist/shapes/Shapes.js +0 -11
  88. package/dist/shapes/Square.d.ts +0 -32
  89. package/dist/shapes/Square.js +0 -11
  90. package/dist/shapes/Text.d.ts +0 -51
  91. package/dist/shapes/Text.js +0 -24
package/dist/Runner.d.ts CHANGED
@@ -3,43 +3,81 @@ import type * as Cause from "effect/Cause";
3
3
  import * as Context from "effect/Context";
4
4
  import * as Effect from "effect/Effect";
5
5
  import type * as Fiber from "effect/Fiber";
6
- import type * as Schema from "effect/Schema";
7
- import { type CameraState } from "./Camera.js";
8
6
  import * as Color from "./Color.js";
9
- import type * as Entity from "./Entity.js";
7
+ import * as Entity from "./Entity.js";
10
8
  import * as Instance from "./Instance.js";
11
- import { Group } from "./shapes/Group.js";
9
+ import * as Projection from "./Projection.js";
10
+ import { ROOT_ID } from "./Tree.js";
12
11
  export declare const TypeId: "~motion/SceneRunner";
13
- /** conventional id of the implicit root group every instance attaches to */
14
- export declare const ROOT_ID = "root";
12
+ export { ROOT_ID };
15
13
  export type Seed = number | string;
16
- /** the fixed default: scenes are deterministic even with no seed set */
14
+ /**
15
+ * The seed used when none is given.
16
+ *
17
+ * @remarks
18
+ * Fixed rather than random on purpose: a scene using randomness still
19
+ * produces identical frames on every run unless you deliberately vary the
20
+ * seed.
21
+ */
17
22
  export declare const defaultSeed: Seed;
18
23
  /**
19
- * Playback settings — how the movie RUNS. What the movie IS (resolution,
20
- * background) lives on the root scene as its composition config.
24
+ * Playback settings — how a scene RUNS, as opposed to what it IS.
25
+ *
26
+ * @remarks
27
+ * Passed to `Scene.run` / `Scene.stream`, so the same scene can be played
28
+ * back at different rates or seeds without being rewritten. Resolution and
29
+ * background are NOT here: those are the composition's own identity, fixed
30
+ * at `Scene.make`.
21
31
  */
22
32
  export type Settings = {
33
+ /**
34
+ * Frames produced per second of scene time.
35
+ *
36
+ * @remarks
37
+ * Determines how many frames a given duration becomes: a one-second
38
+ * animation is 30 frames at 30fps and 60 at 60fps. It changes the
39
+ * sampling, never the motion — the same scene looks the same, just
40
+ * smoother.
41
+ *
42
+ * @defaultValue `60`
43
+ */
23
44
  frameRate: number;
24
45
  /**
25
- * seeds the scene's pseudo-random service (effect's Random via
26
- * withSeed); the fixed default keeps default-constructed scenes
27
- * byte-identical across runs. Note: the generator algorithm belongs
28
- * to effect, so upgrading effect may change seeded sequences.
46
+ * Seeds the scene's random number generator.
47
+ *
48
+ * @remarks
49
+ * Randomness in a scene comes from this seed rather than
50
+ * `Math.random()`, so the "random" scatter of a particle field is
51
+ * identical on every run. Change the seed to get a different arrangement
52
+ * that is itself reproducible.
53
+ *
54
+ * Note the generator belongs to `effect`, so upgrading it can change the
55
+ * sequence a given seed produces.
56
+ *
57
+ * @defaultValue `"effect-motion"`
29
58
  */
30
59
  seed: Seed;
31
60
  /**
32
- * hard cap on frames a scene may produce (default 36_000 — 10 minutes
33
- * at 60fps): a scene that exceeds it dies instead of hanging the
34
- * consumer. Set to `Infinity` to declare an intentionally infinite
35
- * scene.
61
+ * Hard cap on how many frames a scene may produce.
62
+ *
63
+ * @remarks
64
+ * A safety net: a scene that exceeds it fails with a message naming the
65
+ * limit instead of hanging whatever is consuming it. The usual cause is
66
+ * an unbounded loop with nothing to end it.
67
+ *
68
+ * Set it to `Infinity` to declare a deliberately endless scene.
69
+ *
70
+ * @defaultValue `36_000` — ten minutes at 60fps
36
71
  */
37
72
  maxFrames: number;
38
73
  };
39
74
  /**
40
- * A scene's composition config, After Effects–style: what the comp IS.
41
- * The runner inherits the ROOT scene's config; a nested scene keeps its
42
- * own as its bounds (see Scene.play).
75
+ * What a composition IS: its pixel dimensions and background.
76
+ *
77
+ * @remarks
78
+ * Set at `Scene.make` and carried on every frame, so a frame is
79
+ * self-describing. A nested scene keeps its own config as its bounds — that
80
+ * is what a played scene clips and paints within.
43
81
  */
44
82
  export type CompConfig = {
45
83
  width: number;
@@ -48,7 +86,8 @@ export type CompConfig = {
48
86
  backgroundColor: Color.Color;
49
87
  };
50
88
  export declare const defaultComp: CompConfig;
51
- export type GroupInstance = Instance.Of<typeof Group>;
89
+ /** A handle to a container (`Group` or `Hud`) — the only mountable parents. */
90
+ export type GroupInstance = Instance.Instance<Entity.ContainerTag>;
52
91
  /**
53
92
  * A child in a polymorphic `children` list: a plain string (→ a `Text`),
54
93
  * an already-created `Instance`, or an `Effect` that resolves to one (a
@@ -57,81 +96,19 @@ export type GroupInstance = Instance.Of<typeof Group>;
57
96
  */
58
97
  export type Child = string | Instance.Instance | Effect.Effect<Instance.Instance, never, Runner>;
59
98
  /**
60
- * Builtin, engine-owned instance properties — namespaced with `$` and
61
- * held BESIDE entity data, never in the entity schema. Every entity gets
62
- * them uniformly. `$visible` defaults to `true`.
99
+ * The input `instantiate` accepts: the entity's own make-input, except that
100
+ * a `children` field (stored as `Array<string>` of ids) is authored as the
101
+ * polymorphic {@link Child} list — the runner normalizes it to ids in list
102
+ * order.
63
103
  */
64
- export interface BuiltinProps {
65
- readonly $visible?: boolean;
66
- }
67
- /**
68
- * The input accepted by `instantiate`: an entity's own make-input, plus
69
- * builtin props ($visible), plus — when the entity has a `children` field
70
- * — a polymorphic `children` list (strings/instances/effects) in place of
71
- * the stored `Array<string>` of ids.
72
- */
73
- export type InstantiateProps<MakeInput> = Omit<MakeInput, "children"> & BuiltinProps & ("children" extends keyof MakeInput ? {
104
+ export type InstantiateProps<Tag extends Entity.EntityTag> = Omit<Entity.MakeInput<Tag>, "children"> & (Tag extends Entity.ContainerTag ? {
74
105
  readonly children?: ReadonlyArray<Child>;
75
106
  } : Record<never, never>);
76
107
  /**
77
108
  * The ambient mount parent for `instantiate` — provided per scene
78
109
  * evaluation (`Scene.play({ parent })`); `null` means the runner root.
79
110
  */
80
- export declare const CurrentParent: Context.Reference<Instance.Instance<"shapes/Group", Schema.Struct<{
81
- x: Schema.withConstructorDefault<Schema.Number>;
82
- y: Schema.withConstructorDefault<Schema.Number>;
83
- z: Schema.withConstructorDefault<Schema.Number>;
84
- opacity: Schema.withConstructorDefault<Schema.Number>;
85
- transform: Schema.withConstructorDefault<Schema.Struct<{
86
- readonly a: Schema.Number;
87
- readonly b: Schema.Number;
88
- readonly c: Schema.Number;
89
- readonly d: Schema.Number;
90
- readonly e: Schema.Number;
91
- readonly f: Schema.Number;
92
- }>>;
93
- width: Schema.optionalKey<Schema.Number>;
94
- height: Schema.optionalKey<Schema.Number>;
95
- backgroundColor: Schema.optionalKey<typeof Color.Color>;
96
- children: Schema.withConstructorDefault<Schema.$Array<Schema.String>>;
97
- }>, {
98
- "~position": Entity.TraitLens<{
99
- readonly x: number;
100
- readonly y: number;
101
- readonly z: number;
102
- readonly opacity: number;
103
- readonly transform: Schema.Struct.ReadonlySide<{
104
- readonly a: Schema.Number;
105
- readonly b: Schema.Number;
106
- readonly c: Schema.Number;
107
- readonly d: Schema.Number;
108
- readonly e: Schema.Number;
109
- readonly f: Schema.Number;
110
- }, "Type">;
111
- readonly width?: number;
112
- readonly height?: number;
113
- readonly backgroundColor?: Color.Color;
114
- readonly children: readonly string[];
115
- }, Entity.Position>;
116
- "~opacity": Entity.TraitLens<{
117
- readonly x: number;
118
- readonly y: number;
119
- readonly z: number;
120
- readonly opacity: number;
121
- readonly transform: Schema.Struct.ReadonlySide<{
122
- readonly a: Schema.Number;
123
- readonly b: Schema.Number;
124
- readonly c: Schema.Number;
125
- readonly d: Schema.Number;
126
- readonly e: Schema.Number;
127
- readonly f: Schema.Number;
128
- }, "Type">;
129
- readonly width?: number;
130
- readonly height?: number;
131
- readonly backgroundColor?: Color.Color;
132
- readonly children: readonly string[];
133
- }, number>;
134
- }> | null>;
111
+ export declare const CurrentParent: Context.Reference<GroupInstance | null>;
135
112
  /**
136
113
  * A branch of animation as the runner tracks it: its fiber and its
137
114
  * SEMANTIC end (`finished` resolves at `Scene.finish` or completion,
@@ -141,63 +118,16 @@ export interface BranchEntry {
141
118
  readonly fiber: Fiber.Fiber<unknown, unknown>;
142
119
  readonly finished: Effect.Effect<void>;
143
120
  }
121
+ /**
122
+ * The resting camera for a comp of the given width: width-relative focal
123
+ * length (AE's 50mm equivalent), positioned so the z=0 plane projects at
124
+ * scale 1 and is in focus.
125
+ */
126
+ export declare const identityCameraView: (width: number) => Projection.CameraView & Projection.PointOfInterest;
127
+ export declare const identityCamera: (width: number) => Entity.EntityByTag<"Camera">;
144
128
  declare const Runner_base: Context.ServiceClass<Runner, "Runner", {
145
- root: Instance.Instance<"shapes/Group", Schema.Struct<{
146
- x: Schema.withConstructorDefault<Schema.Number>;
147
- y: Schema.withConstructorDefault<Schema.Number>;
148
- z: Schema.withConstructorDefault<Schema.Number>;
149
- opacity: Schema.withConstructorDefault<Schema.Number>;
150
- transform: Schema.withConstructorDefault<Schema.Struct<{
151
- readonly a: Schema.Number;
152
- readonly b: Schema.Number;
153
- readonly c: Schema.Number;
154
- readonly d: Schema.Number;
155
- readonly e: Schema.Number;
156
- readonly f: Schema.Number;
157
- }>>;
158
- width: Schema.optionalKey<Schema.Number>;
159
- height: Schema.optionalKey<Schema.Number>;
160
- backgroundColor: Schema.optionalKey<typeof Color.Color>;
161
- children: Schema.withConstructorDefault<Schema.$Array<Schema.String>>;
162
- }>, {
163
- "~position": Entity.TraitLens<{
164
- readonly x: number;
165
- readonly y: number;
166
- readonly z: number;
167
- readonly opacity: number;
168
- readonly transform: Schema.Struct.ReadonlySide<{
169
- readonly a: Schema.Number;
170
- readonly b: Schema.Number;
171
- readonly c: Schema.Number;
172
- readonly d: Schema.Number;
173
- readonly e: Schema.Number;
174
- readonly f: Schema.Number;
175
- }, "Type">;
176
- readonly width?: number;
177
- readonly height?: number;
178
- readonly backgroundColor?: Color.Color;
179
- readonly children: readonly string[];
180
- }, Entity.Position>;
181
- "~opacity": Entity.TraitLens<{
182
- readonly x: number;
183
- readonly y: number;
184
- readonly z: number;
185
- readonly opacity: number;
186
- readonly transform: Schema.Struct.ReadonlySide<{
187
- readonly a: Schema.Number;
188
- readonly b: Schema.Number;
189
- readonly c: Schema.Number;
190
- readonly d: Schema.Number;
191
- readonly e: Schema.Number;
192
- readonly f: Schema.Number;
193
- }, "Type">;
194
- readonly width?: number;
195
- readonly height?: number;
196
- readonly backgroundColor?: Color.Color;
197
- readonly children: readonly string[];
198
- }, number>;
199
- }>;
200
- instantiate: <Name extends string, Data extends Schema.Top, Traits extends Partial<Entity.EntityTraits<Data["Type"]>>>(entity: Entity.Entity<Name, Data, Traits>, props: InstantiateProps<Data["~type.make.in"]>) => Effect.Effect<Instance.Instance<Name, Data, Traits>, never, Runner>;
129
+ root: GroupInstance;
130
+ instantiate: <Tag extends Entity.EntityTag>(kind: Tag, props: InstantiateProps<Tag>) => Effect.Effect<Instance.Instance<Tag>, never, Runner>;
201
131
  appendChild: (parent: GroupInstance, child: Instance.Instance) => void;
202
132
  removeChild: (parent: GroupInstance, child: Instance.Instance) => void;
203
133
  settings: {
@@ -206,87 +136,289 @@ declare const Runner_base: Context.ServiceClass<Runner, "Runner", {
206
136
  maxFrames: number;
207
137
  };
208
138
  comp: CompConfig;
209
- getDataUnsafe: <Name extends string, Data extends Schema.Top>(instance: Instance.Instance<Name, Data>) => Data["Type"] | null;
210
- setDataUnsafe: <Name extends string, Data extends Schema.Top>(instance: Instance.Instance<Name, Data>, data: unknown) => void;
139
+ getDataUnsafe: <Tag extends Entity.EntityTag>(instance: Instance.Instance<Tag>) => Entity.EntityByTag<Tag> | null;
140
+ setDataUnsafe: <Tag extends Entity.EntityTag>(instance: Instance.Instance<Tag>, state: Entity.EntityByTag<Tag>) => void;
211
141
  state: Effect.Effect<{
212
- instances: {
213
- [x: string]: {
214
- data: unknown;
215
- entity: Entity.AnyEntity;
216
- $visible: boolean;
217
- };
218
- };
142
+ instances: Record<string, {
143
+ data: Entity.Entity;
144
+ }>;
219
145
  root: string;
220
146
  frameRate: number;
221
147
  width: number;
222
148
  height: number;
223
149
  backgroundColor: Color.Color;
224
- camera: CameraState;
225
- }, never, never>;
226
- camera: Instance.Instance<"Camera", Schema.Struct<{
227
- x: Schema.withConstructorDefault<Schema.Number>;
228
- y: Schema.withConstructorDefault<Schema.Number>;
229
- z: Schema.withConstructorDefault<Schema.Number>;
230
- rotX: Schema.withConstructorDefault<Schema.Number>;
231
- rotY: Schema.withConstructorDefault<Schema.Number>;
232
- rotZ: Schema.withConstructorDefault<Schema.Number>;
233
- focalLength: Schema.withConstructorDefault<Schema.Number>;
234
- focusDistance: Schema.withConstructorDefault<Schema.Number>;
235
- aperture: Schema.withConstructorDefault<Schema.Number>;
236
- poiX: Schema.optionalKey<Schema.Number>;
237
- poiY: Schema.optionalKey<Schema.Number>;
238
- poiZ: Schema.optionalKey<Schema.Number>;
239
- }>, {
240
- readonly "~position": {
241
- get: (data: {
242
- readonly x: number;
243
- readonly y: number;
244
- readonly z: number;
245
- readonly rotX: number;
246
- readonly rotY: number;
247
- readonly rotZ: number;
248
- readonly focalLength: number;
249
- readonly focusDistance: number;
250
- readonly aperture: number;
251
- readonly poiX?: number;
252
- readonly poiY?: number;
253
- readonly poiZ?: number;
254
- }) => {
255
- x: number;
256
- y: number;
257
- z: number;
258
- };
259
- set: (data: {
260
- readonly x: number;
261
- readonly y: number;
262
- readonly z: number;
263
- readonly rotX: number;
264
- readonly rotY: number;
265
- readonly rotZ: number;
266
- readonly focalLength: number;
267
- readonly focusDistance: number;
268
- readonly aperture: number;
269
- readonly poiX?: number;
270
- readonly poiY?: number;
271
- readonly poiZ?: number;
272
- }, value: Entity.Position) => {
273
- readonly x: number;
274
- readonly y: number;
275
- readonly z: number;
276
- readonly rotX: number;
277
- readonly rotY: number;
278
- readonly rotZ: number;
279
- readonly focalLength: number;
280
- readonly focusDistance: number;
281
- readonly aperture: number;
282
- readonly poiX?: number;
283
- readonly poiY?: number;
284
- readonly poiZ?: number;
285
- };
150
+ camera: Projection.CameraView & Projection.PointOfInterest;
151
+ comps: {
152
+ [k: string]: CompConfig;
286
153
  };
287
- }>;
288
- setCamera: (instance: Instance.Instance) => void;
289
- destroy: <Name extends string, Data extends Schema.Top>(instance: Instance.Instance<Name, Data>) => void;
154
+ }, never, never>;
155
+ /**
156
+ * ponytail: create a tree node for an entity that is NOT in the
157
+ * union — the particle system only (design D10). Mounts under the
158
+ * ambient parent like any instance. Delete with the particles
159
+ * rewrite; see `particlesEscapeInstantiate`.
160
+ */
161
+ instantiateEscape: (state: import("effect/Schema").Struct.ReadonlySide<{
162
+ readonly _tag: import("effect/Schema").tag<"Camera">;
163
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
164
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
165
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
166
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
167
+ }>>;
168
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
169
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
170
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
171
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
172
+ }>>;
173
+ readonly focalLength: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
174
+ readonly focusDistance: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
175
+ readonly aperture: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
176
+ readonly poi: import("effect/Schema").withConstructorDefault<import("effect/Schema").NullOr<import("effect/Schema").TaggedStruct<"Vec3", {
177
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
178
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
179
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
180
+ }>>>;
181
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
182
+ readonly _tag: import("effect/Schema").tag<"Circle">;
183
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
184
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
185
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
186
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
187
+ }>>;
188
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
189
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
190
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
191
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
192
+ }>>;
193
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
194
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
195
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
196
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
197
+ }>>;
198
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
199
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
200
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
201
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
202
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
203
+ readonly radius: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
204
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
205
+ readonly _tag: import("effect/Schema").tag<"Ellipse">;
206
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
207
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
208
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
209
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
210
+ }>>;
211
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
212
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
213
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
214
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
215
+ }>>;
216
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
217
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
218
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
219
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
220
+ }>>;
221
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
222
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
223
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
224
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
225
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
226
+ readonly radiusX: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
227
+ readonly radiusY: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
228
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
229
+ readonly _tag: import("effect/Schema").tag<"Group">;
230
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
231
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
232
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
233
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
234
+ }>>;
235
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
236
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
237
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
238
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
239
+ }>>;
240
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
241
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
242
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
243
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
244
+ }>>;
245
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
246
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
247
+ readonly children: import("effect/Schema").withConstructorDefault<import("effect/Schema").$Array<import("effect/Schema").String>>;
248
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
249
+ readonly _tag: import("effect/Schema").tag<"Hud">;
250
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
251
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
252
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
253
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
254
+ }>>;
255
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
256
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
257
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
258
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
259
+ }>>;
260
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
261
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
262
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
263
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
264
+ }>>;
265
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
266
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
267
+ readonly children: import("effect/Schema").withConstructorDefault<import("effect/Schema").$Array<import("effect/Schema").String>>;
268
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
269
+ readonly _tag: import("effect/Schema").tag<"Line">;
270
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
271
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
272
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
273
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
274
+ }>>;
275
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
276
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
277
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
278
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
279
+ }>>;
280
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
281
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
282
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
283
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
284
+ }>>;
285
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
286
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
287
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
288
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
289
+ readonly start: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
290
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
291
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
292
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
293
+ }>>;
294
+ readonly end: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
295
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
296
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
297
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
298
+ }>>;
299
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
300
+ readonly _tag: import("effect/Schema").tag<"Path">;
301
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
302
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
303
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
304
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
305
+ }>>;
306
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
307
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
308
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
309
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
310
+ }>>;
311
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
312
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
313
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
314
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
315
+ }>>;
316
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
317
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
318
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
319
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
320
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
321
+ readonly commands: import("effect/Schema").NonEmptyArray<import("effect/Schema").TaggedUnion<{
322
+ readonly L: import("effect/Schema").TaggedStruct<"L", {
323
+ x: import("effect/Schema").Number;
324
+ y: import("effect/Schema").Number;
325
+ z: import("effect/Schema").optionalKey<import("effect/Schema").Number>;
326
+ }>;
327
+ readonly M: import("effect/Schema").TaggedStruct<"M", {
328
+ x: import("effect/Schema").Number;
329
+ y: import("effect/Schema").Number;
330
+ z: import("effect/Schema").optionalKey<import("effect/Schema").Number>;
331
+ }>;
332
+ readonly Z: import("effect/Schema").TaggedStruct<"Z", {}>;
333
+ }>>;
334
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
335
+ readonly _tag: import("effect/Schema").tag<"Rect">;
336
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
337
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
338
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
339
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
340
+ }>>;
341
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
342
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
343
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
344
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
345
+ }>>;
346
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
347
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
348
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
349
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
350
+ }>>;
351
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
352
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
353
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
354
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
355
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
356
+ readonly width: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
357
+ readonly height: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
358
+ }, "Type"> | {
359
+ readonly _tag: "Image";
360
+ readonly position: import("effect/Schema").Struct.ReadonlySide<{
361
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
362
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
363
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
364
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
365
+ }, "Type">;
366
+ readonly rotation: import("effect/Schema").Struct.ReadonlySide<{
367
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
368
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
369
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
370
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
371
+ }, "Type">;
372
+ readonly scale: import("effect/Schema").Struct.ReadonlySide<{
373
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
374
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
375
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
376
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
377
+ }, "Type">;
378
+ readonly opacity: number;
379
+ readonly visible: boolean;
380
+ readonly image: import("effect/Schema").Struct.ReadonlySide<{
381
+ readonly _tag: import("effect/Schema").tag<"effect-motion/Resources/Image">;
382
+ readonly id: import("effect/Schema").String;
383
+ }, "Type">;
384
+ readonly width?: number;
385
+ readonly height?: number;
386
+ } | {
387
+ readonly _tag: "Text";
388
+ readonly position: import("effect/Schema").Struct.ReadonlySide<{
389
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
390
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
391
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
392
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
393
+ }, "Type">;
394
+ readonly rotation: import("effect/Schema").Struct.ReadonlySide<{
395
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
396
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
397
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
398
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
399
+ }, "Type">;
400
+ readonly scale: import("effect/Schema").Struct.ReadonlySide<{
401
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
402
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
403
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
404
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
405
+ }, "Type">;
406
+ readonly opacity: number;
407
+ readonly visible: boolean;
408
+ readonly fillColor: Color.Color;
409
+ readonly text: string;
410
+ readonly fontSize: number;
411
+ readonly fontFamily: import("effect/Schema").Struct.ReadonlySide<{
412
+ readonly _tag: import("effect/Schema").tag<"effect-motion/Resources/Font">;
413
+ readonly id: import("effect/Schema").String;
414
+ }, "Type">;
415
+ readonly textAnchor?: "end" | "middle" | "start";
416
+ readonly baseline?: "auto" | "hanging" | "middle";
417
+ }) => Effect.Effect<Instance.Instance<"Camera" | "Circle" | "Ellipse" | "Group" | "Hud" | "Image" | "Line" | "Path" | "Rect" | "Text">, never, never>;
418
+ registerComp: (id: string, config: CompConfig) => void;
419
+ camera: Instance.Instance<"Camera">;
420
+ setCamera: (instance: Instance.Instance<"Camera">) => void;
421
+ destroy: (instance: Instance.Instance) => void;
290
422
  phaser: {
291
423
  register: (n: number) => void;
292
424
  deregister: (n: number) => void;
@@ -307,62 +439,8 @@ declare const Runner_base: Context.ServiceClass<Runner, "Runner", {
307
439
  failureCause: () => Cause.Cause<unknown> | undefined;
308
440
  }> & {
309
441
  readonly make: (settings?: Partial<Settings> | undefined, comp?: CompConfig | undefined) => Effect.Effect<{
310
- root: Instance.Instance<"shapes/Group", Schema.Struct<{
311
- x: Schema.withConstructorDefault<Schema.Number>;
312
- y: Schema.withConstructorDefault<Schema.Number>;
313
- z: Schema.withConstructorDefault<Schema.Number>;
314
- opacity: Schema.withConstructorDefault<Schema.Number>;
315
- transform: Schema.withConstructorDefault<Schema.Struct<{
316
- readonly a: Schema.Number;
317
- readonly b: Schema.Number;
318
- readonly c: Schema.Number;
319
- readonly d: Schema.Number;
320
- readonly e: Schema.Number;
321
- readonly f: Schema.Number;
322
- }>>;
323
- width: Schema.optionalKey<Schema.Number>;
324
- height: Schema.optionalKey<Schema.Number>;
325
- backgroundColor: Schema.optionalKey<typeof Color.Color>;
326
- children: Schema.withConstructorDefault<Schema.$Array<Schema.String>>;
327
- }>, {
328
- "~position": Entity.TraitLens<{
329
- readonly x: number;
330
- readonly y: number;
331
- readonly z: number;
332
- readonly opacity: number;
333
- readonly transform: Schema.Struct.ReadonlySide<{
334
- readonly a: Schema.Number;
335
- readonly b: Schema.Number;
336
- readonly c: Schema.Number;
337
- readonly d: Schema.Number;
338
- readonly e: Schema.Number;
339
- readonly f: Schema.Number;
340
- }, "Type">;
341
- readonly width?: number;
342
- readonly height?: number;
343
- readonly backgroundColor?: Color.Color;
344
- readonly children: readonly string[];
345
- }, Entity.Position>;
346
- "~opacity": Entity.TraitLens<{
347
- readonly x: number;
348
- readonly y: number;
349
- readonly z: number;
350
- readonly opacity: number;
351
- readonly transform: Schema.Struct.ReadonlySide<{
352
- readonly a: Schema.Number;
353
- readonly b: Schema.Number;
354
- readonly c: Schema.Number;
355
- readonly d: Schema.Number;
356
- readonly e: Schema.Number;
357
- readonly f: Schema.Number;
358
- }, "Type">;
359
- readonly width?: number;
360
- readonly height?: number;
361
- readonly backgroundColor?: Color.Color;
362
- readonly children: readonly string[];
363
- }, number>;
364
- }>;
365
- instantiate: <Name extends string, Data extends Schema.Top, Traits extends Partial<Entity.EntityTraits<Data["Type"]>>>(entity: Entity.Entity<Name, Data, Traits>, props: InstantiateProps<Data["~type.make.in"]>) => Effect.Effect<Instance.Instance<Name, Data, Traits>, never, Runner>;
442
+ root: GroupInstance;
443
+ instantiate: <Tag extends Entity.EntityTag>(kind: Tag, props: InstantiateProps<Tag>) => Effect.Effect<Instance.Instance<Tag>, never, Runner>;
366
444
  appendChild: (parent: GroupInstance, child: Instance.Instance) => void;
367
445
  removeChild: (parent: GroupInstance, child: Instance.Instance) => void;
368
446
  settings: {
@@ -371,87 +449,289 @@ declare const Runner_base: Context.ServiceClass<Runner, "Runner", {
371
449
  maxFrames: number;
372
450
  };
373
451
  comp: CompConfig;
374
- getDataUnsafe: <Name extends string, Data extends Schema.Top>(instance: Instance.Instance<Name, Data>) => Data["Type"] | null;
375
- setDataUnsafe: <Name extends string, Data extends Schema.Top>(instance: Instance.Instance<Name, Data>, data: unknown) => void;
452
+ getDataUnsafe: <Tag extends Entity.EntityTag>(instance: Instance.Instance<Tag>) => Entity.EntityByTag<Tag> | null;
453
+ setDataUnsafe: <Tag extends Entity.EntityTag>(instance: Instance.Instance<Tag>, state: Entity.EntityByTag<Tag>) => void;
376
454
  state: Effect.Effect<{
377
- instances: {
378
- [x: string]: {
379
- data: unknown;
380
- entity: Entity.AnyEntity;
381
- $visible: boolean;
382
- };
383
- };
455
+ instances: Record<string, {
456
+ data: Entity.Entity;
457
+ }>;
384
458
  root: string;
385
459
  frameRate: number;
386
460
  width: number;
387
461
  height: number;
388
462
  backgroundColor: Color.Color;
389
- camera: CameraState;
390
- }, never, never>;
391
- camera: Instance.Instance<"Camera", Schema.Struct<{
392
- x: Schema.withConstructorDefault<Schema.Number>;
393
- y: Schema.withConstructorDefault<Schema.Number>;
394
- z: Schema.withConstructorDefault<Schema.Number>;
395
- rotX: Schema.withConstructorDefault<Schema.Number>;
396
- rotY: Schema.withConstructorDefault<Schema.Number>;
397
- rotZ: Schema.withConstructorDefault<Schema.Number>;
398
- focalLength: Schema.withConstructorDefault<Schema.Number>;
399
- focusDistance: Schema.withConstructorDefault<Schema.Number>;
400
- aperture: Schema.withConstructorDefault<Schema.Number>;
401
- poiX: Schema.optionalKey<Schema.Number>;
402
- poiY: Schema.optionalKey<Schema.Number>;
403
- poiZ: Schema.optionalKey<Schema.Number>;
404
- }>, {
405
- readonly "~position": {
406
- get: (data: {
407
- readonly x: number;
408
- readonly y: number;
409
- readonly z: number;
410
- readonly rotX: number;
411
- readonly rotY: number;
412
- readonly rotZ: number;
413
- readonly focalLength: number;
414
- readonly focusDistance: number;
415
- readonly aperture: number;
416
- readonly poiX?: number;
417
- readonly poiY?: number;
418
- readonly poiZ?: number;
419
- }) => {
420
- x: number;
421
- y: number;
422
- z: number;
423
- };
424
- set: (data: {
425
- readonly x: number;
426
- readonly y: number;
427
- readonly z: number;
428
- readonly rotX: number;
429
- readonly rotY: number;
430
- readonly rotZ: number;
431
- readonly focalLength: number;
432
- readonly focusDistance: number;
433
- readonly aperture: number;
434
- readonly poiX?: number;
435
- readonly poiY?: number;
436
- readonly poiZ?: number;
437
- }, value: Entity.Position) => {
438
- readonly x: number;
439
- readonly y: number;
440
- readonly z: number;
441
- readonly rotX: number;
442
- readonly rotY: number;
443
- readonly rotZ: number;
444
- readonly focalLength: number;
445
- readonly focusDistance: number;
446
- readonly aperture: number;
447
- readonly poiX?: number;
448
- readonly poiY?: number;
449
- readonly poiZ?: number;
450
- };
463
+ camera: Projection.CameraView & Projection.PointOfInterest;
464
+ comps: {
465
+ [k: string]: CompConfig;
451
466
  };
452
- }>;
453
- setCamera: (instance: Instance.Instance) => void;
454
- destroy: <Name extends string, Data extends Schema.Top>(instance: Instance.Instance<Name, Data>) => void;
467
+ }, never, never>;
468
+ /**
469
+ * ponytail: create a tree node for an entity that is NOT in the
470
+ * union — the particle system only (design D10). Mounts under the
471
+ * ambient parent like any instance. Delete with the particles
472
+ * rewrite; see `particlesEscapeInstantiate`.
473
+ */
474
+ instantiateEscape: (state: import("effect/Schema").Struct.ReadonlySide<{
475
+ readonly _tag: import("effect/Schema").tag<"Camera">;
476
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
477
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
478
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
479
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
480
+ }>>;
481
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
482
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
483
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
484
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
485
+ }>>;
486
+ readonly focalLength: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
487
+ readonly focusDistance: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
488
+ readonly aperture: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
489
+ readonly poi: import("effect/Schema").withConstructorDefault<import("effect/Schema").NullOr<import("effect/Schema").TaggedStruct<"Vec3", {
490
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
491
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
492
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
493
+ }>>>;
494
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
495
+ readonly _tag: import("effect/Schema").tag<"Circle">;
496
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
497
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
498
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
499
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
500
+ }>>;
501
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
502
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
503
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
504
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
505
+ }>>;
506
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
507
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
508
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
509
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
510
+ }>>;
511
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
512
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
513
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
514
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
515
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
516
+ readonly radius: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
517
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
518
+ readonly _tag: import("effect/Schema").tag<"Ellipse">;
519
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
520
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
521
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
522
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
523
+ }>>;
524
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
525
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
526
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
527
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
528
+ }>>;
529
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
530
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
531
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
532
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
533
+ }>>;
534
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
535
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
536
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
537
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
538
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
539
+ readonly radiusX: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
540
+ readonly radiusY: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
541
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
542
+ readonly _tag: import("effect/Schema").tag<"Group">;
543
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
544
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
545
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
546
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
547
+ }>>;
548
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
549
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
550
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
551
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
552
+ }>>;
553
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
554
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
555
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
556
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
557
+ }>>;
558
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
559
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
560
+ readonly children: import("effect/Schema").withConstructorDefault<import("effect/Schema").$Array<import("effect/Schema").String>>;
561
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
562
+ readonly _tag: import("effect/Schema").tag<"Hud">;
563
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
564
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
565
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
566
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
567
+ }>>;
568
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
569
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
570
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
571
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
572
+ }>>;
573
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
574
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
575
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
576
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
577
+ }>>;
578
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
579
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
580
+ readonly children: import("effect/Schema").withConstructorDefault<import("effect/Schema").$Array<import("effect/Schema").String>>;
581
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
582
+ readonly _tag: import("effect/Schema").tag<"Line">;
583
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
584
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
585
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
586
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
587
+ }>>;
588
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
589
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
590
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
591
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
592
+ }>>;
593
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
594
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
595
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
596
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
597
+ }>>;
598
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
599
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
600
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
601
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
602
+ readonly start: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
603
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
604
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
605
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
606
+ }>>;
607
+ readonly end: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
608
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
609
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
610
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
611
+ }>>;
612
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
613
+ readonly _tag: import("effect/Schema").tag<"Path">;
614
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
615
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
616
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
617
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
618
+ }>>;
619
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
620
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
621
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
622
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
623
+ }>>;
624
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
625
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
626
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
627
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
628
+ }>>;
629
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
630
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
631
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
632
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
633
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
634
+ readonly commands: import("effect/Schema").NonEmptyArray<import("effect/Schema").TaggedUnion<{
635
+ readonly L: import("effect/Schema").TaggedStruct<"L", {
636
+ x: import("effect/Schema").Number;
637
+ y: import("effect/Schema").Number;
638
+ z: import("effect/Schema").optionalKey<import("effect/Schema").Number>;
639
+ }>;
640
+ readonly M: import("effect/Schema").TaggedStruct<"M", {
641
+ x: import("effect/Schema").Number;
642
+ y: import("effect/Schema").Number;
643
+ z: import("effect/Schema").optionalKey<import("effect/Schema").Number>;
644
+ }>;
645
+ readonly Z: import("effect/Schema").TaggedStruct<"Z", {}>;
646
+ }>>;
647
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
648
+ readonly _tag: import("effect/Schema").tag<"Rect">;
649
+ readonly position: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
650
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
651
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
652
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
653
+ }>>;
654
+ readonly rotation: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
655
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
656
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
657
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
658
+ }>>;
659
+ readonly scale: import("effect/Schema").withConstructorDefault<import("effect/Schema").TaggedStruct<"Vec3", {
660
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
661
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
662
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
663
+ }>>;
664
+ readonly opacity: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
665
+ readonly visible: import("effect/Schema").withConstructorDefault<import("effect/Schema").Boolean>;
666
+ readonly strokeWidth: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
667
+ readonly strokeColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
668
+ readonly fillColor: import("effect/Schema").withConstructorDefault<typeof Color.Color>;
669
+ readonly width: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
670
+ readonly height: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
671
+ }, "Type"> | {
672
+ readonly _tag: "Image";
673
+ readonly position: import("effect/Schema").Struct.ReadonlySide<{
674
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
675
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
676
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
677
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
678
+ }, "Type">;
679
+ readonly rotation: import("effect/Schema").Struct.ReadonlySide<{
680
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
681
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
682
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
683
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
684
+ }, "Type">;
685
+ readonly scale: import("effect/Schema").Struct.ReadonlySide<{
686
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
687
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
688
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
689
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
690
+ }, "Type">;
691
+ readonly opacity: number;
692
+ readonly visible: boolean;
693
+ readonly image: import("effect/Schema").Struct.ReadonlySide<{
694
+ readonly _tag: import("effect/Schema").tag<"effect-motion/Resources/Image">;
695
+ readonly id: import("effect/Schema").String;
696
+ }, "Type">;
697
+ readonly width?: number;
698
+ readonly height?: number;
699
+ } | {
700
+ readonly _tag: "Text";
701
+ readonly position: import("effect/Schema").Struct.ReadonlySide<{
702
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
703
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
704
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
705
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
706
+ }, "Type">;
707
+ readonly rotation: import("effect/Schema").Struct.ReadonlySide<{
708
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
709
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
710
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
711
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
712
+ }, "Type">;
713
+ readonly scale: import("effect/Schema").Struct.ReadonlySide<{
714
+ readonly _tag: import("effect/Schema").tag<"Vec3">;
715
+ readonly x: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
716
+ readonly y: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
717
+ readonly z: import("effect/Schema").withConstructorDefault<import("effect/Schema").Number>;
718
+ }, "Type">;
719
+ readonly opacity: number;
720
+ readonly visible: boolean;
721
+ readonly fillColor: Color.Color;
722
+ readonly text: string;
723
+ readonly fontSize: number;
724
+ readonly fontFamily: import("effect/Schema").Struct.ReadonlySide<{
725
+ readonly _tag: import("effect/Schema").tag<"effect-motion/Resources/Font">;
726
+ readonly id: import("effect/Schema").String;
727
+ }, "Type">;
728
+ readonly textAnchor?: "end" | "middle" | "start";
729
+ readonly baseline?: "auto" | "hanging" | "middle";
730
+ }) => Effect.Effect<Instance.Instance<"Camera" | "Circle" | "Ellipse" | "Group" | "Hud" | "Image" | "Line" | "Path" | "Rect" | "Text">, never, never>;
731
+ registerComp: (id: string, config: CompConfig) => void;
732
+ camera: Instance.Instance<"Camera">;
733
+ setCamera: (instance: Instance.Instance<"Camera">) => void;
734
+ destroy: (instance: Instance.Instance) => void;
455
735
  phaser: {
456
736
  register: (n: number) => void;
457
737
  deregister: (n: number) => void;
@@ -475,4 +755,13 @@ declare const Runner_base: Context.ServiceClass<Runner, "Runner", {
475
755
  export declare class Runner extends Runner_base {
476
756
  }
477
757
  export declare const layer: Layer.Layer<Runner, never, never>;
478
- export {};
758
+ /** the shape particles store — opaque, as far as the union is concerned */
759
+ type ParticlesState = Record<string, unknown>;
760
+ /** the tag particle fields are stored under; never a union member */
761
+ export declare const PARTICLE_FIELD_TAG = "particles/ParticleField";
762
+ /** instantiate a non-union entity. Particles only. */
763
+ export declare const particlesEscapeInstantiate: (runner: Runner["Service"], state: ParticlesState) => Effect.Effect<Instance.Instance, never, Runner>;
764
+ /** read a non-union entity's state. Particles only. */
765
+ export declare const particlesEscapeRead: <T>(runner: Runner["Service"], instance: Instance.Instance) => T | null;
766
+ /** write a non-union entity's state. Particles only. */
767
+ export declare const particlesEscapeWrite: <T>(runner: Runner["Service"], instance: Instance.Instance, state: T) => void;