@zylem/behaviors 0.4.0 → 0.5.1

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 (146) hide show
  1. package/README.md +13 -1
  2. package/dist/behavior-system-CeJXzNvr.d.ts +868 -0
  3. package/dist/{chunk-GFARAJV2.js → chunk-2PAHQZZD.js} +44 -73
  4. package/dist/chunk-2PAHQZZD.js.map +1 -0
  5. package/dist/chunk-52FJIDGL.js +30 -0
  6. package/dist/chunk-52FJIDGL.js.map +1 -0
  7. package/dist/{chunk-UYFOLI2X.js → chunk-5A5AYP2C.js} +1 -1
  8. package/dist/{chunk-UYFOLI2X.js.map → chunk-5A5AYP2C.js.map} +1 -1
  9. package/dist/{chunk-64HKCSXD.js → chunk-5EBIIYZD.js} +25 -45
  10. package/dist/chunk-5EBIIYZD.js.map +1 -0
  11. package/dist/{chunk-WXXXJ22R.js → chunk-5NJGASUJ.js} +87 -129
  12. package/dist/chunk-5NJGASUJ.js.map +1 -0
  13. package/dist/{chunk-XLUJDKCT.js → chunk-5UMCWV5A.js} +24 -15
  14. package/dist/chunk-5UMCWV5A.js.map +1 -0
  15. package/dist/chunk-5WRI5ZAA.js +31 -0
  16. package/dist/chunk-5WRI5ZAA.js.map +1 -0
  17. package/dist/{chunk-5SM5SH5O.js → chunk-7JLWZXPA.js} +2 -2
  18. package/dist/{chunk-HNESASBB.js → chunk-AEBDZWCP.js} +19 -28
  19. package/dist/chunk-AEBDZWCP.js.map +1 -0
  20. package/dist/chunk-AS3HR7AS.js +188 -0
  21. package/dist/chunk-AS3HR7AS.js.map +1 -0
  22. package/dist/chunk-E4X4YJZB.js +841 -0
  23. package/dist/chunk-E4X4YJZB.js.map +1 -0
  24. package/dist/{chunk-PWF757B6.js → chunk-F6ESSHQK.js} +19 -25
  25. package/dist/chunk-F6ESSHQK.js.map +1 -0
  26. package/dist/chunk-GQAPBNGT.js +210 -0
  27. package/dist/chunk-GQAPBNGT.js.map +1 -0
  28. package/dist/chunk-JGXRQUTC.js +191 -0
  29. package/dist/chunk-JGXRQUTC.js.map +1 -0
  30. package/dist/{chunk-BXP4K7RF.js → chunk-JVADRLWX.js} +57 -186
  31. package/dist/chunk-JVADRLWX.js.map +1 -0
  32. package/dist/{chunk-ZA43LPRM.js → chunk-KIYUUSPK.js} +2 -2
  33. package/dist/{chunk-V74N7D6Q.js → chunk-KOWGILCN.js} +24 -15
  34. package/dist/chunk-KOWGILCN.js.map +1 -0
  35. package/dist/{chunk-WWVD5DR5.js → chunk-M3QDKKDF.js} +2 -8
  36. package/dist/chunk-M3QDKKDF.js.map +1 -0
  37. package/dist/{chunk-FTDZAKZW.js → chunk-NQPYMUDF.js} +7 -5
  38. package/dist/{chunk-FTDZAKZW.js.map → chunk-NQPYMUDF.js.map} +1 -1
  39. package/dist/{chunk-XP3ASVGJ.js → chunk-NW4SE5XW.js} +2 -2
  40. package/dist/{chunk-KDY5N6J4.js → chunk-OPZ2LVS2.js} +1 -22
  41. package/dist/{chunk-KDY5N6J4.js.map → chunk-OPZ2LVS2.js.map} +1 -1
  42. package/dist/{chunk-5XZWTFGF.js → chunk-PLIXVF7B.js} +3 -3
  43. package/dist/chunk-PLIXVF7B.js.map +1 -0
  44. package/dist/{chunk-Y7YIAWPW.js → chunk-SGHIGTVZ.js} +1 -11
  45. package/dist/{chunk-Y7YIAWPW.js.map → chunk-SGHIGTVZ.js.map} +1 -1
  46. package/dist/{chunk-UL6Q5HDP.js → chunk-TBUKJKY6.js} +3 -25
  47. package/dist/chunk-TBUKJKY6.js.map +1 -0
  48. package/dist/chunk-VFDUKGRZ.js +155 -0
  49. package/dist/chunk-VFDUKGRZ.js.map +1 -0
  50. package/dist/chunk-VT3H43QA.js +288 -0
  51. package/dist/chunk-VT3H43QA.js.map +1 -0
  52. package/dist/chunk-W26PHBME.js +309 -0
  53. package/dist/chunk-W26PHBME.js.map +1 -0
  54. package/dist/components-BANNjAZP.d.ts +30 -0
  55. package/dist/cooldown.d.ts +2 -2
  56. package/dist/cooldown.js +1 -0
  57. package/dist/coordinators/boundary-ricochet-3d.d.ts +4 -4
  58. package/dist/coordinators/boundary-ricochet-3d.js +1 -0
  59. package/dist/coordinators/boundary-ricochet.d.ts +4 -4
  60. package/dist/coordinators/boundary-ricochet.js +3 -2
  61. package/dist/coordinators/first-person-shooter.js +1 -0
  62. package/dist/coordinators/multidirectional-space-shooter.d.ts +3 -3
  63. package/dist/coordinators/multidirectional-space-shooter.js +5 -3
  64. package/dist/coordinators/top-down-shooter.d.ts +3 -3
  65. package/dist/coordinators/top-down-shooter.js +5 -3
  66. package/dist/core.d.ts +288 -8
  67. package/dist/core.js +492 -19
  68. package/dist/core.js.map +1 -1
  69. package/dist/destructible-3d.d.ts +32 -4
  70. package/dist/destructible-3d.js +2 -1
  71. package/dist/destructible-prebake.js +1 -0
  72. package/dist/{entity-types-CmtQ-IBp.d.ts → entity-types-DhfsZbSK.d.ts} +5 -3
  73. package/dist/first-person.d.ts +27 -38
  74. package/dist/first-person.js +8 -7
  75. package/dist/index.d.ts +14 -15
  76. package/dist/index.js +37 -52
  77. package/dist/jumper-2d.d.ts +3 -17
  78. package/dist/jumper-2d.js +4 -8
  79. package/dist/jumper-3d.d.ts +5 -39
  80. package/dist/jumper-3d.js +5 -9
  81. package/dist/{moveable-BLTHO7Jq.d.ts → moveable-XhzWPAw5.d.ts} +21 -4
  82. package/dist/particle-emitter/presets.js +1 -0
  83. package/dist/particle-emitter.d.ts +3 -3
  84. package/dist/particle-emitter.js +3 -2
  85. package/dist/platformer-2d.d.ts +13 -82
  86. package/dist/platformer-2d.js +4 -4
  87. package/dist/platformer-3d.d.ts +13 -78
  88. package/dist/platformer-3d.js +4 -4
  89. package/dist/ricochet-2d.d.ts +3 -3
  90. package/dist/ricochet-2d.js +4 -3
  91. package/dist/ricochet-3d.d.ts +3 -3
  92. package/dist/ricochet-3d.js +4 -3
  93. package/dist/runtime-2d.d.ts +2 -2
  94. package/dist/runtime-2d.js +1 -0
  95. package/dist/runtime-2d.js.map +1 -1
  96. package/dist/screen-visibility.d.ts +2 -2
  97. package/dist/screen-visibility.js +1 -0
  98. package/dist/screen-wrap.d.ts +2 -2
  99. package/dist/screen-wrap.js +4 -3
  100. package/dist/shooter-2d.d.ts +3 -3
  101. package/dist/shooter-2d.js +4 -3
  102. package/dist/thruster.d.ts +5 -34
  103. package/dist/thruster.js +4 -6
  104. package/dist/top-down-movement.d.ts +9 -27
  105. package/dist/top-down-movement.js +6 -6
  106. package/dist/{vector-Bm65-FOG.d.ts → vector-DjhLUrak.d.ts} +2 -4
  107. package/dist/world-boundary-2d.d.ts +2 -2
  108. package/dist/world-boundary-2d.js +5 -4
  109. package/dist/world-boundary-3d.d.ts +2 -2
  110. package/dist/world-boundary-3d.js +4 -3
  111. package/package.json +4 -3
  112. package/dist/behavior-system-DSNek0W9.d.ts +0 -483
  113. package/dist/chunk-4URF65BR.js +0 -44
  114. package/dist/chunk-4URF65BR.js.map +0 -1
  115. package/dist/chunk-4V7TIRO2.js +0 -44
  116. package/dist/chunk-4V7TIRO2.js.map +0 -1
  117. package/dist/chunk-5XZWTFGF.js.map +0 -1
  118. package/dist/chunk-64HKCSXD.js.map +0 -1
  119. package/dist/chunk-BXP4K7RF.js.map +0 -1
  120. package/dist/chunk-FRJDQM23.js +0 -506
  121. package/dist/chunk-FRJDQM23.js.map +0 -1
  122. package/dist/chunk-GFARAJV2.js.map +0 -1
  123. package/dist/chunk-GTLA6LOJ.js +0 -400
  124. package/dist/chunk-GTLA6LOJ.js.map +0 -1
  125. package/dist/chunk-HNESASBB.js.map +0 -1
  126. package/dist/chunk-JXMF4NUI.js +0 -309
  127. package/dist/chunk-JXMF4NUI.js.map +0 -1
  128. package/dist/chunk-MJFMNRMZ.js +0 -240
  129. package/dist/chunk-MJFMNRMZ.js.map +0 -1
  130. package/dist/chunk-OTLSUYQQ.js +0 -29
  131. package/dist/chunk-OTLSUYQQ.js.map +0 -1
  132. package/dist/chunk-PWF757B6.js.map +0 -1
  133. package/dist/chunk-RONH2KDI.js +0 -455
  134. package/dist/chunk-RONH2KDI.js.map +0 -1
  135. package/dist/chunk-RTRFJVCZ.js +0 -454
  136. package/dist/chunk-RTRFJVCZ.js.map +0 -1
  137. package/dist/chunk-UL6Q5HDP.js.map +0 -1
  138. package/dist/chunk-V74N7D6Q.js.map +0 -1
  139. package/dist/chunk-WWVD5DR5.js.map +0 -1
  140. package/dist/chunk-WXXXJ22R.js.map +0 -1
  141. package/dist/chunk-XLUJDKCT.js.map +0 -1
  142. package/dist/components-BWG1GkZA.d.ts +0 -20
  143. package/dist/use-behavior-h9-T5FSv.d.ts +0 -13
  144. /package/dist/{chunk-5SM5SH5O.js.map → chunk-7JLWZXPA.js.map} +0 -0
  145. /package/dist/{chunk-ZA43LPRM.js.map → chunk-KIYUUSPK.js.map} +0 -0
  146. /package/dist/{chunk-XP3ASVGJ.js.map → chunk-NW4SE5XW.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
2
- import { RigidBody, Collider } from '@dimforge/rapier3d-compat';
3
- import { Z as ZylemWorld, a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
2
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
4
3
  import 'typescript-fsm';
4
+ import '@zylem/runtime';
5
5
 
6
6
  /**
7
7
  * Platformer 3D ECS Components
@@ -188,81 +188,6 @@ declare class Platformer3DFSM {
188
188
  update(input: Platformer3DInputComponent, state: Platformer3DStateComponent): void;
189
189
  }
190
190
 
191
- /**
192
- * Platformer 3D System
193
- *
194
- * Kinematic character controller (N64-style): the controller owns all motion
195
- * and physics is only a collision database.
196
- *
197
- * - The entity's body is converted to `KinematicPositionBased` on first
198
- * update; Rapier never applies forces to it.
199
- * - Each tick, desired displacement (horizontal input + integrated vertical
200
- * velocity) is run through Rapier's `KinematicCharacterController`
201
- * (collide-and-slide with autostep, slope limits, and snap-to-ground) and
202
- * the corrected movement is applied via `setNextKinematicTranslation`.
203
- * - Grounded comes from `controller.computedGrounded()` — no contact-pair or
204
- * raycast probing.
205
- * - Vertical velocity lives in `state.verticalVelocity` (`linvel()` is
206
- * meaningless on kinematic bodies). Jump buffering, coyote time,
207
- * multi-jump, and the jump-cut ramp all operate on that field.
208
- */
209
-
210
- /**
211
- * Entity with platformer components
212
- */
213
- interface Platformer3DEntity {
214
- uuid: string;
215
- body: RigidBody;
216
- collider?: Collider | null;
217
- platformer: Platformer3DMovementComponent;
218
- $platformer: Platformer3DInputComponent;
219
- platformerState: Platformer3DStateComponent;
220
- }
221
- /**
222
- * Platformer 3D movement system.
223
- *
224
- * Core kinematic controller for 3D platformer movement. Requires a live
225
- * `ZylemWorld` with the raw Rapier `World` exposed on `.world` — without it
226
- * the system is a no-op (the WASM fast path handles that case upstream).
227
- */
228
- declare class Platformer3DSystem {
229
- private world;
230
- /** Per-entity character controllers, keyed by entity uuid. */
231
- private controllers;
232
- constructor(world: ZylemWorld | null);
233
- /**
234
- * One-time per-entity physics setup: convert the body to a
235
- * position-based kinematic body and create its character controller.
236
- * Done lazily on the first update because the body isn't always
237
- * available at construction time.
238
- */
239
- private ensurePhysicsConfigured;
240
- /**
241
- * Handle jump logic with multi-jump, coyote time, buffering, and jump-cut
242
- * ramp. All vertical motion is written to `state.verticalVelocity`.
243
- */
244
- private handleJump;
245
- /**
246
- * Integrate gravity into `state.verticalVelocity`.
247
- *
248
- * While grounded (and not on the jump frame) vertical velocity is held at
249
- * a small constant downward speed so the controller stays pressed into
250
- * the ground. Skipped entirely on the frame a jump was applied — the
251
- * grounded flag is still stale-true then and would clobber the jump.
252
- */
253
- private applyGravity;
254
- /**
255
- * Update entity state from the controller's grounded result.
256
- */
257
- private updateState;
258
- /**
259
- * Update one platformer entity. Invoked per linked entity by the
260
- * Platformer3DBehaviorSystem adapter.
261
- */
262
- updateEntity(entity: Platformer3DEntity, delta: number): void;
263
- destroy(): void;
264
- }
265
-
266
191
  /**
267
192
  * Platformer behavior options (typed for entity.use() autocomplete)
268
193
  */
@@ -291,6 +216,16 @@ interface Platformer3DBehaviorOptions {
291
216
  /** Character controller collision offset (default: 0.05) */
292
217
  characterOffset?: number;
293
218
  }
219
+ /**
220
+ * Entity with platformer components (input written by the game; the wasm
221
+ * runtime owns the kinematic character controller and FSM).
222
+ */
223
+ interface Platformer3DEntity {
224
+ uuid: string;
225
+ platformer: Platformer3DMovementComponent;
226
+ $platformer: Platformer3DInputComponent;
227
+ platformerState: Platformer3DStateComponent;
228
+ }
294
229
  /**
295
230
  * Platformer3DBehavior - typed descriptor for 3D platformer movement
296
231
  *
@@ -331,4 +266,4 @@ declare const Platformer3DBehavior: BehaviorDescriptor<Platformer3DBehaviorOptio
331
266
  onPlatformCollision: (ctx: PlatformerCollisionContext) => void;
332
267
  }, Platformer3DEntity>;
333
268
 
334
- export { Platformer3DBehavior, type Platformer3DBehaviorOptions, type Platformer3DContext, type Platformer3DEntity, Platformer3DEvent, Platformer3DFSM, type Platformer3DInputComponent, type Platformer3DMovementComponent, Platformer3DState, type Platformer3DStateComponent, Platformer3DSystem, type PlatformerCollisionContext, createPlatformer3DInputComponent, createPlatformer3DMovementComponent, createPlatformer3DStateComponent };
269
+ export { Platformer3DBehavior, type Platformer3DBehaviorOptions, type Platformer3DContext, type Platformer3DEntity, Platformer3DEvent, Platformer3DFSM, type Platformer3DInputComponent, type Platformer3DMovementComponent, Platformer3DState, type Platformer3DStateComponent, type PlatformerCollisionContext, createPlatformer3DInputComponent, createPlatformer3DMovementComponent, createPlatformer3DStateComponent };
@@ -3,19 +3,19 @@ import {
3
3
  Platformer3DEvent,
4
4
  Platformer3DFSM,
5
5
  Platformer3DState,
6
- Platformer3DSystem,
7
6
  createPlatformer3DInputComponent,
8
7
  createPlatformer3DMovementComponent,
9
8
  createPlatformer3DStateComponent
10
- } from "./chunk-FRJDQM23.js";
11
- import "./chunk-4URF65BR.js";
9
+ } from "./chunk-W26PHBME.js";
10
+ import "./chunk-AS3HR7AS.js";
11
+ import "./chunk-E4X4YJZB.js";
12
12
  import "./chunk-EZNCCO4L.js";
13
+ import "./chunk-5WRI5ZAA.js";
13
14
  export {
14
15
  Platformer3DBehavior,
15
16
  Platformer3DEvent,
16
17
  Platformer3DFSM,
17
18
  Platformer3DState,
18
- Platformer3DSystem,
19
19
  createPlatformer3DInputComponent,
20
20
  createPlatformer3DMovementComponent,
21
21
  createPlatformer3DStateComponent
@@ -1,9 +1,9 @@
1
- import { B as BaseEntityInterface } from './entity-types-CmtQ-IBp.js';
1
+ import { B as BaseEntityInterface } from './entity-types-DhfsZbSK.js';
2
2
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
3
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
3
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
4
4
  import 'three';
5
- import '@dimforge/rapier3d-compat';
6
5
  import 'typescript-fsm';
6
+ import '@zylem/runtime';
7
7
 
8
8
  /**
9
9
  * Ricochet2DFSM
@@ -3,10 +3,11 @@ import {
3
3
  Ricochet2DEvent,
4
4
  Ricochet2DFSM,
5
5
  Ricochet2DState
6
- } from "./chunk-V74N7D6Q.js";
7
- import "./chunk-4V7TIRO2.js";
8
- import "./chunk-4URF65BR.js";
6
+ } from "./chunk-KOWGILCN.js";
7
+ import "./chunk-AS3HR7AS.js";
8
+ import "./chunk-E4X4YJZB.js";
9
9
  import "./chunk-EZNCCO4L.js";
10
+ import "./chunk-5WRI5ZAA.js";
10
11
  export {
11
12
  Ricochet2DBehavior,
12
13
  Ricochet2DEvent,
@@ -1,9 +1,9 @@
1
1
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
2
- import { B as BaseEntityInterface } from './entity-types-CmtQ-IBp.js';
3
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
2
+ import { B as BaseEntityInterface } from './entity-types-DhfsZbSK.js';
3
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
4
4
  import 'typescript-fsm';
5
5
  import 'three';
6
- import '@dimforge/rapier3d-compat';
6
+ import '@zylem/runtime';
7
7
 
8
8
  interface Ricochet3DResult {
9
9
  velocity: {
@@ -3,10 +3,11 @@ import {
3
3
  Ricochet3DEvent,
4
4
  Ricochet3DFSM,
5
5
  Ricochet3DState
6
- } from "./chunk-XLUJDKCT.js";
7
- import "./chunk-4V7TIRO2.js";
8
- import "./chunk-4URF65BR.js";
6
+ } from "./chunk-5UMCWV5A.js";
7
+ import "./chunk-AS3HR7AS.js";
8
+ import "./chunk-E4X4YJZB.js";
9
9
  import "./chunk-EZNCCO4L.js";
10
+ import "./chunk-5WRI5ZAA.js";
10
11
  export {
11
12
  Ricochet3DBehavior,
12
13
  Ricochet3DEvent,
@@ -1,5 +1,5 @@
1
- import { a as BehaviorDescriptor, d as BehaviorRef } from './behavior-system-DSNek0W9.js';
2
- import '@dimforge/rapier3d-compat';
1
+ import { a as BehaviorDescriptor, d as BehaviorRef } from './behavior-system-CeJXzNvr.js';
2
+ import '@zylem/runtime';
3
3
 
4
4
  interface RuntimeDynamicCircleBody2DOptions {
5
5
  initialVelocity: readonly [number, number];
@@ -1,6 +1,7 @@
1
1
  import {
2
2
  defineBehavior
3
3
  } from "./chunk-EZNCCO4L.js";
4
+ import "./chunk-5WRI5ZAA.js";
4
5
 
5
6
  // src/lib/behaviors/runtime-2d/runtime-2d.descriptor.ts
6
7
  var runtimeNoopSystemFactory = () => ({
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/behaviors/runtime-2d/runtime-2d.descriptor.ts"],"sourcesContent":["/**\n * Runtime 2D Behavior Descriptors\n *\n * Marker descriptors for entities managed entirely by the wasm gameplay-2d\n * runtime (paddle-and-ball style games, boundaries, trigger regions, goal\n * zones). The descriptors carry configuration and event wiring only — all\n * per-frame simulation happens inside the wasm runtime, so their systems are\n * no-ops. The host runtime binds concrete callbacks onto the behavior refs\n * (see {@link bindRuntimeDynamicCircleBody2DHandle} and the emit helpers).\n */\n\nimport {\n\tdefineBehavior,\n\ttype BehaviorRef,\n} from '../behavior-descriptor';\nimport type { BehaviorSystem } from '../behavior-system';\n\nexport interface RuntimeDynamicCircleBody2DOptions {\n\tinitialVelocity: readonly [number, number];\n}\n\nexport interface RuntimeDynamicCircleBody2DHandle {\n\tsetRuntimePosition(x: number, y: number, z?: number): void;\n\tsetRuntimeVelocity(x: number, y: number): void;\n\tgetRuntimePosition(): { x: number; y: number; z: number } | null;\n}\n\nexport interface RuntimePlayerInput2DOptions {\n\tplayer: 'p1' | 'p2';\n\tspeed: number;\n}\n\nexport interface RuntimeBoundary2DOptions {\n\tboundaries: {\n\t\tleft: number;\n\t\tright: number;\n\t\tbottom: number;\n\t\ttop: number;\n\t};\n}\n\nexport interface RuntimeRicochet2DOptions {\n\tminSpeed: number;\n\tmaxSpeed: number;\n\tspeedMultiplier: number;\n\treflectionMode: 'simple' | 'angled';\n\tmaxAngleDeg: number;\n}\n\nexport interface RuntimeRicochet2DEvent {\n\tkind: 'wall' | 'paddle';\n}\n\nexport interface RuntimeRicochet2DHandle {\n\tonRicochet(callback: (event: RuntimeRicochet2DEvent) => void): () => void;\n}\n\n/** Registers a gameplay2d trigger AABB (sensor); wasm reports overlap via {@link emitRuntimeTriggerRegionEnter}. */\nexport interface RuntimeTriggerRegion2DOptions {\n\ttriggerId: number;\n\thalfExtents: readonly [number, number];\n}\n\nexport interface RuntimeTriggerRegion2DEvent {\n\ttriggerId: number;\n}\n\nexport interface RuntimeTriggerRegion2DHandle {\n\tonRegionEnter(callback: (event: RuntimeTriggerRegion2DEvent) => void): () => void;\n}\n\nexport interface RuntimeGoalZone2DOptions {\n\tscorer: 'p1' | 'p2';\n}\n\nexport interface RuntimeGoalZone2DEvent {\n\tscorer: 'p1' | 'p2';\n}\n\nexport interface RuntimeGoalZone2DHandle {\n\tonGoal(callback: (event: RuntimeGoalZone2DEvent) => void): () => void;\n}\n\nconst runtimeNoopSystemFactory = (): BehaviorSystem => ({\n\tupdate(_ecs: unknown, _delta: number) {},\n});\n\nexport const RUNTIME_DYNAMIC_CIRCLE_BODY_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-dynamic-circle-body-2d');\nexport const RUNTIME_PLAYER_INPUT_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-player-input-2d');\nexport const RUNTIME_BOUNDARY_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-boundary-2d');\nexport const RUNTIME_RICOCHET_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-ricochet-2d');\nexport const RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-trigger-region-2d');\nexport const RUNTIME_GOAL_ZONE_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-goal-zone-2d');\n\nconst RICOCHET_LISTENERS = Symbol('runtime-ricochet-listeners');\nconst TRIGGER_REGION_LISTENERS = Symbol('runtime-trigger-region-listeners');\nconst GOAL_LISTENERS = Symbol('runtime-goal-listeners');\nconst CIRCLE_BODY_SET_POSITION = Symbol('runtime-circle-body-set-position');\nconst CIRCLE_BODY_SET_VELOCITY = Symbol('runtime-circle-body-set-velocity');\nconst CIRCLE_BODY_GET_POSITION = Symbol('runtime-circle-body-get-position');\n\nfunction getListeners<E>(ref: BehaviorRef<any>, slot: symbol): Array<(event: E) => void> {\n\tlet listeners = (ref as any)[slot] as Array<(event: E) => void> | undefined;\n\tif (!listeners) {\n\t\tlisteners = [];\n\t\t(ref as any)[slot] = listeners;\n\t}\n\treturn listeners;\n}\n\nfunction addListener<E>(ref: BehaviorRef<any>, slot: symbol, callback: (event: E) => void): () => void {\n\tconst listeners = getListeners<E>(ref, slot);\n\tlisteners.push(callback);\n\treturn () => {\n\t\tconst index = listeners.indexOf(callback);\n\t\tif (index >= 0) {\n\t\t\tlisteners.splice(index, 1);\n\t\t}\n\t};\n}\n\nfunction emit<E>(ref: BehaviorRef<any>, slot: symbol, event: E): void {\n\tconst listeners = (ref as any)[slot] as Array<(event: E) => void> | undefined;\n\tif (!listeners) return;\n\tfor (const listener of listeners) {\n\t\tlistener(event);\n\t}\n}\n\nexport const RuntimeDynamicCircleBody2DBehavior = defineBehavior<\n\tRuntimeDynamicCircleBody2DOptions,\n\tRuntimeDynamicCircleBody2DHandle\n>({\n\tname: 'runtime-dynamic-circle-body-2d',\n\tdefaultOptions: {\n\t\tinitialVelocity: [0, 0] as [number, number],\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeDynamicCircleBody2DOptions>) => ({\n\t\tsetRuntimePosition(x: number, y: number, z: number = 0): void {\n\t\t\tconst callback = (ref as any)[CIRCLE_BODY_SET_POSITION] as\n\t\t\t\t| ((x: number, y: number, z: number) => void)\n\t\t\t\t| undefined;\n\t\t\tcallback?.(x, y, z);\n\t\t},\n\t\tsetRuntimeVelocity(x: number, y: number): void {\n\t\t\tconst callback = (ref as any)[CIRCLE_BODY_SET_VELOCITY] as\n\t\t\t\t| ((x: number, y: number) => void)\n\t\t\t\t| undefined;\n\t\t\tcallback?.(x, y);\n\t\t},\n\t\tgetRuntimePosition(): { x: number; y: number; z: number } | null {\n\t\t\tconst callback = (ref as any)[CIRCLE_BODY_GET_POSITION] as\n\t\t\t\t| (() => { x: number; y: number; z: number } | null)\n\t\t\t\t| undefined;\n\t\t\treturn callback?.() ?? null;\n\t\t},\n\t}),\n});\n\nexport const RuntimePlayerInput2DBehavior = defineBehavior<RuntimePlayerInput2DOptions>({\n\tname: 'runtime-player-input-2d',\n\tdefaultOptions: {\n\t\tplayer: 'p1',\n\t\tspeed: 5,\n\t} as RuntimePlayerInput2DOptions,\n\tsystemFactory: runtimeNoopSystemFactory,\n});\n\nexport const RuntimeBoundary2DBehavior = defineBehavior({\n\tname: 'runtime-boundary-2d',\n\tdefaultOptions: {\n\t\tboundaries: {\n\t\t\tleft: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\ttop: 0,\n\t\t},\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n});\n\nexport const RuntimeRicochet2DBehavior = defineBehavior<\n\tRuntimeRicochet2DOptions,\n\tRuntimeRicochet2DHandle\n>({\n\tname: 'runtime-ricochet-2d',\n\tdefaultOptions: {\n\t\tminSpeed: 2,\n\t\tmaxSpeed: 20,\n\t\tspeedMultiplier: 1.05,\n\t\treflectionMode: 'angled' as const,\n\t\tmaxAngleDeg: 60,\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeRicochet2DOptions>) => ({\n\t\tonRicochet: (callback: (event: RuntimeRicochet2DEvent) => void) =>\n\t\t\taddListener(ref, RICOCHET_LISTENERS, callback),\n\t}),\n});\n\nexport const RuntimeTriggerRegion2DBehavior = defineBehavior<\n\tRuntimeTriggerRegion2DOptions,\n\tRuntimeTriggerRegion2DHandle\n>({\n\tname: 'runtime-trigger-region-2d',\n\tdefaultOptions: {\n\t\ttriggerId: 0,\n\t\thalfExtents: [0.5, 2.5] as [number, number],\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeTriggerRegion2DOptions>) => ({\n\t\tonRegionEnter: (callback: (event: RuntimeTriggerRegion2DEvent) => void) =>\n\t\t\taddListener(ref, TRIGGER_REGION_LISTENERS, callback),\n\t}),\n});\n\nexport const RuntimeGoalZone2DBehavior = defineBehavior<\n\tRuntimeGoalZone2DOptions,\n\tRuntimeGoalZone2DHandle\n>({\n\tname: 'runtime-goal-zone-2d',\n\tdefaultOptions: {\n\t\tscorer: 'p1',\n\t} as RuntimeGoalZone2DOptions,\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeGoalZone2DOptions>) => ({\n\t\tonGoal: (callback: (event: RuntimeGoalZone2DEvent) => void) =>\n\t\t\taddListener(ref, GOAL_LISTENERS, callback),\n\t}),\n});\n\nexport function emitRuntimeRicochet(\n\tref: BehaviorRef<RuntimeRicochet2DOptions>,\n\tevent: RuntimeRicochet2DEvent,\n): void {\n\temit(ref, RICOCHET_LISTENERS, event);\n}\n\nexport function emitRuntimeTriggerRegionEnter(\n\tref: BehaviorRef<RuntimeTriggerRegion2DOptions>,\n\tevent: RuntimeTriggerRegion2DEvent,\n): void {\n\temit(ref, TRIGGER_REGION_LISTENERS, event);\n}\n\nexport function emitRuntimeGoal(\n\tref: BehaviorRef<RuntimeGoalZone2DOptions>,\n\tevent: RuntimeGoalZone2DEvent,\n): void {\n\temit(ref, GOAL_LISTENERS, event);\n}\n\nexport function bindRuntimeDynamicCircleBody2DHandle(\n\tref: BehaviorRef<RuntimeDynamicCircleBody2DOptions>,\n\tcontrols: {\n\t\tsetPosition: (x: number, y: number, z: number) => void;\n\t\tsetVelocity: (x: number, y: number) => void;\n\t\tgetPosition: () => { x: number; y: number; z: number } | null;\n\t},\n): void {\n\t(ref as any)[CIRCLE_BODY_SET_POSITION] = controls.setPosition;\n\t(ref as any)[CIRCLE_BODY_SET_VELOCITY] = controls.setVelocity;\n\t(ref as any)[CIRCLE_BODY_GET_POSITION] = controls.getPosition;\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/lib/behaviors/runtime-2d/runtime-2d.descriptor.ts"],"sourcesContent":["/**\n * Runtime 2D Behavior Descriptors\n *\n * Marker descriptors for entities managed entirely by the wasm gameplay-2d\n * runtime (paddle-and-ball style games, boundaries, trigger regions, goal\n * zones). The descriptors carry configuration and event wiring only — all\n * per-frame simulation happens inside the wasm runtime, so their systems are\n * no-ops. The host runtime binds concrete callbacks onto the behavior refs\n * (see {@link bindRuntimeDynamicCircleBody2DHandle} and the emit helpers).\n */\n\nimport {\n\tdefineBehavior,\n\ttype BehaviorRef,\n} from '../behavior-descriptor';\nimport type { BehaviorSystem } from '../behavior-system';\n\nexport interface RuntimeDynamicCircleBody2DOptions {\n\tinitialVelocity: readonly [number, number];\n}\n\nexport interface RuntimeDynamicCircleBody2DHandle {\n\tsetRuntimePosition(x: number, y: number, z?: number): void;\n\tsetRuntimeVelocity(x: number, y: number): void;\n\tgetRuntimePosition(): { x: number; y: number; z: number } | null;\n}\n\nexport interface RuntimePlayerInput2DOptions {\n\tplayer: 'p1' | 'p2';\n\tspeed: number;\n}\n\nexport interface RuntimeBoundary2DOptions {\n\tboundaries: {\n\t\tleft: number;\n\t\tright: number;\n\t\tbottom: number;\n\t\ttop: number;\n\t};\n}\n\nexport interface RuntimeRicochet2DOptions {\n\tminSpeed: number;\n\tmaxSpeed: number;\n\tspeedMultiplier: number;\n\treflectionMode: 'simple' | 'angled';\n\tmaxAngleDeg: number;\n}\n\nexport interface RuntimeRicochet2DEvent {\n\tkind: 'wall' | 'paddle';\n}\n\nexport interface RuntimeRicochet2DHandle {\n\tonRicochet(callback: (event: RuntimeRicochet2DEvent) => void): () => void;\n}\n\n/** Registers a gameplay2d trigger AABB (sensor); wasm reports overlap via {@link emitRuntimeTriggerRegionEnter}. */\nexport interface RuntimeTriggerRegion2DOptions {\n\ttriggerId: number;\n\thalfExtents: readonly [number, number];\n}\n\nexport interface RuntimeTriggerRegion2DEvent {\n\ttriggerId: number;\n}\n\nexport interface RuntimeTriggerRegion2DHandle {\n\tonRegionEnter(callback: (event: RuntimeTriggerRegion2DEvent) => void): () => void;\n}\n\nexport interface RuntimeGoalZone2DOptions {\n\tscorer: 'p1' | 'p2';\n}\n\nexport interface RuntimeGoalZone2DEvent {\n\tscorer: 'p1' | 'p2';\n}\n\nexport interface RuntimeGoalZone2DHandle {\n\tonGoal(callback: (event: RuntimeGoalZone2DEvent) => void): () => void;\n}\n\nconst runtimeNoopSystemFactory = (): BehaviorSystem => ({\n\tupdate(_ecs: unknown, _delta: number) {},\n});\n\nexport const RUNTIME_DYNAMIC_CIRCLE_BODY_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-dynamic-circle-body-2d');\nexport const RUNTIME_PLAYER_INPUT_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-player-input-2d');\nexport const RUNTIME_BOUNDARY_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-boundary-2d');\nexport const RUNTIME_RICOCHET_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-ricochet-2d');\nexport const RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-trigger-region-2d');\nexport const RUNTIME_GOAL_ZONE_2D_BEHAVIOR_KEY = Symbol.for('zylem:behavior:runtime-goal-zone-2d');\n\nconst RICOCHET_LISTENERS = Symbol('runtime-ricochet-listeners');\nconst TRIGGER_REGION_LISTENERS = Symbol('runtime-trigger-region-listeners');\nconst GOAL_LISTENERS = Symbol('runtime-goal-listeners');\nconst CIRCLE_BODY_SET_POSITION = Symbol('runtime-circle-body-set-position');\nconst CIRCLE_BODY_SET_VELOCITY = Symbol('runtime-circle-body-set-velocity');\nconst CIRCLE_BODY_GET_POSITION = Symbol('runtime-circle-body-get-position');\n\nfunction getListeners<E>(ref: BehaviorRef<any>, slot: symbol): Array<(event: E) => void> {\n\tlet listeners = (ref as any)[slot] as Array<(event: E) => void> | undefined;\n\tif (!listeners) {\n\t\tlisteners = [];\n\t\t(ref as any)[slot] = listeners;\n\t}\n\treturn listeners;\n}\n\nfunction addListener<E>(ref: BehaviorRef<any>, slot: symbol, callback: (event: E) => void): () => void {\n\tconst listeners = getListeners<E>(ref, slot);\n\tlisteners.push(callback);\n\treturn () => {\n\t\tconst index = listeners.indexOf(callback);\n\t\tif (index >= 0) {\n\t\t\tlisteners.splice(index, 1);\n\t\t}\n\t};\n}\n\nfunction emit<E>(ref: BehaviorRef<any>, slot: symbol, event: E): void {\n\tconst listeners = (ref as any)[slot] as Array<(event: E) => void> | undefined;\n\tif (!listeners) return;\n\tfor (const listener of listeners) {\n\t\tlistener(event);\n\t}\n}\n\nexport const RuntimeDynamicCircleBody2DBehavior = defineBehavior<\n\tRuntimeDynamicCircleBody2DOptions,\n\tRuntimeDynamicCircleBody2DHandle\n>({\n\tname: 'runtime-dynamic-circle-body-2d',\n\tdefaultOptions: {\n\t\tinitialVelocity: [0, 0] as [number, number],\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeDynamicCircleBody2DOptions>) => ({\n\t\tsetRuntimePosition(x: number, y: number, z: number = 0): void {\n\t\t\tconst callback = (ref as any)[CIRCLE_BODY_SET_POSITION] as\n\t\t\t\t| ((x: number, y: number, z: number) => void)\n\t\t\t\t| undefined;\n\t\t\tcallback?.(x, y, z);\n\t\t},\n\t\tsetRuntimeVelocity(x: number, y: number): void {\n\t\t\tconst callback = (ref as any)[CIRCLE_BODY_SET_VELOCITY] as\n\t\t\t\t| ((x: number, y: number) => void)\n\t\t\t\t| undefined;\n\t\t\tcallback?.(x, y);\n\t\t},\n\t\tgetRuntimePosition(): { x: number; y: number; z: number } | null {\n\t\t\tconst callback = (ref as any)[CIRCLE_BODY_GET_POSITION] as\n\t\t\t\t| (() => { x: number; y: number; z: number } | null)\n\t\t\t\t| undefined;\n\t\t\treturn callback?.() ?? null;\n\t\t},\n\t}),\n});\n\nexport const RuntimePlayerInput2DBehavior = defineBehavior<RuntimePlayerInput2DOptions>({\n\tname: 'runtime-player-input-2d',\n\tdefaultOptions: {\n\t\tplayer: 'p1',\n\t\tspeed: 5,\n\t} as RuntimePlayerInput2DOptions,\n\tsystemFactory: runtimeNoopSystemFactory,\n});\n\nexport const RuntimeBoundary2DBehavior = defineBehavior({\n\tname: 'runtime-boundary-2d',\n\tdefaultOptions: {\n\t\tboundaries: {\n\t\t\tleft: 0,\n\t\t\tright: 0,\n\t\t\tbottom: 0,\n\t\t\ttop: 0,\n\t\t},\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n});\n\nexport const RuntimeRicochet2DBehavior = defineBehavior<\n\tRuntimeRicochet2DOptions,\n\tRuntimeRicochet2DHandle\n>({\n\tname: 'runtime-ricochet-2d',\n\tdefaultOptions: {\n\t\tminSpeed: 2,\n\t\tmaxSpeed: 20,\n\t\tspeedMultiplier: 1.05,\n\t\treflectionMode: 'angled' as const,\n\t\tmaxAngleDeg: 60,\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeRicochet2DOptions>) => ({\n\t\tonRicochet: (callback: (event: RuntimeRicochet2DEvent) => void) =>\n\t\t\taddListener(ref, RICOCHET_LISTENERS, callback),\n\t}),\n});\n\nexport const RuntimeTriggerRegion2DBehavior = defineBehavior<\n\tRuntimeTriggerRegion2DOptions,\n\tRuntimeTriggerRegion2DHandle\n>({\n\tname: 'runtime-trigger-region-2d',\n\tdefaultOptions: {\n\t\ttriggerId: 0,\n\t\thalfExtents: [0.5, 2.5] as [number, number],\n\t},\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeTriggerRegion2DOptions>) => ({\n\t\tonRegionEnter: (callback: (event: RuntimeTriggerRegion2DEvent) => void) =>\n\t\t\taddListener(ref, TRIGGER_REGION_LISTENERS, callback),\n\t}),\n});\n\nexport const RuntimeGoalZone2DBehavior = defineBehavior<\n\tRuntimeGoalZone2DOptions,\n\tRuntimeGoalZone2DHandle\n>({\n\tname: 'runtime-goal-zone-2d',\n\tdefaultOptions: {\n\t\tscorer: 'p1',\n\t} as RuntimeGoalZone2DOptions,\n\tsystemFactory: runtimeNoopSystemFactory,\n\tcreateHandle: (ref: BehaviorRef<RuntimeGoalZone2DOptions>) => ({\n\t\tonGoal: (callback: (event: RuntimeGoalZone2DEvent) => void) =>\n\t\t\taddListener(ref, GOAL_LISTENERS, callback),\n\t}),\n});\n\nexport function emitRuntimeRicochet(\n\tref: BehaviorRef<RuntimeRicochet2DOptions>,\n\tevent: RuntimeRicochet2DEvent,\n): void {\n\temit(ref, RICOCHET_LISTENERS, event);\n}\n\nexport function emitRuntimeTriggerRegionEnter(\n\tref: BehaviorRef<RuntimeTriggerRegion2DOptions>,\n\tevent: RuntimeTriggerRegion2DEvent,\n): void {\n\temit(ref, TRIGGER_REGION_LISTENERS, event);\n}\n\nexport function emitRuntimeGoal(\n\tref: BehaviorRef<RuntimeGoalZone2DOptions>,\n\tevent: RuntimeGoalZone2DEvent,\n): void {\n\temit(ref, GOAL_LISTENERS, event);\n}\n\nexport function bindRuntimeDynamicCircleBody2DHandle(\n\tref: BehaviorRef<RuntimeDynamicCircleBody2DOptions>,\n\tcontrols: {\n\t\tsetPosition: (x: number, y: number, z: number) => void;\n\t\tsetVelocity: (x: number, y: number) => void;\n\t\tgetPosition: () => { x: number; y: number; z: number } | null;\n\t},\n): void {\n\t(ref as any)[CIRCLE_BODY_SET_POSITION] = controls.setPosition;\n\t(ref as any)[CIRCLE_BODY_SET_VELOCITY] = controls.setVelocity;\n\t(ref as any)[CIRCLE_BODY_GET_POSITION] = controls.getPosition;\n}\n"],"mappings":"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","names":[]}
@@ -1,5 +1,5 @@
1
- import { a as BehaviorDescriptor, G as GameEntity } from './behavior-system-DSNek0W9.js';
2
- import '@dimforge/rapier3d-compat';
1
+ import { a as BehaviorDescriptor, G as GameEntity } from './behavior-system-CeJXzNvr.js';
2
+ import '@zylem/runtime';
3
3
 
