@zylem/behaviors 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (175) hide show
  1. package/README.md +26 -0
  2. package/dist/behavior-system-DYbx-x_-.d.ts +307 -0
  3. package/dist/chunk-2C3Z5GE7.js +176 -0
  4. package/dist/chunk-2C3Z5GE7.js.map +1 -0
  5. package/dist/chunk-2CLT36VB.js +241 -0
  6. package/dist/chunk-2CLT36VB.js.map +1 -0
  7. package/dist/chunk-3PYGRHAL.js +35 -0
  8. package/dist/chunk-3PYGRHAL.js.map +1 -0
  9. package/dist/chunk-4I6E6DGV.js +212 -0
  10. package/dist/chunk-4I6E6DGV.js.map +1 -0
  11. package/dist/chunk-4URF65BR.js +44 -0
  12. package/dist/chunk-4URF65BR.js.map +1 -0
  13. package/dist/chunk-6C6NXNEW.js +38 -0
  14. package/dist/chunk-6C6NXNEW.js.map +1 -0
  15. package/dist/chunk-ARJWUNRE.js +431 -0
  16. package/dist/chunk-ARJWUNRE.js.map +1 -0
  17. package/dist/chunk-BXP4K7RF.js +1205 -0
  18. package/dist/chunk-BXP4K7RF.js.map +1 -0
  19. package/dist/chunk-DYLH6K7B.js +44 -0
  20. package/dist/chunk-DYLH6K7B.js.map +1 -0
  21. package/dist/chunk-EIWQM6U3.js +27 -0
  22. package/dist/chunk-EIWQM6U3.js.map +1 -0
  23. package/dist/chunk-EZNCCO4L.js +14 -0
  24. package/dist/chunk-EZNCCO4L.js.map +1 -0
  25. package/dist/chunk-F3KRX2V4.js +457 -0
  26. package/dist/chunk-F3KRX2V4.js.map +1 -0
  27. package/dist/chunk-FPTWVCPN.js +53 -0
  28. package/dist/chunk-FPTWVCPN.js.map +1 -0
  29. package/dist/chunk-GCNRXAKH.js +37 -0
  30. package/dist/chunk-GCNRXAKH.js.map +1 -0
  31. package/dist/chunk-GYURWCIQ.js +1985 -0
  32. package/dist/chunk-GYURWCIQ.js.map +1 -0
  33. package/dist/chunk-HZMY3TT4.js +244 -0
  34. package/dist/chunk-HZMY3TT4.js.map +1 -0
  35. package/dist/chunk-ID5QJYF5.js +50 -0
  36. package/dist/chunk-ID5QJYF5.js.map +1 -0
  37. package/dist/chunk-JAN34G6S.js +552 -0
  38. package/dist/chunk-JAN34G6S.js.map +1 -0
  39. package/dist/chunk-K3UNLQ7W.js +118 -0
  40. package/dist/chunk-K3UNLQ7W.js.map +1 -0
  41. package/dist/chunk-KDY5N6J4.js +82 -0
  42. package/dist/chunk-KDY5N6J4.js.map +1 -0
  43. package/dist/chunk-KOZUNIIE.js +413 -0
  44. package/dist/chunk-KOZUNIIE.js.map +1 -0
  45. package/dist/chunk-KS72RZHX.js +30 -0
  46. package/dist/chunk-KS72RZHX.js.map +1 -0
  47. package/dist/chunk-LD5SMIB3.js +32 -0
  48. package/dist/chunk-LD5SMIB3.js.map +1 -0
  49. package/dist/chunk-OHCPV2NT.js +86 -0
  50. package/dist/chunk-OHCPV2NT.js.map +1 -0
  51. package/dist/chunk-OYWFPIHF.js +115 -0
  52. package/dist/chunk-OYWFPIHF.js.map +1 -0
  53. package/dist/chunk-POZER3MQ.js +407 -0
  54. package/dist/chunk-POZER3MQ.js.map +1 -0
  55. package/dist/chunk-RTRVBEIB.js +56 -0
  56. package/dist/chunk-RTRVBEIB.js.map +1 -0
  57. package/dist/chunk-RTVRUNYR.js +29 -0
  58. package/dist/chunk-RTVRUNYR.js.map +1 -0
  59. package/dist/chunk-SS7ELMJ7.js +406 -0
  60. package/dist/chunk-SS7ELMJ7.js.map +1 -0
  61. package/dist/chunk-STCCNLPC.js +160 -0
  62. package/dist/chunk-STCCNLPC.js.map +1 -0
  63. package/dist/chunk-SVLNF434.js +261 -0
  64. package/dist/chunk-SVLNF434.js.map +1 -0
  65. package/dist/chunk-UYFOLI2X.js +24 -0
  66. package/dist/chunk-UYFOLI2X.js.map +1 -0
  67. package/dist/chunk-VAN4WW3F.js +67 -0
  68. package/dist/chunk-VAN4WW3F.js.map +1 -0
  69. package/dist/chunk-WOMHL23C.js +369 -0
  70. package/dist/chunk-WOMHL23C.js.map +1 -0
  71. package/dist/chunk-WWVD5DR5.js +120 -0
  72. package/dist/chunk-WWVD5DR5.js.map +1 -0
  73. package/dist/chunk-XG2YMCJW.js +201 -0
  74. package/dist/chunk-XG2YMCJW.js.map +1 -0
  75. package/dist/chunk-XIJNE67Y.js +210 -0
  76. package/dist/chunk-XIJNE67Y.js.map +1 -0
  77. package/dist/chunk-Y6UJOUE5.js +44 -0
  78. package/dist/chunk-Y6UJOUE5.js.map +1 -0
  79. package/dist/chunk-YUO6SKJD.js +348 -0
  80. package/dist/chunk-YUO6SKJD.js.map +1 -0
  81. package/dist/components--hjBMTnz.d.ts +120 -0
  82. package/dist/components-B29WHGQN.d.ts +39 -0
  83. package/dist/components-BWG1GkZA.d.ts +20 -0
  84. package/dist/components-XCpL6IYt.d.ts +18 -0
  85. package/dist/components-qWwOsvwh.d.ts +43 -0
  86. package/dist/cooldown.d.ts +116 -0
  87. package/dist/cooldown.js +20 -0
  88. package/dist/cooldown.js.map +1 -0
  89. package/dist/coordinators/boundary-ricochet-3d.d.ts +19 -0
  90. package/dist/coordinators/boundary-ricochet-3d.js +8 -0
  91. package/dist/coordinators/boundary-ricochet-3d.js.map +1 -0
  92. package/dist/coordinators/boundary-ricochet.d.ts +34 -0
  93. package/dist/coordinators/boundary-ricochet.js +8 -0
  94. package/dist/coordinators/boundary-ricochet.js.map +1 -0
  95. package/dist/coordinators/first-person-shooter.d.ts +35 -0
  96. package/dist/coordinators/first-person-shooter.js +9 -0
  97. package/dist/coordinators/first-person-shooter.js.map +1 -0
  98. package/dist/coordinators/multidirectional-space-shooter.d.ts +27 -0
  99. package/dist/coordinators/multidirectional-space-shooter.js +10 -0
  100. package/dist/coordinators/multidirectional-space-shooter.js.map +1 -0
  101. package/dist/coordinators/top-down-shooter.d.ts +27 -0
  102. package/dist/coordinators/top-down-shooter.js +10 -0
  103. package/dist/coordinators/top-down-shooter.js.map +1 -0
  104. package/dist/core.d.ts +25 -0
  105. package/dist/core.js +327 -0
  106. package/dist/core.js.map +1 -0
  107. package/dist/destructible-3d.d.ts +42 -0
  108. package/dist/destructible-3d.js +13 -0
  109. package/dist/destructible-3d.js.map +1 -0
  110. package/dist/destructible-prebake.d.ts +28 -0
  111. package/dist/destructible-prebake.js +23 -0
  112. package/dist/destructible-prebake.js.map +1 -0
  113. package/dist/entity-types-CmtQ-IBp.d.ts +15 -0
  114. package/dist/first-person-perspective-C9Mptl0-.d.ts +23 -0
  115. package/dist/first-person.d.ts +204 -0
  116. package/dist/first-person.js +27 -0
  117. package/dist/first-person.js.map +1 -0
  118. package/dist/index.d.ts +40 -0
  119. package/dist/index.js +263 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/jumper-2d.d.ts +113 -0
  122. package/dist/jumper-2d.js +27 -0
  123. package/dist/jumper-2d.js.map +1 -0
  124. package/dist/jumper-3d.d.ts +164 -0
  125. package/dist/jumper-3d.js +29 -0
  126. package/dist/jumper-3d.js.map +1 -0
  127. package/dist/moveable-BCRpjAQb.d.ts +176 -0
  128. package/dist/particle-emitter/presets.d.ts +46 -0
  129. package/dist/particle-emitter/presets.js +15 -0
  130. package/dist/particle-emitter/presets.js.map +1 -0
  131. package/dist/particle-emitter.d.ts +78 -0
  132. package/dist/particle-emitter.js +15 -0
  133. package/dist/particle-emitter.js.map +1 -0
  134. package/dist/payload-BQzu-oY_.d.ts +89 -0
  135. package/dist/platformer-3d.d.ts +347 -0
  136. package/dist/platformer-3d.js +23 -0
  137. package/dist/platformer-3d.js.map +1 -0
  138. package/dist/ricochet-2d.d.ts +274 -0
  139. package/dist/ricochet-2d.js +16 -0
  140. package/dist/ricochet-2d.js.map +1 -0
  141. package/dist/ricochet-3d.d.ts +116 -0
  142. package/dist/ricochet-3d.js +16 -0
  143. package/dist/ricochet-3d.js.map +1 -0
  144. package/dist/runtime-2d.d.ts +2 -0
  145. package/dist/runtime-2d.js +32 -0
  146. package/dist/runtime-2d.js.map +1 -0
  147. package/dist/runtime-pong.d.ts +92 -0
  148. package/dist/runtime-pong.js +38 -0
  149. package/dist/runtime-pong.js.map +1 -0
  150. package/dist/screen-visibility.d.ts +74 -0
  151. package/dist/screen-visibility.js +10 -0
  152. package/dist/screen-visibility.js.map +1 -0
  153. package/dist/screen-wrap.d.ts +86 -0
  154. package/dist/screen-wrap.js +16 -0
  155. package/dist/screen-wrap.js.map +1 -0
  156. package/dist/shooter-2d.d.ts +77 -0
  157. package/dist/shooter-2d.js +12 -0
  158. package/dist/shooter-2d.js.map +1 -0
  159. package/dist/spark-DDlIg1nM.d.ts +148 -0
  160. package/dist/sync-state-machine-CZyspBpj.d.ts +16 -0
  161. package/dist/thruster.d.ts +132 -0
  162. package/dist/thruster.js +26 -0
  163. package/dist/thruster.js.map +1 -0
  164. package/dist/top-down-movement.d.ts +40 -0
  165. package/dist/top-down-movement.js +20 -0
  166. package/dist/top-down-movement.js.map +1 -0
  167. package/dist/use-behavior-D_82jAL3.d.ts +13 -0
  168. package/dist/vector-Bm65-FOG.d.ts +45 -0
  169. package/dist/world-boundary-2d.d.ts +141 -0
  170. package/dist/world-boundary-2d.js +21 -0
  171. package/dist/world-boundary-2d.js.map +1 -0
  172. package/dist/world-boundary-3d.d.ts +75 -0
  173. package/dist/world-boundary-3d.js +21 -0
  174. package/dist/world-boundary-3d.js.map +1 -0
  175. package/package.json +161 -0
