@typeonce/ritmo 0.6.0 → 0.8.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 (148) hide show
  1. package/README.md +2 -0
  2. package/dist/Brand.d.ts +9 -4
  3. package/dist/Brand.d.ts.map +1 -1
  4. package/dist/Brand.js +9 -4
  5. package/dist/Brand.js.map +1 -1
  6. package/dist/Clock.d.ts +186 -0
  7. package/dist/Clock.d.ts.map +1 -0
  8. package/dist/Clock.js +111 -0
  9. package/dist/Clock.js.map +1 -0
  10. package/dist/Command.d.ts +250 -41
  11. package/dist/Command.d.ts.map +1 -1
  12. package/dist/Command.js +59 -23
  13. package/dist/Command.js.map +1 -1
  14. package/dist/Condition.d.ts +12 -1
  15. package/dist/Condition.d.ts.map +1 -1
  16. package/dist/Condition.js.map +1 -1
  17. package/dist/Debug.d.ts +163 -15
  18. package/dist/Debug.d.ts.map +1 -1
  19. package/dist/Debug.js.map +1 -1
  20. package/dist/Decode.d.ts +1 -1
  21. package/dist/Decode.js +1 -1
  22. package/dist/Descriptor.d.ts +67 -24
  23. package/dist/Descriptor.d.ts.map +1 -1
  24. package/dist/Descriptor.js +32 -15
  25. package/dist/Descriptor.js.map +1 -1
  26. package/dist/Entity.d.ts +22 -5
  27. package/dist/Entity.d.ts.map +1 -1
  28. package/dist/Entity.js +2 -2
  29. package/dist/Entity.js.map +1 -1
  30. package/dist/EntityScope.d.ts +26 -1
  31. package/dist/EntityScope.d.ts.map +1 -1
  32. package/dist/EntityScope.js +14 -2
  33. package/dist/EntityScope.js.map +1 -1
  34. package/dist/HostClock.d.ts +49 -0
  35. package/dist/HostClock.d.ts.map +1 -0
  36. package/dist/HostClock.js +46 -0
  37. package/dist/HostClock.js.map +1 -0
  38. package/dist/Inspector.d.ts +7 -1
  39. package/dist/Inspector.d.ts.map +1 -1
  40. package/dist/Inspector.js.map +1 -1
  41. package/dist/Machine.d.ts +67 -36
  42. package/dist/Machine.d.ts.map +1 -1
  43. package/dist/Machine.js +10 -3
  44. package/dist/Machine.js.map +1 -1
  45. package/dist/Query.d.ts +74 -26
  46. package/dist/Query.d.ts.map +1 -1
  47. package/dist/Query.js +32 -28
  48. package/dist/Query.js.map +1 -1
  49. package/dist/Runtime.d.ts +39 -16
  50. package/dist/Runtime.d.ts.map +1 -1
  51. package/dist/Runtime.js +556 -87
  52. package/dist/Runtime.js.map +1 -1
  53. package/dist/Schedule.d.ts +217 -10
  54. package/dist/Schedule.d.ts.map +1 -1
  55. package/dist/Schedule.js +5 -0
  56. package/dist/Schedule.js.map +1 -1
  57. package/dist/Schema.d.ts +196 -44
  58. package/dist/Schema.d.ts.map +1 -1
  59. package/dist/Schema.js +29 -11
  60. package/dist/Schema.js.map +1 -1
  61. package/dist/Snapshot.d.ts +14 -0
  62. package/dist/Snapshot.d.ts.map +1 -1
  63. package/dist/Snapshot.js.map +1 -1
  64. package/dist/System.d.ts +212 -58
  65. package/dist/System.d.ts.map +1 -1
  66. package/dist/System.js +84 -6
  67. package/dist/System.js.map +1 -1
  68. package/dist/index.d.ts +8 -7
  69. package/dist/index.d.ts.map +1 -1
  70. package/dist/index.js +8 -7
  71. package/dist/index.js.map +1 -1
  72. package/dist/internal/cells.d.ts +3 -3
  73. package/dist/internal/cells.d.ts.map +1 -1
  74. package/dist/internal/cells.js +9 -11
  75. package/dist/internal/cells.js.map +1 -1
  76. package/dist/internal/debug.d.ts +13 -0
  77. package/dist/internal/debug.d.ts.map +1 -1
  78. package/dist/internal/debug.js +192 -7
  79. package/dist/internal/debug.js.map +1 -1
  80. package/dist/internal/equal.d.ts +8 -0
  81. package/dist/internal/equal.d.ts.map +1 -0
  82. package/dist/internal/equal.js +38 -0
  83. package/dist/internal/equal.js.map +1 -0
  84. package/dist/internal/fragments.d.ts.map +1 -1
  85. package/dist/internal/fragments.js +11 -1
  86. package/dist/internal/fragments.js.map +1 -1
  87. package/dist/internal/game.d.ts.map +1 -1
  88. package/dist/internal/game.js +41 -6
  89. package/dist/internal/game.js.map +1 -1
  90. package/dist/internal/order.d.ts +10 -0
  91. package/dist/internal/order.d.ts.map +1 -0
  92. package/dist/internal/order.js +122 -0
  93. package/dist/internal/order.js.map +1 -0
  94. package/dist/internal/queries.d.ts.map +1 -1
  95. package/dist/internal/queries.js +32 -10
  96. package/dist/internal/queries.js.map +1 -1
  97. package/dist/internal/requirements.d.ts +26 -0
  98. package/dist/internal/requirements.d.ts.map +1 -0
  99. package/dist/internal/requirements.js +46 -0
  100. package/dist/internal/requirements.js.map +1 -0
  101. package/package.json +1 -1
  102. package/src/Brand.ts +9 -4
  103. package/src/Clock.ts +311 -0
  104. package/src/Command.ts +407 -89
  105. package/src/Condition.ts +17 -1
  106. package/src/Debug.ts +172 -14
  107. package/src/Decode.ts +1 -1
  108. package/src/Descriptor.ts +92 -37
  109. package/src/Entity.ts +24 -5
  110. package/src/EntityScope.ts +27 -2
  111. package/src/HostClock.ts +64 -0
  112. package/src/Inspector.ts +7 -2
  113. package/src/Machine.ts +81 -37
  114. package/src/Query.ts +110 -38
  115. package/src/Runtime.ts +607 -111
  116. package/src/Schedule.ts +380 -13
  117. package/src/Schema.ts +249 -63
  118. package/src/Snapshot.ts +4 -0
  119. package/src/System.ts +248 -93
  120. package/src/index.ts +8 -7
  121. package/src/internal/cells.ts +10 -12
  122. package/src/internal/debug.ts +208 -12
  123. package/src/internal/equal.ts +31 -0
  124. package/src/internal/fragments.ts +12 -2
  125. package/src/internal/game.ts +61 -7
  126. package/src/internal/order.ts +144 -0
  127. package/src/internal/queries.ts +37 -13
  128. package/src/internal/requirements.ts +71 -0
  129. package/dist/Definition.d.ts +0 -99
  130. package/dist/Definition.d.ts.map +0 -1
  131. package/dist/Definition.js +0 -68
  132. package/dist/Definition.js.map +0 -1
  133. package/dist/Feature.d.ts +0 -106
  134. package/dist/Feature.d.ts.map +0 -1
  135. package/dist/Feature.js +0 -87
  136. package/dist/Feature.js.map +0 -1
  137. package/dist/Fx.d.ts +0 -128
  138. package/dist/Fx.d.ts.map +0 -1
  139. package/dist/Fx.js +0 -112
  140. package/dist/Fx.js.map +0 -1
  141. package/dist/internal/definition.d.ts +0 -17
  142. package/dist/internal/definition.d.ts.map +0 -1
  143. package/dist/internal/definition.js +0 -25
  144. package/dist/internal/definition.js.map +0 -1
  145. package/src/Definition.ts +0 -106
  146. package/src/Feature.ts +0 -241
  147. package/src/Fx.ts +0 -176
  148. package/src/internal/definition.ts +0 -56