4
4
  interface ScreenVisibilitySnapshot {
5
5
  initialized: boolean;
@@ -3,6 +3,7 @@ import {
3
3
  ScreenVisibilityFSM
4
4
  } from "./chunk-WOMHL23C.js";
5
5
  import "./chunk-EZNCCO4L.js";
6
+ import "./chunk-5WRI5ZAA.js";
6
7
  export {
7
8
  ScreenVisibilityBehavior,
8
9
  ScreenVisibilityFSM
@@ -1,6 +1,6 @@
1
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
2
2
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
3
- import '@dimforge/rapier3d-compat';
3
+ import '@zylem/runtime';
4
4
  import 'typescript-fsm';
5
5
 
6
6
  /**
@@ -3,10 +3,11 @@ import {
3
3
  ScreenWrapEvent,
4
4
  ScreenWrapFSM,
5
5
  ScreenWrapState
6
- } from "./chunk-GFARAJV2.js";
7
- import "./chunk-KDY5N6J4.js";
8
- import "./chunk-4URF65BR.js";
6
+ } from "./chunk-2PAHQZZD.js";
7
+ import "./chunk-OPZ2LVS2.js";
8
+ import "./chunk-AS3HR7AS.js";
9
9
  import "./chunk-EZNCCO4L.js";
10
+ import "./chunk-5WRI5ZAA.js";
10
11
  export {
11
12
  ScreenWrapBehavior,
12
13
  ScreenWrapEvent,
@@ -1,6 +1,6 @@
1
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
2
- import { i as Vec3Input } from './vector-Bm65-FOG.js';
3
- import '@dimforge/rapier3d-compat';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
2
+ import { i as Vec3Input } from './vector-DjhLUrak.js';
3
+ import '@zylem/runtime';
4
4
  import 'three';
5
5
 
6
6
  interface Shooter2DStateComponent {
@@ -1,10 +1,11 @@
1
1
  import {
2
2
  Shooter2DBehavior,
3
3
  createShooter2DStateComponent
4
- } from "./chunk-5XZWTFGF.js";
5
- import "./chunk-Y7YIAWPW.js";
6
- import "./chunk-WWVD5DR5.js";
4
+ } from "./chunk-PLIXVF7B.js";
5
+ import "./chunk-SGHIGTVZ.js";
6
+ import "./chunk-M3QDKKDF.js";
7
7
  import "./chunk-EZNCCO4L.js";
8
+ import "./chunk-5WRI5ZAA.js";
8
9
  export {
9
10
  Shooter2DBehavior,
10
11
  createShooter2DStateComponent
@@ -1,11 +1,9 @@
1
1
  import { T as ThrusterInputComponent, a as ThrusterMovementComponent } from './components-B29WHGQN.js';
2
2
  export { b as ThrusterStateComponent, c as createThrusterInputComponent, d as createThrusterMovementComponent, e as createThrusterStateComponent } from './components-B29WHGQN.js';
3
3
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
4
- import { Z as ZylemWorld, a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
5
- import { P as PhysicsBodyComponent } from './components-BWG1GkZA.js';
4
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
6
5
  import 'typescript-fsm';
7
- import '@dimforge/rapier3d-compat';
8
- import 'three';
6
+ import '@zylem/runtime';
9
7
 
10
8
  /**
11
9
  * ThrusterFSM
@@ -61,38 +59,13 @@ declare class ThrusterFSM {
61
59
  }
62
60
 
63
61
  /**
64
- * ThrusterSystem
65
- *
66
- * This is the heart of the thruster movement system - a pure, stateless force generator.
67
- * Works identically for player, AI, and replay.
68
- */
69
-
70
- /**
71
- * Entity with thruster components
62
+ * Entity with thruster components (input written by the game, state owned by
63
+ * the wasm runtime).
72
64
  */
73
65
  interface ThrusterEntity {
74
- physics: PhysicsBodyComponent;
75
66
  thruster: ThrusterMovementComponent;
76
67
  $thruster: ThrusterInputComponent;
77
68
  }
78
- /**
79
- * ThrusterSystem - Force generator for thruster-equipped entities
80
- *
81
- * Responsibilities:
82
- * - Query entities with PhysicsBody, ThrusterMovement, and ThrusterInput components
83
- * - Apply velocities based on thrust input (2D mode)
84
- * - Apply angular velocity based on rotation input
85
- */
86
- declare class ThrusterSystem {
87
- private world;
88
- constructor(world: ZylemWorld | null);
89
- /**
90
- * Update a single thruster-enabled entity.
91
- */
92
- updateEntity(gameEntity: any, _dt: number): void;
93
- update(dt: number): void;
94
- }
95
-
96
69
  /**
97
70
  * Thruster behavior options (typed for entity.use() autocomplete)
98
71
  */
@@ -107,8 +80,6 @@ interface ThrusterBehaviorOptions {
107
80
  /**
108
81
  * ThrusterBehavior - typed descriptor for thruster movement.
109
82
  *
110
- * Uses the existing ThrusterSystem under the hood.
111
- *
112
83
  * @example
113
84
  * ```typescript
114
85
  * import { ThrusterBehavior } from "@zylem/game-lib/behavior";
@@ -119,4 +90,4 @@ interface ThrusterBehaviorOptions {
119
90
  */
120
91
  declare const ThrusterBehavior: BehaviorDescriptor<ThrusterBehaviorOptions, Record<string, never>, ThrusterEntity>;
121
92
 
122
- export { type PlayerInput, ThrusterBehavior, type ThrusterBehaviorOptions, type ThrusterEntity, ThrusterEvent, ThrusterFSM, type ThrusterFSMContext, ThrusterInputComponent, ThrusterMovementComponent, ThrusterState, ThrusterSystem };
93
+ export { type PlayerInput, ThrusterBehavior, type ThrusterBehaviorOptions, type ThrusterEntity, ThrusterEvent, ThrusterFSM, type ThrusterFSMContext, ThrusterInputComponent, ThrusterMovementComponent, ThrusterState };
package/dist/thruster.js CHANGED
@@ -2,23 +2,21 @@ import {
2
2
  ThrusterBehavior,
3
3
  ThrusterEvent,
4
4
  ThrusterFSM,
5
- ThrusterState,
6
- ThrusterSystem
7
- } from "./chunk-MJFMNRMZ.js";
5
+ ThrusterState
6
+ } from "./chunk-VFDUKGRZ.js";
8
7
  import {
9
8
  createThrusterInputComponent,
10
9
  createThrusterMovementComponent,
11
10
  createThrusterStateComponent
12
11
  } from "./chunk-IZJFUAXB.js";
13
- import "./chunk-Y7YIAWPW.js";
14
- import "./chunk-4URF65BR.js";
12
+ import "./chunk-AS3HR7AS.js";
15
13
  import "./chunk-EZNCCO4L.js";
14
+ import "./chunk-5WRI5ZAA.js";
16
15
  export {
17
16
  ThrusterBehavior,
18
17
  ThrusterEvent,
19
18
  ThrusterFSM,
20
19
  ThrusterState,
21
- ThrusterSystem,
22
20
  createThrusterInputComponent,
23
21
  createThrusterMovementComponent,
24
22
  createThrusterStateComponent
@@ -1,43 +1,25 @@
1
1
  import { T as TopDownMovementComponent, a as TopDownMovementInputComponent, b as TopDownMovementStateComponent } from './components-XCpL6IYt.js';
2
2
  export { c as createTopDownMovementComponent, d as createTopDownMovementInputComponent, e as createTopDownMovementStateComponent } from './components-XCpL6IYt.js';
3
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
4
- import '@dimforge/rapier3d-compat';
3
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
4
+ import '@zylem/runtime';
5
5
 
6
+ /**
7
+ * Entity with top-down movement components (input written by the game,
8
+ * simulation owned by the wasm runtime).
9
+ */
6
10
  interface TopDownMovementEntity {
7
- body: {
8
- linvel(): {
9
- x: number;
10
- y: number;
11
- z: number;
12
- };
13
- };
14
- transformStore?: {
15
- velocity: {
16
- x: number;
17
- y: number;
18
- z: number;
19
- };
20
- dirty: {
21
- velocityX: boolean;
22
- velocityY: boolean;
23
- velocityZ: boolean;
24
- };
25
- };
26
- setRotationZ?: (angle: number) => void;
27
11
  topDownMovement: TopDownMovementComponent;
28
12
  $topDownMovement: TopDownMovementInputComponent;
29
13
  topDownMovementState: TopDownMovementStateComponent;
30
14
  }
31
- declare class TopDownMovementSystem {
32
- updateEntity(entity: TopDownMovementEntity, _delta: number): void;
33
- }
34
-
35
15
  interface TopDownMovementBehaviorOptions {
36
16
  moveSpeed?: number;
17
+ /** When true, WASM rotates toward velocity; default false for twin-stick face axes. */
18
+ faceMovement?: boolean;
37
19
  }
38
20
  interface TopDownMovementHandle {
39
21
  getFacingAngle(): number;
40
22
  }
41
23
  declare const TopDownMovementBehavior: BehaviorDescriptor<TopDownMovementBehaviorOptions, TopDownMovementHandle, TopDownMovementEntity>;
42
24
 
43
- export { TopDownMovementBehavior, type TopDownMovementBehaviorOptions, TopDownMovementComponent, type TopDownMovementEntity, type TopDownMovementHandle, TopDownMovementInputComponent, TopDownMovementStateComponent, TopDownMovementSystem };
25
+ export { TopDownMovementBehavior, type TopDownMovementBehaviorOptions, TopDownMovementComponent, type TopDownMovementEntity, type TopDownMovementHandle, TopDownMovementInputComponent, TopDownMovementStateComponent };
@@ -1,18 +1,18 @@
1
1
  import {
2
- TopDownMovementBehavior,
3
- TopDownMovementSystem
4
- } from "./chunk-64HKCSXD.js";
2
+ TopDownMovementBehavior
3
+ } from "./chunk-5EBIIYZD.js";
5
4
  import {
6
5
  createTopDownMovementComponent,
7
6
  createTopDownMovementInputComponent,
8
7
  createTopDownMovementStateComponent
9
8
  } from "./chunk-EIWQM6U3.js";
10
- import "./chunk-Y7YIAWPW.js";
11
- import "./chunk-4V7TIRO2.js";
9
+ import "./chunk-TBUKJKY6.js";
10
+ import "./chunk-SGHIGTVZ.js";
11
+ import "./chunk-E4X4YJZB.js";
12
12
  import "./chunk-EZNCCO4L.js";
13
+ import "./chunk-5WRI5ZAA.js";
13
14
  export {
14
15
  TopDownMovementBehavior,
15
- TopDownMovementSystem,
16
16
  createTopDownMovementComponent,
17
17
  createTopDownMovementInputComponent,
18
18
  createTopDownMovementStateComponent
@@ -1,8 +1,7 @@
1
1
  import { Vector3, Vector2 } from 'three';
2
- import { Vector3 as Vector3$1 } from '@dimforge/rapier3d-compat';
3
2
 
4
3
  type Vec2 = Vector2;
5
- type Vec3 = Vector3 | Vector3$1;
4
+ type Vec3 = Vector3 | Vec3Components;
6
5
  type Vec2Components = {
7
6
  x: number;
8
7
  y: number;
@@ -40,6 +39,5 @@ declare function normalizeVec2(input?: Vec2Input | null, defaults?: Vec2Input |
40
39
  declare function normalizeVec3(input?: Vec3Input | null, defaults?: Vec3Input | Partial<Vec3Components>): Vec3Components;
41
40
  declare function toThreeVector2(input?: Vec2Input | null, defaults?: Vec2Input | Partial<Vec2Components>): Vector2;
42
41
  declare function toThreeVector3(input?: Vec3Input | null, defaults?: Vec3Input | Partial<Vec3Components>): Vector3;
43
- declare function toRapierVector3(input?: Vec3Input | null, defaults?: Vec3Input | Partial<Vec3Components>): Vector3$1;
44
42
 
45
- export { VEC2_ONE as V, VEC2_ZERO as a, VEC3_ONE as b, VEC3_ZERO as c, type Vec2 as d, type Vec2Components as e, type Vec2Input as f, type Vec3 as g, type Vec3Components as h, type Vec3Input as i, isVec2Input as j, isVec3Input as k, normalizeVec3 as l, toThreeVector2 as m, normalizeVec2 as n, toThreeVector3 as o, toRapierVector3 as t };
43
+ export { VEC2_ONE as V, VEC2_ZERO as a, VEC3_ONE as b, VEC3_ZERO as c, type Vec2 as d, type Vec2Components as e, type Vec2Input as f, type Vec3 as g, type Vec3Components as h, type Vec3Input as i, isVec2Input as j, isVec3Input as k, normalizeVec3 as l, toThreeVector3 as m, normalizeVec2 as n, toThreeVector2 as t };
@@ -1,6 +1,6 @@
1
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
2
2
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
3
- import '@dimforge/rapier3d-compat';
3
+ import '@zylem/runtime';
4
4
  import 'typescript-fsm';
5
5
 
6
6
  /**
@@ -5,11 +5,12 @@ import {
5
5
  WorldBoundary2DState,
6
6
  computeWorldBoundary2DHits,
7
7
  hasAnyWorldBoundary2DHit
8
- } from "./chunk-PWF757B6.js";
9
- import "./chunk-KDY5N6J4.js";
10
- import "./chunk-4V7TIRO2.js";
11
- import "./chunk-4URF65BR.js";
8
+ } from "./chunk-F6ESSHQK.js";
9
+ import "./chunk-OPZ2LVS2.js";
10
+ import "./chunk-AS3HR7AS.js";
11
+ import "./chunk-E4X4YJZB.js";
12
12
  import "./chunk-EZNCCO4L.js";
13
+ import "./chunk-5WRI5ZAA.js";
13
14
  export {
14
15
  WorldBoundary2DBehavior,
15
16
  WorldBoundary2DEvent,
@@ -1,6 +1,6 @@
1
- import { a as BehaviorDescriptor } from './behavior-system-DSNek0W9.js';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CeJXzNvr.js';
2
2
  import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
3
- import '@dimforge/rapier3d-compat';
3
+ import '@zylem/runtime';
4
4
  import 'typescript-fsm';
5
5
 
6
6
  interface Bounds3DPoint {
@@ -5,11 +5,12 @@ import {
5
5
  WorldBoundary3DState,
6
6
  computeWorldBoundary3DHits,
7
7
  hasAnyWorldBoundary3DHit
8
- } from "./chunk-HNESASBB.js";
8
+ } from "./chunk-AEBDZWCP.js";
9
9
  import "./chunk-OHCPV2NT.js";
10
- import "./chunk-4V7TIRO2.js";
11
- import "./chunk-4URF65BR.js";
10
+ import "./chunk-AS3HR7AS.js";
11
+ import "./chunk-E4X4YJZB.js";
12
12
  import "./chunk-EZNCCO4L.js";
13
+ import "./chunk-5WRI5ZAA.js";
13
14
  export {
14
15
  WorldBoundary3DBehavior,
15
16
  WorldBoundary3DEvent,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zylem/behaviors",
3
- "version": "0.4.0",
3
+ "version": "0.5.1",
4
4
  "type": "module",
5
5
  "description": "Tree-shakable Zylem behavior descriptors, systems, coordinators, and runtime-agnostic behavior helpers.",
6
6
  "license": "MIT",
@@ -128,6 +128,7 @@
128
128
  "./package.json": "./package.json"
129
129
  },
130
130
  "scripts": {
131
+ "zylem": "node --experimental-strip-types ./scripts/zylem-runner.ts",
131
132
  "build": "tsup",
132
133
  "dev": "tsup --watch",
133
134
  "typecheck": "tsc --noEmit",
@@ -136,16 +137,16 @@
136
137
  },
137
138
  "dependencies": {
138
139
  "@dgreenheck/three-pinata": "^2.0.1",
140
+ "@zylem/runtime": "link:../runtime",
139
141
  "comlink": "^4.4.2",
140
142
  "typescript-fsm": "^1.6.0",
141
143
  "valtio": "^2.1.7"
142
144
  },
143
145
  "peerDependencies": {
144
- "@dimforge/rapier3d-compat": "^0.11.2",
145
146
  "three": "^0.180.0"
146
147
  },
147
148
  "devDependencies": {
148
- "@dimforge/rapier3d-compat": "^0.11.2",
149
+ "@clack/prompts": "^1.6.0",
149
150
  "@types/node": "^20.19.13",
150
151
  "@types/three": "0.171.0",
151
152
  "happy-dom": "^18.0.1",