@@ -0,0 +1,116 @@
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-DYbx-x_-.js';
4
+ import 'typescript-fsm';
5
+ import 'three';
6
+ import '@dimforge/rapier3d-compat';
7
+
8
+ interface Ricochet3DResult {
9
+ velocity: {
10
+ x: number;
11
+ y: number;
12
+ z: number;
13
+ };
14
+ speed: number;
15
+ normal: {
16
+ x: number;
17
+ y: number;
18
+ z: number;
19
+ };
20
+ }
21
+ interface Ricochet3DCollisionContext {
22
+ entity?: BaseEntityInterface;
23
+ otherEntity?: BaseEntityInterface;
24
+ selfVelocity?: {
25
+ x: number;
26
+ y: number;
27
+ z: number;
28
+ };
29
+ contact: {
30
+ normal?: {
31
+ x: number;
32
+ y: number;
33
+ z: number;
34
+ };
35
+ position?: {
36
+ x: number;
37
+ y: number;
38
+ z: number;
39
+ };
40
+ };
41
+ selfPosition?: {
42
+ x: number;
43
+ y: number;
44
+ z: number;
45
+ };
46
+ otherPosition?: {
47
+ x: number;
48
+ y: number;
49
+ z: number;
50
+ };
51
+ otherSize?: {
52
+ x: number;
53
+ y: number;
54
+ z: number;
55
+ };
56
+ }
57
+ declare enum Ricochet3DState {
58
+ Idle = "idle",
59
+ Ricocheting = "ricocheting"
60
+ }
61
+ declare enum Ricochet3DEvent {
62
+ StartRicochet = "start-ricochet",
63
+ EndRicochet = "end-ricochet"
64
+ }
65
+ type Ricochet3DCallback = (result: Ricochet3DResult) => void;
66
+ declare class Ricochet3DFSM {
67
+ readonly machine: SyncStateMachine<Ricochet3DState, Ricochet3DEvent, never>;
68
+ private lastResult;
69
+ private lastUpdatedAtMs;
70
+ private currentTimeMs;
71
+ private listeners;
72
+ constructor();
73
+ addListener(callback: Ricochet3DCallback): () => void;
74
+ getState(): Ricochet3DState;
75
+ getLastResult(): Ricochet3DResult | null;
76
+ getLastUpdatedAtMs(): number | null;
77
+ setCurrentTimeMs(timeMs: number): void;
78
+ isOnCooldown(cooldownMs?: number): boolean;
79
+ resetCooldown(): void;
80
+ computeRicochet(ctx: Ricochet3DCollisionContext, options?: {
81
+ minSpeed?: number;
82
+ maxSpeed?: number;
83
+ speedMultiplier?: number;
84
+ reflectionMode?: 'simple' | 'angled';
85
+ maxAngleDeg?: number;
86
+ }): Ricochet3DResult | null;
87
+ clearRicochet(): void;
88
+ private emitToListeners;
89
+ private extractDataFromEntities;
90
+ private computeNormalFromPositions;
91
+ private normalizeVector;
92
+ private dot;
93
+ private computeBasicReflection;
94
+ private computeAngledDeflection;
95
+ private computeHitOffsetVector;
96
+ private getDominantAxis;
97
+ private applySpeedClamp;
98
+ private dispatch;
99
+ }
100
+
101
+ interface Ricochet3DOptions {
102
+ minSpeed: number;
103
+ maxSpeed: number;
104
+ speedMultiplier: number;
105
+ reflectionMode: 'simple' | 'angled';
106
+ maxAngleDeg: number;
107
+ }
108
+ interface Ricochet3DHandle {
109
+ getRicochet(ctx: Ricochet3DCollisionContext): Ricochet3DResult | null;
110
+ applyRicochet(ctx: Ricochet3DCollisionContext): boolean;
111
+ getLastResult(): Ricochet3DResult | null;
112
+ onRicochet(callback: Ricochet3DCallback): () => void;
113
+ }
114
+ declare const Ricochet3DBehavior: BehaviorDescriptor<Ricochet3DOptions, Ricochet3DHandle, unknown>;
115
+
116
+ export { Ricochet3DBehavior, type Ricochet3DCallback, type Ricochet3DCollisionContext, Ricochet3DEvent, Ricochet3DFSM, type Ricochet3DHandle, type Ricochet3DOptions, type Ricochet3DResult, Ricochet3DState };
@@ -0,0 +1,16 @@
1
+ import {
2
+ Ricochet3DBehavior,
3
+ Ricochet3DEvent,
4
+ Ricochet3DFSM,
5
+ Ricochet3DState
6
+ } from "./chunk-ARJWUNRE.js";
7
+ import "./chunk-Y6UJOUE5.js";
8
+ import "./chunk-4URF65BR.js";
9
+ import "./chunk-EZNCCO4L.js";
10
+ export {
11
+ Ricochet3DBehavior,
12
+ Ricochet3DEvent,
13
+ Ricochet3DFSM,
14
+ Ricochet3DState
15
+ };
16
+ //# sourceMappingURL=ricochet-3d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,2 @@
1
+ export { RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY as RUNTIME_BOUNDARY_2D_BEHAVIOR_KEY, RUNTIME_PONG_BALL_BEHAVIOR_KEY as RUNTIME_DYNAMIC_CIRCLE_BODY_2D_BEHAVIOR_KEY, RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY as RUNTIME_PLAYER_INPUT_2D_BEHAVIOR_KEY, RUNTIME_RICOCHET_2D_BEHAVIOR_KEY, RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY, RuntimeWorldBoundary2DBehavior as RuntimeBoundary2DBehavior, RuntimeWorldBoundary2DOptions as RuntimeBoundary2DOptions, RuntimePongBallBehavior as RuntimeDynamicCircleBody2DBehavior, RuntimePongBallHandle as RuntimeDynamicCircleBody2DHandle, RuntimePongBallOptions as RuntimeDynamicCircleBody2DOptions, RuntimePaddleInput2DBehavior as RuntimePlayerInput2DBehavior, RuntimePaddleInput2DOptions as RuntimePlayerInput2DOptions, RuntimeRicochet2DBehavior, RuntimeRicochet2DEvent, RuntimeRicochet2DHandle, RuntimeRicochet2DOptions, RuntimeTriggerRegion2DBehavior, RuntimeTriggerRegion2DEvent, RuntimeTriggerRegion2DHandle, RuntimeTriggerRegion2DOptions, bindRuntimePongBallHandle as bindRuntimeDynamicCircleBody2DHandle, emitRuntimeRicochet, emitRuntimeTriggerRegionEnter } from './runtime-pong.js';
2
+ import './behavior-system-DYbx-x_-.js';
@@ -0,0 +1,32 @@
1
+ import {
2
+ RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY,
3
+ RUNTIME_PONG_BALL_BEHAVIOR_KEY,
4
+ RUNTIME_RICOCHET_2D_BEHAVIOR_KEY,
5
+ RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY,
6
+ RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY,
7
+ RuntimePaddleInput2DBehavior,
8
+ RuntimePongBallBehavior,
9
+ RuntimeRicochet2DBehavior,
10
+ RuntimeTriggerRegion2DBehavior,
11
+ RuntimeWorldBoundary2DBehavior,
12
+ bindRuntimePongBallHandle,
13
+ emitRuntimeRicochet,
14
+ emitRuntimeTriggerRegionEnter
15
+ } from "./chunk-2C3Z5GE7.js";
16
+ import "./chunk-EZNCCO4L.js";
17
+ export {
18
+ RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY as RUNTIME_BOUNDARY_2D_BEHAVIOR_KEY,
19
+ RUNTIME_PONG_BALL_BEHAVIOR_KEY as RUNTIME_DYNAMIC_CIRCLE_BODY_2D_BEHAVIOR_KEY,
20
+ RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY as RUNTIME_PLAYER_INPUT_2D_BEHAVIOR_KEY,
21
+ RUNTIME_RICOCHET_2D_BEHAVIOR_KEY,
22
+ RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY,
23
+ RuntimeWorldBoundary2DBehavior as RuntimeBoundary2DBehavior,
24
+ RuntimePongBallBehavior as RuntimeDynamicCircleBody2DBehavior,
25
+ RuntimePaddleInput2DBehavior as RuntimePlayerInput2DBehavior,
26
+ RuntimeRicochet2DBehavior,
27
+ RuntimeTriggerRegion2DBehavior,
28
+ bindRuntimePongBallHandle as bindRuntimeDynamicCircleBody2DHandle,
29
+ emitRuntimeRicochet,
30
+ emitRuntimeTriggerRegionEnter
31
+ };
32
+ //# sourceMappingURL=runtime-2d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,92 @@
1
+ import { a as BehaviorDescriptor, e as BehaviorRef } from './behavior-system-DYbx-x_-.js';
2
+
3
+ interface RuntimePongBallOptions {
4
+ initialVelocity: readonly [number, number];
5
+ }
6
+ interface RuntimePongBallHandle {
7
+ setRuntimePosition(x: number, y: number, z?: number): void;
8
+ setRuntimeVelocity(x: number, y: number): void;
9
+ getRuntimePosition(): {
10
+ x: number;
11
+ y: number;
12
+ z: number;
13
+ } | null;
14
+ }
15
+ interface RuntimePaddleInput2DOptions {
16
+ player: 'p1' | 'p2';
17
+ speed: number;
18
+ }
19
+ interface RuntimeWorldBoundary2DOptions {
20
+ boundaries: {
21
+ left: number;
22
+ right: number;
23
+ bottom: number;
24
+ top: number;
25
+ };
26
+ }
27
+ interface RuntimeRicochet2DOptions {
28
+ minSpeed: number;
29
+ maxSpeed: number;
30
+ speedMultiplier: number;
31
+ reflectionMode: 'simple' | 'angled';
32
+ maxAngleDeg: number;
33
+ }
34
+ interface RuntimeRicochet2DEvent {
35
+ kind: 'wall' | 'paddle';
36
+ }
37
+ interface RuntimeRicochet2DHandle {
38
+ onRicochet(callback: (event: RuntimeRicochet2DEvent) => void): () => void;
39
+ }
40
+ /** Registers a gameplay2d trigger AABB (sensor); wasm reports overlap via {@link emitRuntimeTriggerRegionEnter}. */
41
+ interface RuntimeTriggerRegion2DOptions {
42
+ triggerId: number;
43
+ halfExtents: readonly [number, number];
44
+ }
45
+ interface RuntimeTriggerRegion2DEvent {
46
+ triggerId: number;
47
+ }
48
+ interface RuntimeTriggerRegion2DHandle {
49
+ onRegionEnter(callback: (event: RuntimeTriggerRegion2DEvent) => void): () => void;
50
+ }
51
+ interface RuntimeGoalZone2DOptions {
52
+ scorer: 'p1' | 'p2';
53
+ }
54
+ interface RuntimeGoalZone2DEvent {
55
+ scorer: 'p1' | 'p2';
56
+ }
57
+ interface RuntimeGoalZone2DHandle {
58
+ onGoal(callback: (event: RuntimeGoalZone2DEvent) => void): () => void;
59
+ }
60
+ declare const RUNTIME_PONG_BALL_BEHAVIOR_KEY: unique symbol;
61
+ declare const RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY: unique symbol;
62
+ declare const RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY: unique symbol;
63
+ declare const RUNTIME_RICOCHET_2D_BEHAVIOR_KEY: unique symbol;
64
+ declare const RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY: unique symbol;
65
+ declare const RUNTIME_GOAL_ZONE_2D_BEHAVIOR_KEY: unique symbol;
66
+ declare const RuntimePongBallBehavior: BehaviorDescriptor<RuntimePongBallOptions, RuntimePongBallHandle, unknown>;
67
+ declare const RuntimePaddleInput2DBehavior: BehaviorDescriptor<RuntimePaddleInput2DOptions, Record<string, never>, unknown>;
68
+ declare const RuntimeWorldBoundary2DBehavior: BehaviorDescriptor<{
69
+ boundaries: {
70
+ left: number;
71
+ right: number;
72
+ bottom: number;
73
+ top: number;
74
+ };
75
+ }, Record<string, never>, unknown>;
76
+ declare const RuntimeRicochet2DBehavior: BehaviorDescriptor<RuntimeRicochet2DOptions, RuntimeRicochet2DHandle, unknown>;
77
+ declare const RuntimeTriggerRegion2DBehavior: BehaviorDescriptor<RuntimeTriggerRegion2DOptions, RuntimeTriggerRegion2DHandle, unknown>;
78
+ declare const RuntimeGoalZone2DBehavior: BehaviorDescriptor<RuntimeGoalZone2DOptions, RuntimeGoalZone2DHandle, unknown>;
79
+ declare function emitRuntimeRicochet(ref: BehaviorRef<RuntimeRicochet2DOptions>, event: RuntimeRicochet2DEvent): void;
80
+ declare function emitRuntimeTriggerRegionEnter(ref: BehaviorRef<RuntimeTriggerRegion2DOptions>, event: RuntimeTriggerRegion2DEvent): void;
81
+ declare function emitRuntimeGoal(ref: BehaviorRef<RuntimeGoalZone2DOptions>, event: RuntimeGoalZone2DEvent): void;
82
+ declare function bindRuntimePongBallHandle(ref: BehaviorRef<RuntimePongBallOptions>, controls: {
83
+ setPosition: (x: number, y: number, z: number) => void;
84
+ setVelocity: (x: number, y: number) => void;
85
+ getPosition: () => {
86
+ x: number;
87
+ y: number;
88
+ z: number;
89
+ } | null;
90
+ }): void;
91
+
92
+ export { RUNTIME_GOAL_ZONE_2D_BEHAVIOR_KEY, RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY, RUNTIME_PONG_BALL_BEHAVIOR_KEY, RUNTIME_RICOCHET_2D_BEHAVIOR_KEY, RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY, RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY, RuntimeGoalZone2DBehavior, type RuntimeGoalZone2DEvent, type RuntimeGoalZone2DHandle, type RuntimeGoalZone2DOptions, RuntimePaddleInput2DBehavior, type RuntimePaddleInput2DOptions, RuntimePongBallBehavior, type RuntimePongBallHandle, type RuntimePongBallOptions, RuntimeRicochet2DBehavior, type RuntimeRicochet2DEvent, type RuntimeRicochet2DHandle, type RuntimeRicochet2DOptions, RuntimeTriggerRegion2DBehavior, type RuntimeTriggerRegion2DEvent, type RuntimeTriggerRegion2DHandle, type RuntimeTriggerRegion2DOptions, RuntimeWorldBoundary2DBehavior, type RuntimeWorldBoundary2DOptions, bindRuntimePongBallHandle, emitRuntimeGoal, emitRuntimeRicochet, emitRuntimeTriggerRegionEnter };
@@ -0,0 +1,38 @@
1
+ import {
2
+ RUNTIME_GOAL_ZONE_2D_BEHAVIOR_KEY,
3
+ RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY,
4
+ RUNTIME_PONG_BALL_BEHAVIOR_KEY,
5
+ RUNTIME_RICOCHET_2D_BEHAVIOR_KEY,
6
+ RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY,
7
+ RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY,
8
+ RuntimeGoalZone2DBehavior,
9
+ RuntimePaddleInput2DBehavior,
10
+ RuntimePongBallBehavior,
11
+ RuntimeRicochet2DBehavior,
12
+ RuntimeTriggerRegion2DBehavior,
13
+ RuntimeWorldBoundary2DBehavior,
14
+ bindRuntimePongBallHandle,
15
+ emitRuntimeGoal,
16
+ emitRuntimeRicochet,
17
+ emitRuntimeTriggerRegionEnter
18
+ } from "./chunk-2C3Z5GE7.js";
19
+ import "./chunk-EZNCCO4L.js";
20
+ export {
21
+ RUNTIME_GOAL_ZONE_2D_BEHAVIOR_KEY,
22
+ RUNTIME_PADDLE_INPUT_2D_BEHAVIOR_KEY,
23
+ RUNTIME_PONG_BALL_BEHAVIOR_KEY,
24
+ RUNTIME_RICOCHET_2D_BEHAVIOR_KEY,
25
+ RUNTIME_TRIGGER_REGION_2D_BEHAVIOR_KEY,
26
+ RUNTIME_WORLD_BOUNDARY_2D_BEHAVIOR_KEY,
27
+ RuntimeGoalZone2DBehavior,
28
+ RuntimePaddleInput2DBehavior,
29
+ RuntimePongBallBehavior,
30
+ RuntimeRicochet2DBehavior,
31
+ RuntimeTriggerRegion2DBehavior,
32
+ RuntimeWorldBoundary2DBehavior,
33
+ bindRuntimePongBallHandle,
34
+ emitRuntimeGoal,
35
+ emitRuntimeRicochet,
36
+ emitRuntimeTriggerRegionEnter
37
+ };
38
+ //# sourceMappingURL=runtime-pong.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,74 @@
1
+ import { a as BehaviorDescriptor, G as GameEntity } from './behavior-system-DYbx-x_-.js';
2
+
3
+ interface ScreenVisibilitySnapshot {
4
+ initialized: boolean;
5
+ visible: boolean;
6
+ justEntered: boolean;
7
+ justExited: boolean;
8
+ visibleCameraNames: string[];
9
+ }
10
+ declare class ScreenVisibilityFSM {
11
+ private initialized;
12
+ private visible;
13
+ private justEntered;
14
+ private justExited;
15
+ private visibleCameraNames;
16
+ update(visible: boolean, visibleCameraNames: readonly string[]): void;
17
+ isInitialized(): boolean;
18
+ isVisible(): boolean;
19
+ wasJustEntered(): boolean;
20
+ wasJustExited(): boolean;
21
+ getVisibleCameraNames(): string[];
22
+ getState(): ScreenVisibilitySnapshot;
23
+ }
24
+
25
+ interface ScreenVisibilitySize {
26
+ x: number;
27
+ y: number;
28
+ z: number;
29
+ }
30
+ interface ScreenVisibilityChangeContext {
31
+ entity: GameEntity<any>;
32
+ visible: boolean;
33
+ wasVisible: boolean;
34
+ justEntered: boolean;
35
+ justExited: boolean;
36
+ visibleCameraNames: string[];
37
+ cameraName: string | null;
38
+ }
39
+ interface ScreenVisibilityOptions {
40
+ /**
41
+ * Restrict visibility checks to one active camera by name.
42
+ * When omitted, any active camera can make the entity visible.
43
+ */
44
+ cameraName: string | null;
45
+ /**
46
+ * Require the full entity bounds to remain inside the camera frustum.
47
+ * Defaults to partial visibility (any intersection counts).
48
+ */
49
+ requireFullyVisible: boolean;
50
+ /**
51
+ * Expand or shrink the computed bounds in world units.
52
+ * Positive values make visibility checks more generous.
53
+ */
54
+ padding: number;
55
+ /**
56
+ * Optional bounds to use when the entity has no renderable mesh/group.
57
+ * Falls back to the entity's configured size when available.
58
+ */
59
+ fallbackSize: ScreenVisibilitySize | null;
60
+ onChange?: (context: ScreenVisibilityChangeContext) => void;
61
+ onEnter?: (context: ScreenVisibilityChangeContext) => void;
62
+ onExit?: (context: ScreenVisibilityChangeContext) => void;
63
+ }
64
+ interface ScreenVisibilityHandle {
65
+ isVisible(): boolean;
66
+ isOffscreen(): boolean;
67
+ wasJustEntered(): boolean;
68
+ wasJustExited(): boolean;
69
+ getVisibleCameraNames(): string[];
70
+ getState(): ScreenVisibilitySnapshot | null;
71
+ }
72
+ declare const ScreenVisibilityBehavior: BehaviorDescriptor<ScreenVisibilityOptions, ScreenVisibilityHandle, unknown>;
73
+
74
+ export { ScreenVisibilityBehavior, type ScreenVisibilityChangeContext, ScreenVisibilityFSM, type ScreenVisibilityHandle, type ScreenVisibilityOptions, type ScreenVisibilitySize, type ScreenVisibilitySnapshot };
@@ -0,0 +1,10 @@
1
+ import {
2
+ ScreenVisibilityBehavior,
3
+ ScreenVisibilityFSM
4
+ } from "./chunk-WOMHL23C.js";
5
+ import "./chunk-EZNCCO4L.js";
6
+ export {
7
+ ScreenVisibilityBehavior,
8
+ ScreenVisibilityFSM
9
+ };
10
+ //# sourceMappingURL=screen-visibility.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,86 @@
1
+ import { a as BehaviorDescriptor } from './behavior-system-DYbx-x_-.js';
2
+ import { S as SyncStateMachine } from './sync-state-machine-CZyspBpj.js';
3
+ import 'typescript-fsm';
4
+
5
+ /**
6
+ * ScreenWrapBehavior
7
+ *
8
+ * When an entity exits the defined 2D bounds, it wraps around to the opposite edge.
9
+ * Asteroids-style screen wrapping with FSM for edge detection.
10
+ */
11
+ /**
12
+ * Screen wrap options (typed for entity.use() autocomplete)
13
+ */
14
+ interface ScreenWrapOptions {
15
+ /** Width of the wrapping area (default: 20) */
16
+ width: number;
17
+ /** Height of the wrapping area (default: 15) */
18
+ height: number;
19
+ /** Center X position (default: 0) */
20
+ centerX: number;
21
+ /** Center Y position (default: 0) */
22
+ centerY: number;
23
+ /** Distance from edge to trigger NearEdge state (default: 2) */
24
+ edgeThreshold: number;
25
+ }
26
+ /**
27
+ * ScreenWrapBehavior - Wraps entities around 2D bounds
28
+ *
29
+ * @example
30
+ * ```typescript
31
+ * import { ScreenWrapBehavior } from "@zylem/game-lib/behavior";
32
+ *
33
+ * const ship = createSprite({ ... });
34
+ * const wrapRef = ship.use(ScreenWrapBehavior, { width: 20, height: 15 });
35
+ *
36
+ * // Access FSM to observe edge state
37
+ * const fsm = wrapRef.getFSM();
38
+ * console.log(fsm?.getState()); // 'center', 'near-edge-left', 'wrapped', etc.
39
+ * ```
40
+ */
41
+ declare const ScreenWrapBehavior: BehaviorDescriptor<ScreenWrapOptions, Record<string, never>, unknown>;
42
+
43
+ /**
44
+ * ScreenWrapFSM
45
+ *
46
+ * State machine for screen wrap behavior.
47
+ * Reports position relative to bounds edges.
48
+ */
49
+
50
+ declare enum ScreenWrapState {
51
+ Center = "center",
52
+ NearEdgeLeft = "near-edge-left",
53
+ NearEdgeRight = "near-edge-right",
54
+ NearEdgeTop = "near-edge-top",
55
+ NearEdgeBottom = "near-edge-bottom",
56
+ Wrapped = "wrapped"
57
+ }
58
+ declare enum ScreenWrapEvent {
59
+ EnterCenter = "enter-center",
60
+ ApproachLeft = "approach-left",
61
+ ApproachRight = "approach-right",
62
+ ApproachTop = "approach-top",
63
+ ApproachBottom = "approach-bottom",
64
+ Wrap = "wrap"
65
+ }
66
+ declare class ScreenWrapFSM {
67
+ machine: SyncStateMachine<ScreenWrapState, ScreenWrapEvent, never>;
68
+ constructor();
69
+ getState(): ScreenWrapState;
70
+ dispatch(event: ScreenWrapEvent): void;
71
+ /**
72
+ * Update FSM based on entity position relative to bounds
73
+ */
74
+ update(position: {
75
+ x: number;
76
+ y: number;
77
+ }, bounds: {
78
+ minX: number;
79
+ maxX: number;
80
+ minY: number;
81
+ maxY: number;
82
+ edgeThreshold: number;
83
+ }, wrapped: boolean): void;
84
+ }
85
+
86
+ export { ScreenWrapBehavior, ScreenWrapEvent, ScreenWrapFSM, type ScreenWrapOptions, ScreenWrapState };
@@ -0,0 +1,16 @@
1
+ import {
2
+ ScreenWrapBehavior,
3
+ ScreenWrapEvent,
4
+ ScreenWrapFSM,
5
+ ScreenWrapState
6
+ } from "./chunk-XIJNE67Y.js";
7
+ import "./chunk-KDY5N6J4.js";
8
+ import "./chunk-4URF65BR.js";
9
+ import "./chunk-EZNCCO4L.js";
10
+ export {
11
+ ScreenWrapBehavior,
12
+ ScreenWrapEvent,
13
+ ScreenWrapFSM,
14
+ ScreenWrapState
15
+ };
16
+ //# sourceMappingURL=screen-wrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
@@ -0,0 +1,77 @@
1
+ import { a as BehaviorDescriptor } from './behavior-system-DYbx-x_-.js';
2
+ import { i as Vec3Input } from './vector-Bm65-FOG.js';
3
+ import 'three';
4
+ import '@dimforge/rapier3d-compat';
5
+
6
+ interface Shooter2DStateComponent {
7
+ cooldownRemainingMs: number;
8
+ }
9
+ declare function createShooter2DStateComponent(): Shooter2DStateComponent;
10
+
11
+ interface Shooter2DTarget {
12
+ x: number;
13
+ y: number;
14
+ }
15
+ interface Shooter2DStageLike {
16
+ add(...inputs: any[]): void;
17
+ }
18
+ interface Shooter2DProjectileEntity {
19
+ transformStore: {
20
+ velocity: {
21
+ x: number;
22
+ y: number;
23
+ z: number;
24
+ };
25
+ dirty: {
26
+ velocity: boolean;
27
+ };
28
+ };
29
+ prependSetup(callback: (params: {
30
+ me: Shooter2DProjectileEntity;
31
+ }) => void): unknown;
32
+ setPosition(x: number, y: number, z: number): void;
33
+ setRotationZ(angle: number): void;
34
+ }
35
+ type Shooter2DProjectileFactory = () => Shooter2DProjectileEntity | Promise<Shooter2DProjectileEntity>;
36
+ interface Shooter2DBehaviorOptions {
37
+ projectileFactory: Shooter2DProjectileFactory;
38
+ projectileSpeed: number;
39
+ cooldownMs?: number;
40
+ spawnOffset?: Shooter2DTarget;
41
+ rotateProjectile?: boolean;
42
+ }
43
+ interface Shooter2DSourceEntity {
44
+ body?: {
45
+ translation(): {
46
+ x: number;
47
+ y: number;
48
+ z: number;
49
+ };
50
+ rotation?: () => {
51
+ x: number;
52
+ y: number;
53
+ z: number;
54
+ w: number;
55
+ };
56
+ } | null;
57
+ options?: {
58
+ position?: Vec3Input;
59
+ };
60
+ topDownMovementState?: {
61
+ facingAngle: number;
62
+ };
63
+ shooter2dState?: Shooter2DStateComponent;
64
+ _rotation2DAngle?: number;
65
+ }
66
+ interface Shooter2DFireArgs {
67
+ source: Shooter2DSourceEntity;
68
+ stage: Shooter2DStageLike;
69
+ target: Shooter2DTarget;
70
+ }
71
+ interface Shooter2DHandle {
72
+ isReady(source: Shooter2DSourceEntity): boolean;
73
+ fire(args: Shooter2DFireArgs): Promise<Shooter2DProjectileEntity | null>;
74
+ }
75
+ declare const Shooter2DBehavior: BehaviorDescriptor<Shooter2DBehaviorOptions, Shooter2DHandle, Shooter2DSourceEntity>;
76
+
77
+ export { Shooter2DBehavior, type Shooter2DBehaviorOptions, type Shooter2DFireArgs, type Shooter2DHandle, type Shooter2DProjectileFactory, type Shooter2DSourceEntity, type Shooter2DStageLike, type Shooter2DStateComponent, type Shooter2DTarget, createShooter2DStateComponent };
@@ -0,0 +1,12 @@
1
+ import {
2
+ Shooter2DBehavior,
3
+ createShooter2DStateComponent
4
+ } from "./chunk-STCCNLPC.js";
5
+ import "./chunk-ID5QJYF5.js";
6
+ import "./chunk-WWVD5DR5.js";
7
+ import "./chunk-EZNCCO4L.js";
8
+ export {
9
+ Shooter2DBehavior,
10
+ createShooter2DStateComponent
11
+ };
12
+ //# sourceMappingURL=shooter-2d.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}