@@ -16,8 +16,9 @@
16
16
  * 3. bind one `Game` with `Schema.bind(...)`
17
17
  *
18
18
  * Reach for this module first whenever you introduce a new component,
19
- * resource, event, or service to the game. Discrete modes whose transitions
20
- * matter are state machines (`Game.StateMachine(...)`), not descriptors.
19
+ * resource, event, or service to the game. A game-wide mode whose transitions
20
+ * matter is a state machine (`Game.StateMachine(...)`); a state each entity
21
+ * has on its own is a component (`Descriptor.EntityState(...)`).
21
22
  *
22
23
  * @module Descriptor
23
24
  * @docGroup core
@@ -132,6 +133,37 @@ type ConstructedFor<Kind extends DescriptorKind, Name extends string, Value, Raw
132
133
  export interface TransientDescriptor<out Kind extends "component" | "resource", out Name extends string, in out Value> extends Descriptor<Kind, Name, Value> {
133
134
  readonly transient: true;
134
135
  }
136
+ /**
137
+ * Marks a component that is never edited in place: `Game.Query.write(...)`
138
+ * rejects it, and the only way to change its value is to replace it with
139
+ * `commands.insert(...)` (applied at `applyDeferred()`, seen by
140
+ * `Game.Query.changed(...)`).
141
+ */
142
+ export interface Immutable {
143
+ readonly immutable: true;
144
+ }
145
+ /**
146
+ * Options of the component descriptor constructors (`Component`,
147
+ * `ConstructedComponent`, `TransientComponent`).
148
+ */
149
+ export interface ComponentOptions {
150
+ /**
151
+ * `true` for data that says what an entity is (a kind, a team, a tile) and
152
+ * is replaced, never edited: queries can only read it, and
153
+ * `commands.insert(...)` replaces it. Leave it out for state that systems
154
+ * update every frame.
155
+ */
156
+ readonly immutable?: true;
157
+ }
158
+ /** The descriptor a component constructor returns for `Options`: `D`, plus `Immutable` when `immutable: true`. */
159
+ export type WithComponentOptions<D, Options extends ComponentOptions> = Options extends {
160
+ readonly immutable: true;
161
+ } ? D & Immutable : D;
162
+ /**
163
+ * Whether a component descriptor was declared `immutable: true` (readable by
164
+ * queries, replaced only with `commands.insert(...)`).
165
+ */
166
+ export declare const isImmutable: (descriptor: Descriptor.Any) => descriptor is Descriptor.Any & Immutable;
135
167
  /**
136
168
  * Type-level helpers for working with descriptors.
137
169
  */
