@zylem/behaviors 0.4.1 → 0.5.2

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 +13 -1
  2. package/dist/{behavior-system-y8SGrGWy.d.ts → behavior-system-CldqNUgr.d.ts} +334 -19
  3. package/dist/{chunk-GFARAJV2.js → chunk-2PAHQZZD.js} +44 -73
  4. package/dist/chunk-2PAHQZZD.js.map +1 -0
  5. package/dist/chunk-4CEW64HO.js +210 -0
  6. package/dist/chunk-4CEW64HO.js.map +1 -0
  7. package/dist/chunk-4LLK2FJI.js +344 -0
  8. package/dist/chunk-4LLK2FJI.js.map +1 -0
  9. package/dist/chunk-4MZ57HPD.js +323 -0
  10. package/dist/chunk-4MZ57HPD.js.map +1 -0
  11. package/dist/chunk-52FJIDGL.js +30 -0
  12. package/dist/chunk-52FJIDGL.js.map +1 -0
  13. package/dist/{chunk-UYFOLI2X.js → chunk-5A5AYP2C.js} +1 -1
  14. package/dist/{chunk-UYFOLI2X.js.map → chunk-5A5AYP2C.js.map} +1 -1
  15. package/dist/chunk-5WRI5ZAA.js +31 -0
  16. package/dist/chunk-5WRI5ZAA.js.map +1 -0
  17. package/dist/{chunk-ZRQWSURL.js → chunk-5XPPLTC7.js} +2 -2
  18. package/dist/chunk-5XPPLTC7.js.map +1 -0
  19. package/dist/{chunk-VMQHNJJI.js → chunk-7DGXUAPV.js} +17 -23
  20. package/dist/chunk-7DGXUAPV.js.map +1 -0
  21. package/dist/{chunk-5SM5SH5O.js → chunk-7JLWZXPA.js} +2 -2
  22. package/dist/{chunk-QDCJLJUV.js → chunk-7W3KY55G.js} +22 -13
  23. package/dist/chunk-7W3KY55G.js.map +1 -0
  24. package/dist/chunk-AS3HR7AS.js +188 -0
  25. package/dist/chunk-AS3HR7AS.js.map +1 -0
  26. package/dist/chunk-BAXJ7XHJ.js +155 -0
  27. package/dist/chunk-BAXJ7XHJ.js.map +1 -0
  28. package/dist/chunk-DZ4LLQON.js +867 -0
  29. package/dist/chunk-DZ4LLQON.js.map +1 -0
  30. package/dist/{chunk-4L36OPY2.js → chunk-G2KUXVU6.js} +81 -135
  31. package/dist/chunk-G2KUXVU6.js.map +1 -0
  32. package/dist/{chunk-BXP4K7RF.js → chunk-JVADRLWX.js} +57 -186
  33. package/dist/chunk-JVADRLWX.js.map +1 -0
  34. package/dist/{chunk-ZA43LPRM.js → chunk-KIYUUSPK.js} +2 -2
  35. package/dist/chunk-LZIHSJZR.js +191 -0
  36. package/dist/chunk-LZIHSJZR.js.map +1 -0
  37. package/dist/{chunk-WWVD5DR5.js → chunk-M3QDKKDF.js} +2 -8
  38. package/dist/chunk-M3QDKKDF.js.map +1 -0
  39. package/dist/{chunk-FTDZAKZW.js → chunk-NQPYMUDF.js} +7 -5
  40. package/dist/{chunk-FTDZAKZW.js.map → chunk-NQPYMUDF.js.map} +1 -1
  41. package/dist/{chunk-XP3ASVGJ.js → chunk-NW4SE5XW.js} +2 -2
  42. package/dist/{chunk-KDY5N6J4.js → chunk-OPZ2LVS2.js} +1 -22
  43. package/dist/{chunk-KDY5N6J4.js.map → chunk-OPZ2LVS2.js.map} +1 -1
  44. package/dist/{chunk-5XZWTFGF.js → chunk-PLIXVF7B.js} +3 -3
  45. package/dist/chunk-PLIXVF7B.js.map +1 -0
  46. package/dist/{chunk-27UPCP5B.js → chunk-QS3VXWVO.js} +22 -13
  47. package/dist/chunk-QS3VXWVO.js.map +1 -0
  48. package/dist/{chunk-Y7YIAWPW.js → chunk-SGHIGTVZ.js} +1 -11
  49. package/dist/{chunk-Y7YIAWPW.js.map → chunk-SGHIGTVZ.js.map} +1 -1
  50. package/dist/{chunk-UL6Q5HDP.js → chunk-TBUKJKY6.js} +3 -25
  51. package/dist/chunk-TBUKJKY6.js.map +1 -0
  52. package/dist/{chunk-Z72F2ENM.js → chunk-WU6XXL3D.js} +17 -26
  53. package/dist/chunk-WU6XXL3D.js.map +1 -0
  54. package/dist/{chunk-A4CA35DQ.js → chunk-Y4PHT2HG.js} +25 -45
  55. package/dist/chunk-Y4PHT2HG.js.map +1 -0
  56. package/dist/components-BmievOxF.d.ts +30 -0
  57. package/dist/cooldown.d.ts +2 -2
  58. package/dist/cooldown.js +2 -1
  59. package/dist/coordinators/boundary-ricochet-3d.d.ts +4 -4
  60. package/dist/coordinators/boundary-ricochet-3d.js +1 -0
  61. package/dist/coordinators/boundary-ricochet.d.ts +4 -4
  62. package/dist/coordinators/boundary-ricochet.js +3 -2
  63. package/dist/coordinators/first-person-shooter.js +1 -0
  64. package/dist/coordinators/multidirectional-space-shooter.d.ts +3 -3
  65. package/dist/coordinators/multidirectional-space-shooter.js +5 -3
  66. package/dist/coordinators/top-down-shooter.d.ts +3 -3
  67. package/dist/coordinators/top-down-shooter.js +5 -3
  68. package/dist/core.d.ts +298 -8
  69. package/dist/core.js +502 -14
  70. package/dist/core.js.map +1 -1
  71. package/dist/destructible-3d.d.ts +32 -4
  72. package/dist/destructible-3d.js +2 -1
  73. package/dist/destructible-prebake.js +1 -0
  74. package/dist/{entity-types-CmtQ-IBp.d.ts → entity-types-DhfsZbSK.d.ts} +5 -3
  75. package/dist/first-person.d.ts +27 -38
  76. package/dist/first-person.js +8 -8
  77. package/dist/index.d.ts +14 -15
  78. package/dist/index.js +38 -53
  79. package/dist/jumper-2d.d.ts +3 -17
  80. package/dist/jumper-2d.js +4 -9
  81. package/dist/jumper-3d.d.ts +5 -39
  82. package/dist/jumper-3d.js +5 -10
  83. package/dist/{moveable-Cl9h-_w7.d.ts → moveable-rdIvWiak.d.ts} +21 -4
  84. package/dist/particle-emitter/presets.js +1 -0
  85. package/dist/particle-emitter.d.ts +3 -3
  86. package/dist/particle-emitter.js +3 -2
  87. package/dist/platformer-2d.d.ts +21 -82
  88. package/dist/platformer-2d.js +4 -5
  89. package/dist/platformer-3d.d.ts +21 -78
  90. package/dist/platformer-3d.js +4 -5
  91. package/dist/ricochet-2d.d.ts +3 -3
  92. package/dist/ricochet-2d.js +4 -3
  93. package/dist/ricochet-3d.d.ts +3 -3
  94. package/dist/ricochet-3d.js +4 -3
  95. package/dist/runtime-2d.d.ts +2 -2
  96. package/dist/runtime-2d.js +1 -0
  97. package/dist/runtime-2d.js.map +1 -1
  98. package/dist/screen-visibility.d.ts +2 -2
  99. package/dist/screen-visibility.js +1 -0
  100. package/dist/screen-wrap.d.ts +2 -2
  101. package/dist/screen-wrap.js +4 -3
  102. package/dist/shooter-2d.d.ts +3 -3
  103. package/dist/shooter-2d.js +4 -3
  104. package/dist/thruster.d.ts +5 -34
  105. package/dist/thruster.js +4 -6
  106. package/dist/top-down-movement.d.ts +9 -27
  107. package/dist/top-down-movement.js +6 -6
  108. package/dist/{vector-Bm65-FOG.d.ts → vector-DjhLUrak.d.ts} +2 -4
  109. package/dist/world-boundary-2d.d.ts +2 -2
  110. package/dist/world-boundary-2d.js +5 -4
  111. package/dist/world-boundary-3d.d.ts +2 -2
  112. package/dist/world-boundary-3d.js +4 -3
  113. package/package.json +4 -5
  114. package/dist/chunk-27UPCP5B.js.map +0 -1
  115. package/dist/chunk-4L36OPY2.js.map +0 -1
  116. package/dist/chunk-4URF65BR.js +0 -44
  117. package/dist/chunk-4URF65BR.js.map +0 -1
  118. package/dist/chunk-5XZWTFGF.js.map +0 -1
  119. package/dist/chunk-67XLJ26X.js +0 -536
  120. package/dist/chunk-67XLJ26X.js.map +0 -1
  121. package/dist/chunk-75FJIUIG.js +0 -240
  122. package/dist/chunk-75FJIUIG.js.map +0 -1
  123. package/dist/chunk-A4CA35DQ.js.map +0 -1
  124. package/dist/chunk-BXP4K7RF.js.map +0 -1
  125. package/dist/chunk-F72WX4MH.js +0 -422
  126. package/dist/chunk-F72WX4MH.js.map +0 -1
  127. package/dist/chunk-GFARAJV2.js.map +0 -1
  128. package/dist/chunk-JXMF4NUI.js +0 -309
  129. package/dist/chunk-JXMF4NUI.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-Q75LKHDF.js +0 -56
  133. package/dist/chunk-Q75LKHDF.js.map +0 -1
  134. package/dist/chunk-QDCJLJUV.js.map +0 -1
  135. package/dist/chunk-RDHSHEZM.js +0 -479
  136. package/dist/chunk-RDHSHEZM.js.map +0 -1
  137. package/dist/chunk-UIG7MWS2.js +0 -518
  138. package/dist/chunk-UIG7MWS2.js.map +0 -1
  139. package/dist/chunk-UL6Q5HDP.js.map +0 -1
  140. package/dist/chunk-VMQHNJJI.js.map +0 -1
  141. package/dist/chunk-WWVD5DR5.js.map +0 -1
  142. package/dist/chunk-Z72F2ENM.js.map +0 -1
  143. package/dist/chunk-ZRQWSURL.js.map +0 -1
  144. package/dist/components-BWG1GkZA.d.ts +0 -20
  145. package/dist/use-behavior-B85d5u7-.d.ts +0 -13
  146. /package/dist/{chunk-5SM5SH5O.js.map → chunk-7JLWZXPA.js.map} +0 -0
  147. /package/dist/{chunk-ZA43LPRM.js.map → chunk-KIYUUSPK.js.map} +0 -0
  148. /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-y8SGrGWy.js';
2
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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
  */
@@ -290,6 +215,24 @@ interface Platformer3DBehaviorOptions {
290
215
  snapToGroundDistance?: number;
291
216
  /** Character controller collision offset (default: 0.05) */
292
217
  characterOffset?: number;
218
+ /** Explicit KCC capsule override (requires `useAttachedCollider: false`). */
219
+ shape?: {
220
+ halfHeight: number;
221
+ radius: number;
222
+ offset?: [number, number, number];
223
+ };
224
+ /** When true (default), KCC reads shape + offset from the attached Rapier collider. */
225
+ useAttachedCollider?: boolean;
226
+ }
227
+ /**
228
+ * Entity with platformer components (input written by the game; the wasm
229
+ * runtime owns the kinematic character controller and FSM).
230
+ */
231
+ interface Platformer3DEntity {
232
+ uuid: string;
233
+ platformer: Platformer3DMovementComponent;
234
+ $platformer: Platformer3DInputComponent;
235
+ platformerState: Platformer3DStateComponent;
293
236
  }
294
237
  /**
295
238
  * Platformer3DBehavior - typed descriptor for 3D platformer movement
@@ -331,4 +274,4 @@ declare const Platformer3DBehavior: BehaviorDescriptor<Platformer3DBehaviorOptio
331
274
  onPlatformCollision: (ctx: PlatformerCollisionContext) => void;
332
275
  }, Platformer3DEntity>;
333
276
 
334
- export { Platformer3DBehavior, type Platformer3DBehaviorOptions, type Platformer3DContext, type Platformer3DEntity, Platformer3DEvent, Platformer3DFSM, type Platformer3DInputComponent, type Platformer3DMovementComponent, Platformer3DState, type Platformer3DStateComponent, Platformer3DSystem, type PlatformerCollisionContext, createPlatformer3DInputComponent, createPlatformer3DMovementComponent, createPlatformer3DStateComponent };
277
+ export { Platformer3DBehavior, type Platformer3DBehaviorOptions, type Platformer3DContext, type Platformer3DEntity, Platformer3DEvent, Platformer3DFSM, type Platformer3DInputComponent, type Platformer3DMovementComponent, Platformer3DState, type Platformer3DStateComponent, type PlatformerCollisionContext, createPlatformer3DInputComponent, createPlatformer3DMovementComponent, createPlatformer3DStateComponent };
@@ -3,20 +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-67XLJ26X.js";
11
- import "./chunk-4URF65BR.js";
12
- import "./chunk-Q75LKHDF.js";
9
+ } from "./chunk-4LLK2FJI.js";
10
+ import "./chunk-AS3HR7AS.js";
11
+ import "./chunk-DZ4LLQON.js";
13
12
  import "./chunk-EZNCCO4L.js";
13
+ import "./chunk-5WRI5ZAA.js";
14
14
  export {
15
15
  Platformer3DBehavior,
16
16
  Platformer3DEvent,
17
17
  Platformer3DFSM,
18
18
  Platformer3DState,
19
- Platformer3DSystem,
20
19
  createPlatformer3DInputComponent,
21
20
  createPlatformer3DMovementComponent,
22
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-y8SGrGWy.js';
3
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-QDCJLJUV.js";
7
- import "./chunk-4URF65BR.js";
8
- import "./chunk-Q75LKHDF.js";
6
+ } from "./chunk-7W3KY55G.js";
7
+ import "./chunk-AS3HR7AS.js";
8
+ import "./chunk-DZ4LLQON.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-y8SGrGWy.js';
2
+ import { B as BaseEntityInterface } from './entity-types-DhfsZbSK.js';
3
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-27UPCP5B.js";
7
- import "./chunk-4URF65BR.js";
8
- import "./chunk-Q75LKHDF.js";
6
+ } from "./chunk-QS3VXWVO.js";
7
+ import "./chunk-AS3HR7AS.js";
8
+ import "./chunk-DZ4LLQON.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-y8SGrGWy.js';
2
- import '@dimforge/rapier3d-compat';
1
+ import { a as BehaviorDescriptor, d as BehaviorRef } from './behavior-system-CldqNUgr.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-y8SGrGWy.js';
2
- import '@dimforge/rapier3d-compat';
1
+ import { a as BehaviorDescriptor, G as GameEntity } from './behavior-system-CldqNUgr.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-y8SGrGWy.js';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-y8SGrGWy.js';
2
- import { i as Vec3Input } from './vector-Bm65-FOG.js';
3
- import '@dimforge/rapier3d-compat';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-y8SGrGWy.js';
5
- import { P as PhysicsBodyComponent } from './components-BWG1GkZA.js';
4
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-75FJIUIG.js";
5
+ ThrusterState
6
+ } from "./chunk-BAXJ7XHJ.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-y8SGrGWy.js';
4
- import '@dimforge/rapier3d-compat';
3
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-A4CA35DQ.js";
2
+ TopDownMovementBehavior
3
+ } from "./chunk-Y4PHT2HG.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-Q75LKHDF.js";
9
+ import "./chunk-TBUKJKY6.js";
10
+ import "./chunk-SGHIGTVZ.js";
11
+ import "./chunk-DZ4LLQON.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-y8SGrGWy.js';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-VMQHNJJI.js";
9
- import "./chunk-KDY5N6J4.js";
10
- import "./chunk-4URF65BR.js";
11
- import "./chunk-Q75LKHDF.js";
8
+ } from "./chunk-7DGXUAPV.js";
9
+ import "./chunk-OPZ2LVS2.js";
10
+ import "./chunk-AS3HR7AS.js";
11
+ import "./chunk-DZ4LLQON.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-y8SGrGWy.js';
1
+ import { a as BehaviorDescriptor } from './behavior-system-CldqNUgr.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-Z72F2ENM.js";
8
+ } from "./chunk-WU6XXL3D.js";
9
9
  import "./chunk-OHCPV2NT.js";
10
- import "./chunk-4URF65BR.js";
11
- import "./chunk-Q75LKHDF.js";
10
+ import "./chunk-AS3HR7AS.js";
11
+ import "./chunk-DZ4LLQON.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.1",
3
+ "version": "0.5.2",
4
4
  "type": "module",
5
5
  "description": "Tree-shakable Zylem behavior descriptors, systems, coordinators, and runtime-agnostic behavior helpers.",
6
6
  "license": "MIT",
@@ -137,19 +137,18 @@
137
137
  },
138
138
  "dependencies": {
139
139
  "@dgreenheck/three-pinata": "^2.0.1",
140
+ "@zylem/runtime": "^0.2.2",
140
141
  "comlink": "^4.4.2",
141
142
  "typescript-fsm": "^1.6.0",
142
143
  "valtio": "^2.1.7"
143
144
  },
144
145
  "peerDependencies": {
145
- "@dimforge/rapier3d-compat": "^0.11.2",
146
- "three": "^0.180.0"
146
+ "three": "^0.185.0"
147
147
  },
148
148
  "devDependencies": {
149
149
  "@clack/prompts": "^1.6.0",
150
- "@dimforge/rapier3d-compat": "^0.11.2",
151
150
  "@types/node": "^20.19.13",
152
- "@types/three": "0.171.0",
151
+ "@types/three": "^0.185.0",
153
152
  "happy-dom": "^18.0.1",
154
153
  "tsup": "^8.5.1",
155
154
  "typescript": "5.8.2",