@@ -166,9 +198,11 @@ export declare namespace Descriptor {
166
198
  * @example
167
199
  * ```ts
168
200
  * const Position = Descriptor.Component<{ x: number; y: number }>()("Position")
201
+ * // What an entity is, replaced with commands.insert and never written by a query:
202
+ * const EnemyKind = Descriptor.Component<"grunt" | "boss">()("EnemyKind", { immutable: true })
169
203
  * ```
170
204
  */
171
- export declare const Component: <Value>() => <const Name extends string>(name: Name) => Descriptor<"component", Name, Value>;
205
+ export declare const Component: <Value>() => <const Name extends string, const Options extends ComponentOptions = {}>(name: Name, options?: Options) => WithComponentOptions<Descriptor<"component", Name, Value>, Options>;
172
206
  /**
173
207
  * Defines a component descriptor that also knows how to validate raw values.
174
208
  *
@@ -182,7 +216,7 @@ export declare const Component: <Value>() => <const Name extends string>(name: N
182
216
  * const Position = Descriptor.ConstructedComponent(Vector2)("Position")
183
217
  * ```
184
218
  */
185
- export declare const ConstructedComponent: <Value, Raw, Error, Constructor extends {} = {}>(constructor: ResultConstructor<Value, Raw, Error> & Constructor) => <const Name extends string>(name: Name) => ConstructedFor<"component", Name, Value, Raw, Error, Constructor>;
219
+ export declare const ConstructedComponent: <Value, Raw, Error, Constructor extends {} = {}>(constructor: ResultConstructor<Value, Raw, Error> & Constructor) => <const Name extends string, const Options extends ComponentOptions = {}>(name: Name, options?: Options) => WithComponentOptions<ConstructedFor<"component", Name, Value, Raw, Error, Constructor>, Options>;
186
220
  /**
187
221
  * Defines a component descriptor that snapshots skip.
188
222
  *
@@ -194,7 +228,7 @@ export declare const ConstructedComponent: <Value, Raw, Error, Constructor exten
194
228
  * const SpriteRef = Descriptor.TransientComponent<{ frame: number }>()("SpriteRef")
195
229
  * ```
196
230
  */
197
- export declare const TransientComponent: <Value>() => <const Name extends string>(name: Name) => TransientDescriptor<"component", Name, Value>;
231
+ export declare const TransientComponent: <Value>() => <const Name extends string, const Options extends ComponentOptions = {}>(name: Name, options?: Options) => WithComponentOptions<TransientDescriptor<"component", Name, Value>, Options>;
198
232
  /**
199
233
  * Defines a marker component: no data, only presence (`[Player, {}]`).
200
234
  *
@@ -208,48 +242,55 @@ export declare const TransientComponent: <Value>() => <const Name extends string
208
242
  * ```
209
243
  */
210
244
  export declare const Tag: <const Name extends string>(name: Name) => DecodableDescriptor<"component", Name, {}, {}, DecodeModule.DecodeError>;
211
- /** One state of a {@link State} component: a string or number literal. */
212
- export type StateValue = string | number;
245
+ /** One state of a {@link EntityState} component: a string or number literal. */
246
+ export type EntityStateValue = string | number;
213
247
  /**
214
- * The allowed moves of a {@link State} component: for every state, the
248
+ * The allowed moves of a {@link EntityState} component: for every state, the
215
249
  * states it may move to (`[]` for a state with no way out).
216
250
  */
217
- export type StateTransitions<States extends readonly [StateValue, ...Array<StateValue>]> = {
251
+ export type EntityStateTransitions<States extends readonly [EntityStateValue, ...Array<EntityStateValue>]> = {
218
252
  readonly [From in States[number]]: ReadonlyArray<States[number]>;
219
253
  };
220
254
  /**
221
255
  * A component whose value is one of a closed set of states, with an optional
222
- * graph of allowed moves. Built with {@link State}.
256
+ * graph of allowed moves. Built with {@link EntityState}.
223
257
  */
224
- export interface StateDescriptor<out Name extends string, in out States extends readonly [StateValue, ...Array<StateValue>], in out Transitions extends StateTransitions<States> | undefined> extends DecodableDescriptor<"component", Name, States[number], States[number], DecodeModule.DecodeError> {
258
+ export interface EntityStateDescriptor<out Name extends string, in out States extends readonly [EntityStateValue, ...Array<EntityStateValue>], in out Transitions extends EntityStateTransitions<States> | undefined> extends DecodableDescriptor<"component", Name, States[number], States[number], DecodeModule.DecodeError> {
225
259
  readonly states: States;
226
260
  readonly transitions: Transitions;
227
261
  }
228
262
  /**
229
- * Defines a state component: its value is one of `states`, validated (so
230
- * snapshots reject unknown states), and it behaves like any other component
231
- * (storage, change detection, rollback, traces).
263
+ * Defines a per-entity state: a component whose value is one of `states`,
264
+ * validated (so snapshots reject unknown states), that behaves like any other
265
+ * component (storage, change detection, rollback, traces).
266
+ *
267
+ * Use this when each entity has its own state: an enemy's attack windup, a
268
+ * door's open/closed, a unit's AI mode. Use `Game.StateMachine(...)` instead
269
+ * for one game-wide mode (menu, playing, paused, game over): machines change
270
+ * only at `applyStateTransitions(...)`, run `onEnter`/`onExit` schedules, and
271
+ * gate systems with `Game.Condition.inState(...)`. An entity state does none
272
+ * of that; it is data on an entity.
232
273
  *
233
274
  * With `transitions`, its write cell gains `transition(from, to)`: the pair
234
275
  * is checked against the graph at compile time, and at runtime the move
235
- * happens only if the current state is still `from`, otherwise it returns a
236
- * `StateMismatch` failure. Transitions are ordinary component writes:
276
+ * happens only if the current state is still `from`, otherwise it returns an
277
+ * `EntityStateMismatch` failure. Transitions are ordinary component writes:
237
278
  * immediate, visible to later systems, rolled back with a failed system.
238
279
  *
239
280
  * @example
240
281
  * ```ts
241
- * const Phase = Descriptor.State("Phase", ["ready", "windup", "active"] as const, {
282
+ * const Attack = Descriptor.EntityState("Attack", ["ready", "windup", "active"] as const, {
242
283
  * transitions: { ready: ["windup"], windup: ["active", "ready"], active: ["ready"] }
243
284
  * })
244
- * // in a system with a write slot `phase`:
245
- * const moved = data.phase.transition("windup", "active") // "ready" -> "active" does not compile
285
+ * // in a system with a write slot `attack`:
286
+ * const moved = data.attack.transition("windup", "active") // "ready" -> "active" does not compile
246
287
  * ```
247
288
  */
248
- export declare const State: <const Name extends string, const States extends readonly [StateValue, ...Array<StateValue>], const Transitions extends StateTransitions<States> | undefined = undefined>(name: Name, states: States, options?: {
289
+ export declare const EntityState: <const Name extends string, const States extends readonly [EntityStateValue, ...Array<EntityStateValue>], const Transitions extends EntityStateTransitions<States> | undefined = undefined>(name: Name, states: States, options?: {
249
290
  readonly transitions: Transitions & { readonly [Key in Exclude<keyof Transitions, States[number]>]: never; };
250
- }) => StateDescriptor<Name, States, Transitions>;
251
- /** Whether a descriptor was built with {@link State}. */
252
- export declare const isState: (descriptor: Descriptor.Any) => descriptor is StateDescriptor<string, readonly [StateValue, ...Array<StateValue>], StateTransitions<readonly [StateValue, ...Array<StateValue>]> | undefined>;
291
+ }) => EntityStateDescriptor<Name, States, Transitions>;
292
+ /** Whether a descriptor was built with {@link EntityState}. */
293
+ export declare const isEntityState: (descriptor: Descriptor.Any) => descriptor is EntityStateDescriptor<string, readonly [EntityStateValue, ...Array<EntityStateValue>], EntityStateTransitions<readonly [EntityStateValue, ...Array<EntityStateValue>]> | undefined>;
253
294
  /**
254
295
  * Defines a resource descriptor.
255
296
  *
@@ -391,7 +432,9 @@ export declare function constructorOf<D extends Descriptor.Any>(descriptor: D):
391
432
  * `related` is the reverse collection maintained by the runtime.
392
433
  *
393
434
  * Use hierarchy when the relationship must support ordered children,
394
- * ancestor/descendant traversal, and linked recursive despawn.
435
+ * ancestor/descendant traversal, and linked recursive despawn. Use
436
+ * `Game.EntityScope(...)` instead when entities only share a lifetime (a
437
+ * level, a menu) and need no tree, order, or traversal.
395
438
  */
396
439
  export declare const Hierarchy: typeof RelationModule.Hierarchy;
397
440
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Descriptor.d.ts","sourceRoot":"","sources":["../src/Descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Descriptor.d.ts","sourceRoot":"","sources":["../src/Descriptor.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,12 @@ const descriptorTypeId = "~ritmo/Descriptor";
5
5
  const descriptorConstructionTypeId = "~ritmo/DescriptorConstruction";
6
6
  const descriptorDecodeTypeId = "~ritmo/DescriptorDecode";
7
7
  const descriptorConstruction = Symbol("ritmo/DescriptorConstruction");
8
+ const applyComponentOptions = (descriptor, options) => options?.immutable === true ? { ...descriptor, immutable: true } : descriptor;
9
+ /**
10
+ * Whether a component descriptor was declared `immutable: true` (readable by
11
+ * queries, replaced only with `commands.insert(...)`).
12
+ */
13
+ export const isImmutable = (descriptor) => "immutable" in descriptor && descriptor.immutable === true;
8
14
  /**
9
15
  * Internal descriptor constructor shared by all descriptor helpers.
10
16
  *
@@ -40,9 +46,11 @@ const makeConstructedDescriptor = (kind, name, constructor) => ({
40
46
  * @example
41
47
  * ```ts
42
48
  * const Position = Descriptor.Component<{ x: number; y: number }>()("Position")
49
+ * // What an entity is, replaced with commands.insert and never written by a query:
50
+ * const EnemyKind = Descriptor.Component<"grunt" | "boss">()("EnemyKind", { immutable: true })
43
51
  * ```
44
52
  */
45
- export const Component = () => (name) => makeDescriptor("component", name);
53
+ export const Component = () => (name, options) => applyComponentOptions(makeDescriptor("component", name), options);
46
54
  /**
47
55
  * Defines a component descriptor that also knows how to validate raw values.
48
56
  *
@@ -56,7 +64,7 @@ export const Component = () => (name) => makeDescriptor("component", name);
56
64
  * const Position = Descriptor.ConstructedComponent(Vector2)("Position")
57
65
  * ```
58
66
  */
59
- export const ConstructedComponent = (constructor) => (name) => makeConstructedDescriptor("component", name, constructor);
67
+ export const ConstructedComponent = (constructor) => (name, options) => applyComponentOptions(makeConstructedDescriptor("component", name, constructor), options);
60
68
  /**
61
69
  * Defines a component descriptor that snapshots skip.
62
70
  *
@@ -68,7 +76,7 @@ export const ConstructedComponent = (constructor) => (name) => makeConstructedDe
68
76
  * const SpriteRef = Descriptor.TransientComponent<{ frame: number }>()("SpriteRef")
69
77
  * ```
70
78
  */
71
- export const TransientComponent = () => (name) => makeTransientDescriptor("component", name);
79
+ export const TransientComponent = () => (name, options) => applyComponentOptions(makeTransientDescriptor("component", name), options);
72
80
  /**
73
81
  * Defines a marker component: no data, only presence (`[Player, {}]`).
74
82
  *
@@ -83,32 +91,39 @@ export const TransientComponent = () => (name) => makeTransientDescriptor("compo
83
91
  */
84
92
  export const Tag = (name) => ConstructedComponent(DecodeModule.struct({}))(name);
85
93
  /**
86
- * Defines a state component: its value is one of `states`, validated (so
87
- * snapshots reject unknown states), and it behaves like any other component
88
- * (storage, change detection, rollback, traces).
94
+ * Defines a per-entity state: a component whose value is one of `states`,
95
+ * validated (so snapshots reject unknown states), that behaves like any other
96
+ * component (storage, change detection, rollback, traces).
97
+ *
98
+ * Use this when each entity has its own state: an enemy's attack windup, a
99
+ * door's open/closed, a unit's AI mode. Use `Game.StateMachine(...)` instead
100
+ * for one game-wide mode (menu, playing, paused, game over): machines change
101
+ * only at `applyStateTransitions(...)`, run `onEnter`/`onExit` schedules, and
102
+ * gate systems with `Game.Condition.inState(...)`. An entity state does none
103
+ * of that; it is data on an entity.
89
104
  *
90
105
  * With `transitions`, its write cell gains `transition(from, to)`: the pair
91
106
  * is checked against the graph at compile time, and at runtime the move
92
- * happens only if the current state is still `from`, otherwise it returns a
93
- * `StateMismatch` failure. Transitions are ordinary component writes:
107
+ * happens only if the current state is still `from`, otherwise it returns an
108
+ * `EntityStateMismatch` failure. Transitions are ordinary component writes:
94
109
  * immediate, visible to later systems, rolled back with a failed system.
95
110
  *
96
111
  * @example
97
112
  * ```ts
98
- * const Phase = Descriptor.State("Phase", ["ready", "windup", "active"] as const, {
113
+ * const Attack = Descriptor.EntityState("Attack", ["ready", "windup", "active"] as const, {
99
114
  * transitions: { ready: ["windup"], windup: ["active", "ready"], active: ["ready"] }
100
115
  * })
101
- * // in a system with a write slot `phase`:
102
- * const moved = data.phase.transition("windup", "active") // "ready" -> "active" does not compile
116
+ * // in a system with a write slot `attack`:
117
+ * const moved = data.attack.transition("windup", "active") // "ready" -> "active" does not compile
103
118
  * ```
104
119
  */
105
- export const State = (name, states, options) => ({
120
+ export const EntityState = (name, states, options) => ({
106
121
  ...makeConstructedDescriptor("component", name, DecodeModule.literal(...states)),
107
122
  states,
108
123
  transitions: options?.transitions
109
124
  });
110
- /** Whether a descriptor was built with {@link State}. */
111
- export const isState = (descriptor) => "states" in descriptor;
125
+ /** Whether a descriptor was built with {@link EntityState}. */
126
+ export const isEntityState = (descriptor) => "states" in descriptor;
112
127
  /**
113
128
  * Defines a resource descriptor.
114
129
  *
@@ -235,7 +250,9 @@ export function constructorOf(descriptor) {
235
250
  * `related` is the reverse collection maintained by the runtime.
236
251
  *
237
252
  * Use hierarchy when the relationship must support ordered children,
238
- * ancestor/descendant traversal, and linked recursive despawn.
253
+ * ancestor/descendant traversal, and linked recursive despawn. Use
254
+ * `Game.EntityScope(...)` instead when entities only share a lifetime (a
255
+ * level, a menu) and need no tree, order, or traversal.
239
256
  */
240
257
  export const Hierarchy = RelationModule.Hierarchy;
241
258
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Descriptor.js","sourceRoot":"","sources":["../src/Descriptor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Descriptor.js","sourceRoot":"","sources":["../src/Descriptor.ts"],"names":[],"mappings":"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"}
package/dist/Entity.d.ts CHANGED
@@ -55,7 +55,8 @@ import * as Result from "./Result.ts";
55
55
  * @example
56
56
  * ```ts
57
57
  * const handle = Game.Entity.handle(playerId, Player)
58
- * const resolved = lookup.getHandle(handle, PlayerQuery)
58
+ * // `players` is a query the system declares: queries: { players: PlayerQuery }
59
+ * const resolved = queries.players.getHandle(handle)
59
60
  * if (!resolved.ok) return
60
61
  * ```
61
62
  */
@@ -148,11 +149,23 @@ export type StagedComponent = readonly [Descriptor<"component", string, any>, un
148
149
  *
149
150
  * Query execution is the main source of `EntityRef` values.
150
151
  */
151
- export interface EntityRef<S extends Schema.Any, out P extends ComponentProof, Root = unknown> {
152
+ export interface EntityRef<S extends Schema.Any, out P extends ComponentProof, Root = unknown, out Proves = unknown, out Lacks = never> {
152
153
  /**
153
154
  * Runtime tag for debugging and pattern matching.
154
155
  */
155
156
  readonly kind: "EntityRef";
157
+ /**
158
+ * The component descriptors the query that produced this ref proves (its
159
+ * required slots and `with`): what `commands.despawn`, `insert`, and
160
+ * `remove` check. Type-level only.
161
+ */
162
+ readonly __proves?: (_: never) => Proves;
163
+ /**
164
+ * The component descriptors the producing query proves absent (its
165
+ * `without`): what `commands.remove` checks against `Schema.requires`.
166
+ * Type-level only.
167
+ */
168
+ readonly __lacks?: (_: never) => Lacks;
156
169
  /**
157
170
  * The schema-bound entity identity.
158
171
  */
@@ -169,11 +182,15 @@ export interface EntityRef<S extends Schema.Any, out P extends ComponentProof, R
169
182
  * `P` tracks readable components and `W` tracks the writable subset. This keeps
170
183
  * mutation capabilities explicit in query results.
171
184
  */
172
- export interface EntityMut<S extends Schema.Any, out P extends ComponentProof, out W extends ComponentProof, Root = unknown> {
185
+ export interface EntityMut<S extends Schema.Any, out P extends ComponentProof, out W extends ComponentProof, Root = unknown, out Proves = unknown, out Lacks = never> {
173
186
  /**
174
187
  * Runtime tag for debugging and pattern matching.
175
188
  */
176
189
  readonly kind: "EntityMut";
190
+ /** The component descriptors the producing query proves; see `EntityRef`. */
191
+ readonly __proves?: (_: never) => Proves;
192
+ /** The component descriptors the producing query proves absent; see `EntityRef`. */
193
+ readonly __lacks?: (_: never) => Lacks;
177
194
  /**
178
195
  * The schema-bound entity identity.
179
196
  */
@@ -213,7 +230,7 @@ export type HandleTarget<S extends Schema.Any, Root = unknown> = EntityId<S, Roo
213
230
  * Converts a current entity into a durable handle for storage.
214
231
  *
215
232
  * The handle is storage-safe, not a proof of liveness: resolve it later with
216
- * `lookup.getHandle(...)`, which fails explicitly when the entity is gone.
233
+ * `queries.x.getHandle(...)` (through a declared query), which fails explicitly when the entity is gone.
217
234
  *
218
235
  * Pass an `intent` component when later code assumes a role such as "player"
219
236
  * or "damage source". An intent does not prove the component is still present;
@@ -239,7 +256,7 @@ export interface InvalidHandle {
239
256
  * handles, so restoring validates them like any other value.
240
257
  *
241
258
  * A handle only names an entity; it never proves the entity exists. Resolving
242
- * it with `lookup.getHandle(...)` stays the checked step, so any positive
259
+ * it with `queries.x.getHandle(...)` (through a declared query) stays the checked step, so any positive
243
260
  * integer id decodes. Object-shaped handles and other non-numeric values
244
261
  * are rejected.
245
262
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Entity.d.ts","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"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"}
package/dist/Entity.js CHANGED
@@ -22,7 +22,7 @@ export const makeHandle = (value) => value;
22
22
  * Converts a current entity into a durable handle for storage.
23
23
  *
24
24
  * The handle is storage-safe, not a proof of liveness: resolve it later with
25
- * `lookup.getHandle(...)`, which fails explicitly when the entity is gone.
25
+ * `queries.x.getHandle(...)` (through a declared query), which fails explicitly when the entity is gone.
26
26
  *
27
27
  * Pass an `intent` component when later code assumes a role such as "player"
28
28
  * or "damage source". An intent does not prove the component is still present;
@@ -41,7 +41,7 @@ export const handle = (target, _intent) => makeHandle(typeof target === "number"
41
41
  * handles, so restoring validates them like any other value.
42
42
  *
43
43
  * A handle only names an entity; it never proves the entity exists. Resolving
44
- * it with `lookup.getHandle(...)` stays the checked step, so any positive
44
+ * it with `queries.x.getHandle(...)` (through a declared query) stays the checked step, so any positive
45
45
  * integer id decodes. Object-shaped handles and other non-numeric values
46
46
  * are rejected.
47
47
  *
@@ -1 +1 @@
1
- {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAwBrC;;GAEG;AACH,MAAM,YAAY,GAAiB,eAAe,CAAA;AAClD,MAAM,kBAAkB,GAAG,qBAA8B,CAAA;AAoJzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAuC,KAAa,EAAqB,EAAE,CACrG,KAA0B,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAGxB,KAAa,EAAwB,EAAE,CACvC,KAA6B,CAAA;AAU/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAKpB,MAA6B,EAC7B,OAAgB,EACM,EAAE,CACxB,UAAU,CAAe,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAU3E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAI1B,KAAW,EACX,GAAY,EACZ,OAAgB,EACoC,EAAE;IACtD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAe,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,EAAqB,EACrB,KAAQ,EACR,UAAU,GAAmC,EAAE,EAC/C,SAAS,GAA2C,EAAE,EAC7B,EAAE,CAAC,CAAC;IAC7B,IAAI,EAAE,aAAa;IACnB,EAAE;IACF,YAAY,EAAE,SAA4B;IAC1C,KAAK;IACL,UAAU;IACV,SAAS;CACV,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,EAAqB,EACrB,KAAQ,EACe,EAAE,CAAC,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,EAAE;IACF,YAAY,EAAE,SAA4B;IAC1C,KAAK;CACN,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,EAAqB,EACrB,KAAQ,EACR,QAAW,EACe,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE,WAAW;IACjB,EAAE;IACF,YAAY,EAAE,SAA4B;IAC1C,KAAK;IACL,QAAQ;CACT,CAAC,CAAA"}
1
+ {"version":3,"file":"Entity.js","sourceRoot":"","sources":["../src/Entity.ts"],"names":[],"mappings":"AAwCA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAyBrC;;GAEG;AACH,MAAM,YAAY,GAAiB,eAAe,CAAA;AAClD,MAAM,kBAAkB,GAAG,qBAA8B,CAAA;AAsKzD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAuC,KAAa,EAAqB,EAAE,CACrG,KAA0B,CAAA;AAE5B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAGxB,KAAa,EAAwB,EAAE,CACvC,KAA6B,CAAA;AAU/B;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAKpB,MAA6B,EAC7B,OAAgB,EACM,EAAE,CACxB,UAAU,CAAe,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AAU3E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAI1B,KAAW,EACX,GAAY,EACZ,OAAgB,EACoC,EAAE;IACtD,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QAChE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAe,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAA;AAC3D,CAAC,CAAA;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,CACnB,EAAqB,EACrB,KAAQ,EACR,UAAU,GAAmC,EAAE,EAC/C,SAAS,GAA2C,EAAE,EAC7B,EAAE,CAAC,CAAC;IAC7B,IAAI,EAAE,aAAa;IACnB,EAAE;IACF,YAAY,EAAE,SAA4B;IAC1C,KAAK;IACL,UAAU;IACV,SAAS;CACV,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,EAAqB,EACrB,KAAQ,EACe,EAAE,CAAC,CAAC;IAC3B,IAAI,EAAE,WAAW;IACjB,EAAE;IACF,YAAY,EAAE,SAA4B;IAC1C,KAAK;CACN,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,GAAG,GAAG,CACjB,EAAqB,EACrB,KAAQ,EACR,QAAW,EACe,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE,WAAW;IACjB,EAAE;IACF,YAAY,EAAE,SAA4B;IAC1C,KAAK;IACL,QAAQ;CACT,CAAC,CAAA"}
@@ -7,6 +7,17 @@
7
7
  * build scenes without teaching the ECS runtime about menus, levels, overlays,
8
8
  * or any other game-specific scene model.
9
9
  *
10
+ * Use a scope when a set of entities shares one lifetime and nothing else: a
11
+ * level's walls, a menu's buttons. Membership is flat, unordered, and not
12
+ * queryable. Use `Descriptor.Hierarchy(...)` instead when entities form a
13
+ * parent-child tree: ordered children, `lookup.parent` / `descendants`
14
+ * traversal, and children despawned with their parent.
15
+ *
16
+ * A scope whose lifetime is a game state declares it:
17
+ * `Game.EntityScope(name, { despawnOnExit: [Flow, "Playing"] })` despawns
18
+ * every member when `applyStateTransitions(...)` commits that state change,
19
+ * with no system, permission, or marker to place.
20
+ *
10
21
  * @module EntityScope
11
22
  * @docGroup core
12
23
  */
@@ -15,8 +26,22 @@ export interface EntityScope<out Name extends string = string, out Root = unknow
15
26
  readonly kind: "entityScope";
16
27
  readonly name: Name;
17
28
  readonly key: symbol;
29
+ /** State changes that despawn every member, applied by `applyStateTransitions(...)`. */
30
+ readonly despawnOn: ReadonlyArray<Trigger>;
18
31
  readonly __schemaRoot?: Root | undefined;
19
32
  }
33
+ /**
34
+ * One state change that despawns a scope: leaving (`exit`) or entering
35
+ * (`enter`) `state` of `machine`.
36
+ */
37
+ export interface Trigger {
38
+ readonly phase: "enter" | "exit";
39
+ readonly machine: {
40
+ readonly key: symbol;
41
+ readonly name: string;
42
+ };
43
+ readonly state: string | number;
44
+ }
20
45
  /** Type-level helpers for entity scopes. */
21
46
  export declare namespace EntityScope {
22
47
  type Any = EntityScope<string, any>;
@@ -29,7 +54,7 @@ export declare namespace EntityScope {
29
54
  * Normal game code should use `Game.EntityScope(...)` so the returned token is
30
55
  * branded to that game's root.
31
56
  */
32
- export declare const make: <const Name extends string, Root = unknown>(name: Name) => EntityScope<Name, Root>;
57
+ export declare const make: <const Name extends string, Root = unknown>(name: Name, despawnOn?: ReadonlyArray<Trigger>) => EntityScope<Name, Root>;
33
58
  /** The storage key of the scope named `name`: the same for every scope value of that name. */
34
59
  export declare const keyOf: (name: string) => symbol;
35
60
  /** The name of the scope behind a storage key made by {@link keyOf}. */
@@ -1 +1 @@
1
- {"version":3,"file":"EntityScope.d.ts","sourceRoot":"","sources":["../src/EntityScope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,mEAAmE;AACnE,MAAM,WAAW,WAAW,CAC1B,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAChC,GAAG,CAAC,IAAI,GAAG,OAAO;IAElB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACzC;AAED,4CAA4C;AAC5C,yBAAiB,WAAW,CAAC;IAC3B,KAAY,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1C,KAAY,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAA;IAC3C,KAAY,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;CAC3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,GAAG,OAAO,QACtD,IAAI,KACT,WAAW,CAAC,IAAI,EAAE,IAAI,CAIvB,CAAA;AAIF,8FAA8F;AAC9F,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,MAA2C,CAAA;AAEhF,wEAAwE;AACxE,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,MAAM,GAAG,SAG7C,CAAA"}
1
+ {"version":3,"file":"EntityScope.d.ts","sourceRoot":"","sources":["../src/EntityScope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,mEAAmE;AACnE,MAAM,WAAW,WAAW,CAC1B,GAAG,CAAC,IAAI,SAAS,MAAM,GAAG,MAAM,EAChC,GAAG,CAAC,IAAI,GAAG,OAAO;IAElB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAA;IAC5B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,wFAAwF;IACxF,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAC1C,QAAQ,CAAC,YAAY,CAAC,EAAE,IAAI,GAAG,SAAS,CAAA;CACzC;AAED;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAA;IAChC,QAAQ,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IACjE,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAChC;AAED,4CAA4C;AAC5C,yBAAiB,WAAW,CAAC;IAC3B,KAAY,GAAG,GAAG,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC1C,KAAY,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAA;IAC3C,KAAY,IAAI,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,WAAW,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,CAAA;CAC3F;AAED;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,IAAI,GAAG,OAAO,QACtD,IAAI,cACC,aAAa,CAAC,OAAO,CAAC,KAChC,WAAW,CAAC,IAAI,EAAE,IAAI,CAKvB,CAAA;AAIF,8FAA8F;AAC9F,eAAO,MAAM,KAAK,SAAU,MAAM,KAAG,MAA2C,CAAA;AAEhF,wEAAwE;AACxE,eAAO,MAAM,MAAM,QAAS,MAAM,KAAG,MAAM,GAAG,SAG7C,CAAA"}
@@ -7,6 +7,17 @@
7
7
  * build scenes without teaching the ECS runtime about menus, levels, overlays,
8
8
  * or any other game-specific scene model.
9
9
  *
10
+ * Use a scope when a set of entities shares one lifetime and nothing else: a
11
+ * level's walls, a menu's buttons. Membership is flat, unordered, and not
12
+ * queryable. Use `Descriptor.Hierarchy(...)` instead when entities form a
13
+ * parent-child tree: ordered children, `lookup.parent` / `descendants`
14
+ * traversal, and children despawned with their parent.
15
+ *
16
+ * A scope whose lifetime is a game state declares it:
17
+ * `Game.EntityScope(name, { despawnOnExit: [Flow, "Playing"] })` despawns
18
+ * every member when `applyStateTransitions(...)` commits that state change,
19
+ * with no system, permission, or marker to place.
20
+ *
10
21
  * @module EntityScope
11
22
  * @docGroup core
12
23
  */
@@ -16,10 +27,11 @@
16
27
  * Normal game code should use `Game.EntityScope(...)` so the returned token is
17
28
  * branded to that game's root.
18
29
  */
19
- export const make = (name) => ({
30
+ export const make = (name, despawnOn = []) => ({
20
31
  kind: "entityScope",
21
32
  name,
22
- key: keyOf(name)
33
+ key: keyOf(name),
34
+ despawnOn
23
35
  });
24
36
  const keyPrefix = "ritmo/entityScope/";
25
37
  /** The storage key of the scope named `name`: the same for every scope value of that name. */
@@ -1 +1 @@
1
- {"version":3,"file":"EntityScope.js","sourceRoot":"","sources":["../src/EntityScope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAoBH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAU,EACe,EAAE,CAAC,CAAC;IAC7B,IAAI,EAAE,aAAa;IACnB,IAAI;IACJ,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;CACjB,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,oBAAoB,CAAA;AAEtC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,CAAA;AAEhF,wEAAwE;AACxE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAsB,EAAE;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtC,OAAO,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7F,CAAC,CAAA"}
1
+ {"version":3,"file":"EntityScope.js","sourceRoot":"","sources":["../src/EntityScope.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAgCH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,IAAI,GAAG,CAClB,IAAU,EACV,SAAS,GAA2B,EAAE,EACb,EAAE,CAAC,CAAC;IAC7B,IAAI,EAAE,aAAa;IACnB,IAAI;IACJ,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC;IAChB,SAAS;CACV,CAAC,CAAA;AAEF,MAAM,SAAS,GAAG,oBAAoB,CAAA;AAEtC,8FAA8F;AAC9F,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,IAAI,EAAE,CAAC,CAAA;AAEhF,wEAAwE;AACxE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,GAAW,EAAsB,EAAE;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtC,OAAO,WAAW,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAC7F,CAAC,CAAA"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * The host's wall clock, as an injected contract.
3
+ *
4
+ * Core and the generic devtools modules never read a platform clock
5
+ * (`performance`, `Date`) themselves: whatever measures host time (debug
6
+ * trace durations, session timings, replay windows) takes a `HostClock`.
7
+ * Platform packages provide implementations (`BrowserHostClock.make(window)`
8
+ * in the browser package); `standard` works in every JavaScript engine, and
9
+ * `test()` is a manual clock for deterministic tests.
10
+ *
11
+ * Host time is for measuring the host (how long a tick took), never for game
12
+ * logic: simulation time is a resource the schedule advances.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * const runtime = Game.Runtime.make({ services, debug: { hostClock: HostClock.standard } })
17
+ * ```
18
+ *
19
+ * @module HostClock
20
+ * @docGroup runtime
21
+ */
22
+ import * as Result from "./Result.ts";
23
+ /** A host clock: `now()` in milliseconds, from an arbitrary origin. */
24
+ export interface HostClock {
25
+ readonly now: () => number;
26
+ }
27
+ /**
28
+ * `Date.now`, which every JavaScript engine provides. Its readings can jump
29
+ * (the system clock is adjusted, or the device sleeps), so a duration
30
+ * computed from two readings can be negative: consumers clamp durations to
31
+ * 0. Prefer a monotonic platform clock when there is one
32
+ * (`BrowserHostClock.make(window)`).
33
+ */
34
+ export declare const standard: HostClock;
35
+ /** `adjust` must leave a finite clock reading and never move backwards. */
36
+ export interface InvalidAdjustment {
37
+ readonly _tag: "InvalidAdjustment";
38
+ readonly ms: number;
39
+ }
40
+ /** A manual clock for tests: starts at 0 and moves only through `adjust`. */
41
+ export interface TestHostClock extends HostClock {
42
+ /** Moves the clock forward by `ms` (0 or more). */
43
+ readonly adjust: (ms: number) => Result.Result<void, InvalidAdjustment>;
44
+ }
45
+ /** A test clock at 0. Every reading is the same until `adjust` moves it. */
46
+ export declare const test: () => TestHostClock;
47
+ /** A duration between two readings, clamped to 0 when the clock went backwards. */
48
+ export declare const elapsed: (from: number, to: number) => number;
49
+ //# sourceMappingURL=HostClock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HostClock.d.ts","sourceRoot":"","sources":["../src/HostClock.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,MAAM,CAAA;CAC3B;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,EAAE,SAAqC,CAAA;AAE5D,2EAA2E;AAC3E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAA;IAClC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,6EAA6E;AAC7E,MAAM,WAAW,aAAc,SAAQ,SAAS;IAC9C,mDAAmD;IACnD,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;CACxE;AAED,4EAA4E;AAC5E,eAAO,MAAM,IAAI,QAAO,aAUvB,CAAA;AAED,mFAAmF;AACnF,eAAO,MAAM,OAAO,SAAU,MAAM,MAAM,MAAM,KAAG,MAAgC,CAAA"}