sliver-engine 0.0.1-alpha-4

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 (178) hide show
  1. package/README.md +37 -0
  2. package/dist/Assets/Shapes/Arrow.d.ts +12 -0
  3. package/dist/Assets/Shapes/Arrow.d.ts.map +1 -0
  4. package/dist/Assets/Shapes/Arrow.js +32 -0
  5. package/dist/Assets/Shapes/Arrow.js.map +1 -0
  6. package/dist/Assets/Shapes/index.d.ts +4 -0
  7. package/dist/Assets/Shapes/index.d.ts.map +1 -0
  8. package/dist/Assets/Shapes/index.js +2 -0
  9. package/dist/Assets/Shapes/index.js.map +1 -0
  10. package/dist/CanvasController/SpriteLibrary.d.ts +58 -0
  11. package/dist/CanvasController/SpriteLibrary.d.ts.map +1 -0
  12. package/dist/CanvasController/SpriteLibrary.js +412 -0
  13. package/dist/CanvasController/SpriteLibrary.js.map +1 -0
  14. package/dist/CanvasController/Transformations.d.ts +5 -0
  15. package/dist/CanvasController/Transformations.d.ts.map +1 -0
  16. package/dist/CanvasController/Transformations.js +19 -0
  17. package/dist/CanvasController/Transformations.js.map +1 -0
  18. package/dist/CanvasController/index.d.ts +238 -0
  19. package/dist/CanvasController/index.d.ts.map +1 -0
  20. package/dist/CanvasController/index.js +418 -0
  21. package/dist/CanvasController/index.js.map +1 -0
  22. package/dist/Context/index.d.ts +53 -0
  23. package/dist/Context/index.d.ts.map +1 -0
  24. package/dist/Context/index.js +103 -0
  25. package/dist/Context/index.js.map +1 -0
  26. package/dist/Events/decorators.d.ts +74 -0
  27. package/dist/Events/decorators.d.ts.map +1 -0
  28. package/dist/Events/decorators.js +417 -0
  29. package/dist/Events/decorators.js.map +1 -0
  30. package/dist/Events/index.d.ts +50 -0
  31. package/dist/Events/index.d.ts.map +1 -0
  32. package/dist/Events/index.js +73 -0
  33. package/dist/Events/index.js.map +1 -0
  34. package/dist/Events/keyAccumulator.d.ts +9 -0
  35. package/dist/Events/keyAccumulator.d.ts.map +1 -0
  36. package/dist/Events/keyAccumulator.js +17 -0
  37. package/dist/Events/keyAccumulator.js.map +1 -0
  38. package/dist/Game/Saves/index.d.ts +39 -0
  39. package/dist/Game/Saves/index.d.ts.map +1 -0
  40. package/dist/Game/Saves/index.js +213 -0
  41. package/dist/Game/Saves/index.js.map +1 -0
  42. package/dist/Game/index.d.ts +45 -0
  43. package/dist/Game/index.d.ts.map +1 -0
  44. package/dist/Game/index.js +101 -0
  45. package/dist/Game/index.js.map +1 -0
  46. package/dist/GameObject/Decorators/index.d.ts +81 -0
  47. package/dist/GameObject/Decorators/index.d.ts.map +1 -0
  48. package/dist/GameObject/Decorators/index.js +183 -0
  49. package/dist/GameObject/Decorators/index.js.map +1 -0
  50. package/dist/GameObject/Hitboxes/ColisionHandler.d.ts +23 -0
  51. package/dist/GameObject/Hitboxes/ColisionHandler.d.ts.map +1 -0
  52. package/dist/GameObject/Hitboxes/ColisionHandler.js +458 -0
  53. package/dist/GameObject/Hitboxes/ColisionHandler.js.map +1 -0
  54. package/dist/GameObject/Hitboxes/index.d.ts +50 -0
  55. package/dist/GameObject/Hitboxes/index.d.ts.map +1 -0
  56. package/dist/GameObject/Hitboxes/index.js +306 -0
  57. package/dist/GameObject/Hitboxes/index.js.map +1 -0
  58. package/dist/GameObject/Library/Button.d.ts +15 -0
  59. package/dist/GameObject/Library/Button.d.ts.map +1 -0
  60. package/dist/GameObject/Library/Button.js +45 -0
  61. package/dist/GameObject/Library/Button.js.map +1 -0
  62. package/dist/GameObject/Library/Clickableshape.d.ts +14 -0
  63. package/dist/GameObject/Library/Clickableshape.d.ts.map +1 -0
  64. package/dist/GameObject/Library/Clickableshape.js +36 -0
  65. package/dist/GameObject/Library/Clickableshape.js.map +1 -0
  66. package/dist/GameObject/Library/FloatingView.d.ts +20 -0
  67. package/dist/GameObject/Library/FloatingView.d.ts.map +1 -0
  68. package/dist/GameObject/Library/FloatingView.js +39 -0
  69. package/dist/GameObject/Library/FloatingView.js.map +1 -0
  70. package/dist/GameObject/Library/Group.d.ts +8 -0
  71. package/dist/GameObject/Library/Group.d.ts.map +1 -0
  72. package/dist/GameObject/Library/Group.js +26 -0
  73. package/dist/GameObject/Library/Group.js.map +1 -0
  74. package/dist/GameObject/Library/HoverableShape.d.ts +15 -0
  75. package/dist/GameObject/Library/HoverableShape.d.ts.map +1 -0
  76. package/dist/GameObject/Library/HoverableShape.js +41 -0
  77. package/dist/GameObject/Library/HoverableShape.js.map +1 -0
  78. package/dist/GameObject/Library/SceneTranslator.d.ts +14 -0
  79. package/dist/GameObject/Library/SceneTranslator.d.ts.map +1 -0
  80. package/dist/GameObject/Library/SceneTranslator.js +104 -0
  81. package/dist/GameObject/Library/SceneTranslator.js.map +1 -0
  82. package/dist/GameObject/Library/ScrollView.d.ts +41 -0
  83. package/dist/GameObject/Library/ScrollView.d.ts.map +1 -0
  84. package/dist/GameObject/Library/ScrollView.js +112 -0
  85. package/dist/GameObject/Library/ScrollView.js.map +1 -0
  86. package/dist/GameObject/Library/ShowOnHover.d.ts +13 -0
  87. package/dist/GameObject/Library/ShowOnHover.d.ts.map +1 -0
  88. package/dist/GameObject/Library/ShowOnHover.js +33 -0
  89. package/dist/GameObject/Library/ShowOnHover.js.map +1 -0
  90. package/dist/GameObject/Library/Text.d.ts +25 -0
  91. package/dist/GameObject/Library/Text.d.ts.map +1 -0
  92. package/dist/GameObject/Library/Text.js +35 -0
  93. package/dist/GameObject/Library/Text.js.map +1 -0
  94. package/dist/GameObject/Library/TextBox.d.ts +45 -0
  95. package/dist/GameObject/Library/TextBox.d.ts.map +1 -0
  96. package/dist/GameObject/Library/TextBox.js +170 -0
  97. package/dist/GameObject/Library/TextBox.js.map +1 -0
  98. package/dist/GameObject/Library/index.d.ts +11 -0
  99. package/dist/GameObject/Library/index.d.ts.map +1 -0
  100. package/dist/GameObject/Library/index.js +11 -0
  101. package/dist/GameObject/Library/index.js.map +1 -0
  102. package/dist/GameObject/Walker.d.ts +91 -0
  103. package/dist/GameObject/Walker.d.ts.map +1 -0
  104. package/dist/GameObject/Walker.js +634 -0
  105. package/dist/GameObject/Walker.js.map +1 -0
  106. package/dist/GameObject/index.d.ts +97 -0
  107. package/dist/GameObject/index.d.ts.map +1 -0
  108. package/dist/GameObject/index.js +386 -0
  109. package/dist/GameObject/index.js.map +1 -0
  110. package/dist/Lib/Math.d.ts +2 -0
  111. package/dist/Lib/Math.d.ts.map +1 -0
  112. package/dist/Lib/Math.js +4 -0
  113. package/dist/Lib/Math.js.map +1 -0
  114. package/dist/Lib/MinHeap/index.d.ts +12 -0
  115. package/dist/Lib/MinHeap/index.d.ts.map +1 -0
  116. package/dist/Lib/MinHeap/index.js +64 -0
  117. package/dist/Lib/MinHeap/index.js.map +1 -0
  118. package/dist/Lib/Mixins/index.d.ts +8 -0
  119. package/dist/Lib/Mixins/index.d.ts.map +1 -0
  120. package/dist/Lib/Mixins/index.js +45 -0
  121. package/dist/Lib/Mixins/index.js.map +1 -0
  122. package/dist/Lib/PathfindingProxy/index.d.ts +16 -0
  123. package/dist/Lib/PathfindingProxy/index.d.ts.map +1 -0
  124. package/dist/Lib/PathfindingProxy/index.js +48 -0
  125. package/dist/Lib/PathfindingProxy/index.js.map +1 -0
  126. package/dist/Lib/Vector/index.d.ts +24 -0
  127. package/dist/Lib/Vector/index.d.ts.map +1 -0
  128. package/dist/Lib/Vector/index.js +94 -0
  129. package/dist/Lib/Vector/index.js.map +1 -0
  130. package/dist/Lib/index.d.ts +6 -0
  131. package/dist/Lib/index.d.ts.map +1 -0
  132. package/dist/Lib/index.js +6 -0
  133. package/dist/Lib/index.js.map +1 -0
  134. package/dist/Scenes/SceneManager/Transitions.d.ts +37 -0
  135. package/dist/Scenes/SceneManager/Transitions.d.ts.map +1 -0
  136. package/dist/Scenes/SceneManager/Transitions.js +165 -0
  137. package/dist/Scenes/SceneManager/Transitions.js.map +1 -0
  138. package/dist/Scenes/SceneManager/index.d.ts +24 -0
  139. package/dist/Scenes/SceneManager/index.d.ts.map +1 -0
  140. package/dist/Scenes/SceneManager/index.js +151 -0
  141. package/dist/Scenes/SceneManager/index.js.map +1 -0
  142. package/dist/Scenes/index.d.ts +44 -0
  143. package/dist/Scenes/index.d.ts.map +1 -0
  144. package/dist/Scenes/index.js +252 -0
  145. package/dist/Scenes/index.js.map +1 -0
  146. package/dist/ScriptedEvents/Combinators/index.d.ts +17 -0
  147. package/dist/ScriptedEvents/Combinators/index.d.ts.map +1 -0
  148. package/dist/ScriptedEvents/Combinators/index.js +127 -0
  149. package/dist/ScriptedEvents/Combinators/index.js.map +1 -0
  150. package/dist/ScriptedEvents/Library/TextBoxSequence.d.ts +7 -0
  151. package/dist/ScriptedEvents/Library/TextBoxSequence.d.ts.map +1 -0
  152. package/dist/ScriptedEvents/Library/TextBoxSequence.js +16 -0
  153. package/dist/ScriptedEvents/Library/TextBoxSequence.js.map +1 -0
  154. package/dist/ScriptedEvents/Library/WaitForKeyPress.d.ts +2 -0
  155. package/dist/ScriptedEvents/Library/WaitForKeyPress.d.ts.map +1 -0
  156. package/dist/ScriptedEvents/Library/WaitForKeyPress.js +1 -0
  157. package/dist/ScriptedEvents/Library/WaitForKeyPress.js.map +1 -0
  158. package/dist/ScriptedEvents/Library/WalkCharacter.d.ts +4 -0
  159. package/dist/ScriptedEvents/Library/WalkCharacter.d.ts.map +1 -0
  160. package/dist/ScriptedEvents/Library/WalkCharacter.js +14 -0
  161. package/dist/ScriptedEvents/Library/WalkCharacter.js.map +1 -0
  162. package/dist/ScriptedEvents/Library/index.d.ts +3 -0
  163. package/dist/ScriptedEvents/Library/index.d.ts.map +1 -0
  164. package/dist/ScriptedEvents/Library/index.js +3 -0
  165. package/dist/ScriptedEvents/Library/index.js.map +1 -0
  166. package/dist/ScriptedEvents/index.d.ts +42 -0
  167. package/dist/ScriptedEvents/index.d.ts.map +1 -0
  168. package/dist/ScriptedEvents/index.js +61 -0
  169. package/dist/ScriptedEvents/index.js.map +1 -0
  170. package/dist/SoundManager/index.d.ts +69 -0
  171. package/dist/SoundManager/index.d.ts.map +1 -0
  172. package/dist/SoundManager/index.js +208 -0
  173. package/dist/SoundManager/index.js.map +1 -0
  174. package/dist/index.d.ts +19 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +19 -0
  177. package/dist/index.js.map +1 -0
  178. package/package.json +36 -0
@@ -0,0 +1,417 @@
1
+ import { Vector } from "../Lib/Vector";
2
+ const KEY_TICK_HANDLERS = Symbol.for("sliver-engine.keyTickHandlers");
3
+ function registerKeyTickHandler(target, handler) {
4
+ const record = target;
5
+ const existing = record[KEY_TICK_HANDLERS];
6
+ if (existing) {
7
+ existing.push(handler);
8
+ }
9
+ else {
10
+ record[KEY_TICK_HANDLERS] = [handler];
11
+ }
12
+ }
13
+ const matchesKeyState = (gameObject, keys) => {
14
+ const context = gameObject.getContext?.();
15
+ if (!context)
16
+ return false;
17
+ return keys.every((key) => context.isKeyPressed(key));
18
+ };
19
+ export const composeMethodDecorators = (...decorators) => {
20
+ return (target, propertyKey, descriptor) => {
21
+ return decorators.reduceRight((desc, dec) => {
22
+ const out = dec(target, propertyKey, desc);
23
+ return (out ?? desc);
24
+ }, descriptor);
25
+ };
26
+ };
27
+ /**
28
+ * Decorator for controlling whether a GameObject should handle collisions with another.
29
+ * If `predicate(self, other)` returns `false`, the decorated method returns `false`.
30
+ *
31
+ * Intended usage:
32
+ * - Apply to `GameObject.beforeColision(other)`
33
+ */
34
+ export const solidTo = (predicate) => {
35
+ return function (_target, _propertyKey, descriptor) {
36
+ const original = descriptor.value;
37
+ if (!original)
38
+ return descriptor;
39
+ descriptor.value = function (other) {
40
+ if (!predicate(this, other)) {
41
+ return false;
42
+ }
43
+ return original.call(this, other);
44
+ };
45
+ return descriptor;
46
+ };
47
+ };
48
+ /**
49
+ * Decorator for handling mouse clicks on hitboxes.
50
+ */
51
+ export const onClick = (handler) => {
52
+ return function (_target, _propertyKey, descriptor) {
53
+ const original = descriptor.value;
54
+ if (!original)
55
+ return descriptor;
56
+ descriptor.value = function (event, ...args) {
57
+ if (event.type === "mouseButtonPressed") {
58
+ const hitboxes = this.getHitboxes();
59
+ if (hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(event.x, event.y)))) {
60
+ handler(this, event);
61
+ }
62
+ }
63
+ return original.call(this, event, ...args);
64
+ };
65
+ return descriptor;
66
+ };
67
+ };
68
+ /**
69
+ * Decorator for handling mouse clicks anywhere on the canvas.
70
+ */
71
+ export const onClickAnywhere = (handler) => {
72
+ return function (_target, _propertyKey, descriptor) {
73
+ const original = descriptor.value;
74
+ if (!original)
75
+ return descriptor;
76
+ descriptor.value = function (event, ...args) {
77
+ if (event.type === "mouseButtonPressed") {
78
+ handler(this, event);
79
+ }
80
+ return original.call(this, event, ...args);
81
+ };
82
+ return descriptor;
83
+ };
84
+ };
85
+ /**
86
+ * Decorator for handling mouse clicks on hitboxes.
87
+ */
88
+ export const onMouseRelease = (handler) => {
89
+ return function (_target, _propertyKey, descriptor) {
90
+ const original = descriptor.value;
91
+ if (!original)
92
+ return descriptor;
93
+ descriptor.value = function (event, ...args) {
94
+ if (event.type === "mouseButtonReleased") {
95
+ const hitboxes = this.getHitboxes();
96
+ if (hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(event.x, event.y)))) {
97
+ handler(this, event);
98
+ }
99
+ }
100
+ return original.call(this, event, ...args);
101
+ };
102
+ return descriptor;
103
+ };
104
+ };
105
+ /**
106
+ * Decorator for handling mouse wheel scrolling anywhere on the canvas.
107
+ */
108
+ export const onMouseWheel = (handler) => {
109
+ return function (_target, _propertyKey, descriptor) {
110
+ const original = descriptor.value;
111
+ if (!original)
112
+ return descriptor;
113
+ descriptor.value = function (event, ...args) {
114
+ if (event.type === "mouseWheelScrolled") {
115
+ handler(this, event);
116
+ }
117
+ return original.call(this, event, ...args);
118
+ };
119
+ return descriptor;
120
+ };
121
+ };
122
+ /**
123
+ * Decorator for making the GameObject grabbable by the mouse
124
+ * it will check colision with all of its hitboxes and if ANY
125
+ * of them has the mouse inside, the gameObject will follow the
126
+ * mouse.
127
+ */
128
+ export const grabbable = () => {
129
+ const STATE = Symbol.for("sliver-engine.grabbableState");
130
+ const getState = (obj) => {
131
+ const record = obj;
132
+ let state = record[STATE];
133
+ if (!state) {
134
+ state = {
135
+ offset: Vector.zero(),
136
+ samples: [],
137
+ lastTickPosition: null,
138
+ stationaryTicks: 0,
139
+ throwSpeed: Vector.zero(),
140
+ lastMouseMoveTimeMs: null,
141
+ };
142
+ record[STATE] = state;
143
+ }
144
+ return state;
145
+ };
146
+ const maxSamples = 10;
147
+ const maxThrowSpeed = 30;
148
+ const stationaryEpsilonSq = 1e-6;
149
+ const stationaryTicksToZero = 2;
150
+ return function (target, _propertyKey, descriptor) {
151
+ registerKeyTickHandler(target, (obj) => {
152
+ if (!obj.beingGrabbed)
153
+ return;
154
+ const state = getState(obj);
155
+ const current = obj.getScenePosition();
156
+ if (!state.lastTickPosition) {
157
+ state.lastTickPosition = current.clone();
158
+ state.samples = [];
159
+ state.stationaryTicks = 0;
160
+ state.throwSpeed = Vector.zero();
161
+ return;
162
+ }
163
+ const delta = current.toSubtracted(state.lastTickPosition);
164
+ state.lastTickPosition = current.clone();
165
+ if (delta.squaredMagnitude() <= stationaryEpsilonSq) {
166
+ state.stationaryTicks++;
167
+ if (state.stationaryTicks >= stationaryTicksToZero) {
168
+ state.samples = [];
169
+ state.throwSpeed = Vector.zero();
170
+ }
171
+ return;
172
+ }
173
+ state.stationaryTicks = 0;
174
+ state.samples.unshift(delta);
175
+ state.samples.length = maxSamples;
176
+ const avg = state.samples.reduce((acc, v) => acc.add(v), Vector.zero());
177
+ if (state.samples.length > 0) {
178
+ avg.multiply(1 / state.samples.length);
179
+ }
180
+ if (avg.magnitude() > maxThrowSpeed) {
181
+ avg.normalize().multiply(maxThrowSpeed);
182
+ }
183
+ state.throwSpeed = avg;
184
+ });
185
+ const original = descriptor.value;
186
+ if (!original)
187
+ return descriptor;
188
+ descriptor.value = function (event, ...args) {
189
+ const state = getState(this);
190
+ const sceneOffset = this.scene?.getOffset() ?? Vector.zero();
191
+ const mouseToScene = (x, y) => new Vector(x, y).toSubtracted(sceneOffset);
192
+ const pointerInside = (x, y) => {
193
+ const hitboxes = this.getHitboxes();
194
+ return hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(x, y)));
195
+ };
196
+ if (event.type === "mouseButtonPressed") {
197
+ if (pointerInside(event.x, event.y)) {
198
+ this.beingGrabbed = true;
199
+ this.speed = Vector.zero();
200
+ this.angularVelocity = 0;
201
+ const mouseScenePos = mouseToScene(event.x, event.y);
202
+ state.offset = this.getScenePosition().toSubtracted(mouseScenePos);
203
+ state.samples = [];
204
+ state.lastTickPosition = this.getScenePosition();
205
+ state.stationaryTicks = 0;
206
+ state.throwSpeed = Vector.zero();
207
+ state.lastMouseMoveTimeMs = performance.now();
208
+ event.stopPropagation = true;
209
+ }
210
+ }
211
+ if (event.type === "mouseMoved") {
212
+ if (this.beingGrabbed) {
213
+ state.lastMouseMoveTimeMs = performance.now();
214
+ const mouseScenePos = mouseToScene(event.x, event.y);
215
+ this.setPosition(mouseScenePos.toAdded(state.offset));
216
+ this.speed = Vector.zero();
217
+ event.stopPropagation = true;
218
+ }
219
+ else if (pointerInside(event.x, event.y)) {
220
+ this.hovering = true;
221
+ }
222
+ else {
223
+ this.hovering = false;
224
+ }
225
+ }
226
+ if (event.type === "mouseButtonReleased") {
227
+ if (this.beingGrabbed) {
228
+ this.beingGrabbed = false;
229
+ const tickRate = this.getContext()?.getTickRate() ?? 60;
230
+ const tickIntervalMs = 1000 / tickRate;
231
+ const now = performance.now();
232
+ const timeSinceMove = state.lastMouseMoveTimeMs === null
233
+ ? Number.POSITIVE_INFINITY
234
+ : now - state.lastMouseMoveTimeMs;
235
+ // If the pointer has been still for at least ~1 tick before release,
236
+ // drop the throw velocity to avoid "stale" inertia.
237
+ this.speed =
238
+ timeSinceMove >= tickIntervalMs
239
+ ? Vector.zero()
240
+ : state.throwSpeed.clone();
241
+ event.stopPropagation = true;
242
+ }
243
+ }
244
+ return original.call(this, event, ...args);
245
+ };
246
+ return descriptor;
247
+ };
248
+ };
249
+ /**
250
+ * Decorator for handling mouse moving over the GameObject
251
+ */
252
+ export const onMouseMoved = (handler) => {
253
+ return function (_target, _propertyKey, descriptor) {
254
+ const original = descriptor.value;
255
+ if (!original)
256
+ return descriptor;
257
+ descriptor.value = function (event, ...args) {
258
+ if (event.type === "mouseMoved") {
259
+ const hitboxes = this.getHitboxes();
260
+ if (hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(event.x, event.y)))) {
261
+ handler(this, event);
262
+ }
263
+ }
264
+ return original.call(this, event, ...args);
265
+ };
266
+ return descriptor;
267
+ };
268
+ };
269
+ /**
270
+ * Decorator for handling mouse wheel scrolling over hitboxes.
271
+ */
272
+ export const onMouseWheelOverHitbox = (handler) => {
273
+ return function (_target, _propertyKey, descriptor) {
274
+ const original = descriptor.value;
275
+ if (!original)
276
+ return descriptor;
277
+ descriptor.value = function (event, ...args) {
278
+ if (event.type === "mouseWheelScrolled") {
279
+ const hitboxes = this.getHitboxes();
280
+ if (hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(event.x, event.y)))) {
281
+ handler(this, event);
282
+ }
283
+ }
284
+ return original.call(this, event, ...args);
285
+ };
286
+ return descriptor;
287
+ };
288
+ };
289
+ /**
290
+ * Decorator that runs the handler once when the key becomes pressed.
291
+ */
292
+ export function onKeyPressed(key, handler) {
293
+ return onKeyComboPressed([key], handler);
294
+ }
295
+ /**
296
+ * Decorator that runs the handler every tick while the key is held.
297
+ */
298
+ export function onKeyHold(key, handler) {
299
+ return onKeyComboHold([key], handler);
300
+ }
301
+ /**
302
+ * Decorator that runs the handler once when all keys in the combo become pressed.
303
+ */
304
+ export function onKeyComboPressed(keys, handler) {
305
+ const wasPressedMap = new WeakMap();
306
+ return function (target, _propertyKey, descriptor) {
307
+ // Register tick handler
308
+ registerKeyTickHandler(target, (gameObj) => {
309
+ const pressed = matchesKeyState(gameObj, keys);
310
+ const wasPressed = wasPressedMap.get(gameObj) ?? false;
311
+ if (pressed && !wasPressed) {
312
+ const lastKey = keys[keys.length - 1] ?? "";
313
+ handler(gameObj, { type: "keyPressed", key: lastKey });
314
+ }
315
+ wasPressedMap.set(gameObj, pressed);
316
+ });
317
+ // Wrap handleEvent so it still receives keyPressed while the tick handler handles the held state
318
+ const original = descriptor.value;
319
+ if (original) {
320
+ descriptor.value = function (event, ...args) {
321
+ return original.call(this, event, ...args);
322
+ };
323
+ }
324
+ return descriptor;
325
+ };
326
+ }
327
+ /**
328
+ * Decorator that runs the handler every tick while all keys in the combo are held.
329
+ */
330
+ export function onKeyComboHold(keys, handler) {
331
+ return function (target, _propertyKey, descriptor) {
332
+ // Register tick handler
333
+ registerKeyTickHandler(target, (gameObj) => {
334
+ if (matchesKeyState(gameObj, keys)) {
335
+ const lastKey = keys[keys.length - 1] ?? "";
336
+ handler(gameObj, { type: "keyPressed", key: lastKey });
337
+ }
338
+ });
339
+ // Wrap handleEvent so it still receives keyPressed while the tick handler handles the held state
340
+ const original = descriptor.value;
341
+ if (original) {
342
+ descriptor.value = function (event, ...args) {
343
+ return original.call(this, event, ...args);
344
+ };
345
+ }
346
+ return descriptor;
347
+ };
348
+ }
349
+ export function onChildrenEvents() {
350
+ return function (_target, _propertyKey, descriptor) {
351
+ const original = descriptor.value;
352
+ if (!original)
353
+ return descriptor;
354
+ descriptor.value = function (event) {
355
+ const result = original.call(this, event);
356
+ if (this.children) {
357
+ for (const child of this.children) {
358
+ if (typeof child.handleEvent === "function") {
359
+ child.handleEvent(event);
360
+ }
361
+ }
362
+ }
363
+ return result;
364
+ };
365
+ return descriptor;
366
+ };
367
+ }
368
+ /**
369
+ * Decorator for handling hover events on hitboxes.
370
+ */
371
+ export const onHover = (handler) => {
372
+ return function (_target, _propertyKey, descriptor) {
373
+ const original = descriptor.value;
374
+ if (!original)
375
+ return descriptor;
376
+ descriptor.value = function (event, ...args) {
377
+ if (event.type === "mouseMoved") {
378
+ const hitboxes = this.getHitboxes();
379
+ const isHovering = hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(event.x, event.y)));
380
+ const gameObject = this;
381
+ const objectWasHovering = !!gameObject.hovering;
382
+ if (isHovering && !objectWasHovering) {
383
+ gameObject.hovering = true;
384
+ handler(this, event);
385
+ }
386
+ }
387
+ return original.call(this, event, ...args);
388
+ };
389
+ return descriptor;
390
+ };
391
+ };
392
+ /**
393
+ * Decorator for handling stop hovering events on hitboxes.
394
+ */
395
+ export const onStopHovering = (handler) => {
396
+ return function (_target, _propertyKey, descriptor) {
397
+ const original = descriptor.value;
398
+ if (!original)
399
+ return descriptor;
400
+ descriptor.value = function (event, ...args) {
401
+ if (event.type === "mouseMoved") {
402
+ const hitboxes = this.getHitboxes();
403
+ const isHovering = hitboxes.some((hitbox) => hitbox.intersectsWithPoint(new Vector(event.x, event.y)));
404
+ const gameObject = this;
405
+ const objectWasHovering = !!gameObject.hovering;
406
+ if (!isHovering && objectWasHovering) {
407
+ gameObject.hovering = false;
408
+ handler(this, event);
409
+ }
410
+ }
411
+ return original.call(this, event, ...args);
412
+ };
413
+ return descriptor;
414
+ };
415
+ };
416
+ export { KEY_TICK_HANDLERS };
417
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/Events/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { Game } from "../Game";
2
+ import { KeyAccumulator } from "./keyAccumulator";
3
+ export type KeyPressedEvent = {
4
+ type: "keyPressed";
5
+ key: string;
6
+ stopPropagation?: boolean;
7
+ };
8
+ export type KeyReleasedEvent = {
9
+ type: "keyReleased";
10
+ key: string;
11
+ stopPropagation?: boolean;
12
+ };
13
+ export type MouseMovedEvent = {
14
+ type: "mouseMoved";
15
+ x: number;
16
+ y: number;
17
+ stopPropagation?: boolean;
18
+ };
19
+ export type MouseButtonPressedEvent = {
20
+ type: "mouseButtonPressed";
21
+ button: number;
22
+ x: number;
23
+ y: number;
24
+ stopPropagation?: boolean;
25
+ };
26
+ export type MouseButtonReleasedEvent = {
27
+ type: "mouseButtonReleased";
28
+ button: number;
29
+ x: number;
30
+ y: number;
31
+ stopPropagation?: boolean;
32
+ };
33
+ export type MouseWheelScrolledEvent = {
34
+ type: "mouseWheelScrolled";
35
+ deltaX: number;
36
+ deltaY: number;
37
+ x: number;
38
+ y: number;
39
+ stopPropagation?: boolean;
40
+ };
41
+ export type GameEvent = KeyPressedEvent | KeyReleasedEvent | MouseMovedEvent | MouseButtonPressedEvent | MouseButtonReleasedEvent | MouseWheelScrolledEvent;
42
+ declare class GameEventsdispatcher {
43
+ private game;
44
+ private keyAccumulator;
45
+ private canvasElement;
46
+ constructor(game: Game, keyAccumulator: KeyAccumulator);
47
+ dispatchEvent(event: GameEvent): void;
48
+ }
49
+ export { GameEventsdispatcher, KeyAccumulator };
50
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Events/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,IAAI,EAAE,qBAAqB,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,SAAS,GACjB,eAAe,GACf,gBAAgB,GAChB,eAAe,GACf,uBAAuB,GACvB,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,cAAM,oBAAoB;IAGZ,OAAO,CAAC,IAAI;IAAQ,OAAO,CAAC,cAAc;IAFtD,OAAO,CAAC,aAAa,CAAoB;gBAErB,IAAI,EAAE,IAAI,EAAU,cAAc,EAAE,cAAc;IAuEtE,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;CAGtC;AAED,OAAO,EAAE,oBAAoB,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,73 @@
1
+ import { KeyAccumulator } from "./keyAccumulator";
2
+ class GameEventsdispatcher {
3
+ game;
4
+ keyAccumulator;
5
+ canvasElement;
6
+ constructor(game, keyAccumulator) {
7
+ this.game = game;
8
+ this.keyAccumulator = keyAccumulator;
9
+ this.canvasElement = game.canvas.getCanvas();
10
+ // Keyboard events
11
+ window.addEventListener("keydown", (e) => {
12
+ const event = { type: "keyPressed", key: e.key };
13
+ this.keyAccumulator.handleKeyDown(e.key);
14
+ this.dispatchEvent(event);
15
+ });
16
+ window.addEventListener("keyup", (e) => {
17
+ const event = { type: "keyReleased", key: e.key };
18
+ this.keyAccumulator.handleKeyUp(e.key);
19
+ this.dispatchEvent(event);
20
+ });
21
+ // Mouse events
22
+ this.canvasElement.addEventListener("mousemove", (e) => {
23
+ const rect = this.canvasElement.getBoundingClientRect();
24
+ const x = e.clientX - rect.left;
25
+ const y = e.clientY - rect.top;
26
+ const event = { type: "mouseMoved", x, y };
27
+ this.dispatchEvent(event);
28
+ });
29
+ this.canvasElement.addEventListener("mousedown", (e) => {
30
+ const rect = this.canvasElement.getBoundingClientRect();
31
+ const x = e.clientX - rect.left;
32
+ const y = e.clientY - rect.top;
33
+ const event = {
34
+ type: "mouseButtonPressed",
35
+ button: e.button,
36
+ x,
37
+ y,
38
+ };
39
+ this.dispatchEvent(event);
40
+ });
41
+ this.canvasElement.addEventListener("mouseup", (e) => {
42
+ const rect = this.canvasElement.getBoundingClientRect();
43
+ const x = e.clientX - rect.left;
44
+ const y = e.clientY - rect.top;
45
+ const event = {
46
+ type: "mouseButtonReleased",
47
+ button: e.button,
48
+ x,
49
+ y,
50
+ };
51
+ this.dispatchEvent(event);
52
+ });
53
+ this.canvasElement.addEventListener("wheel", (e) => {
54
+ e.preventDefault();
55
+ const rect = this.canvasElement.getBoundingClientRect();
56
+ const x = e.clientX - rect.left;
57
+ const y = e.clientY - rect.top;
58
+ const event = {
59
+ type: "mouseWheelScrolled",
60
+ deltaX: e.deltaX,
61
+ deltaY: e.deltaY,
62
+ x,
63
+ y,
64
+ };
65
+ this.dispatchEvent(event);
66
+ }, { passive: false });
67
+ }
68
+ dispatchEvent(event) {
69
+ this.game.handleEvent(event);
70
+ }
71
+ }
72
+ export { GameEventsdispatcher, KeyAccumulator };
73
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Events/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ declare class KeyAccumulator {
2
+ private pressedKeys;
3
+ handleKeyDown(key: string): void;
4
+ handleKeyUp(key: string): void;
5
+ getPressedKeys(): string[];
6
+ isPressed(key: string): boolean;
7
+ }
8
+ export { KeyAccumulator };
9
+ //# sourceMappingURL=keyAccumulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyAccumulator.d.ts","sourceRoot":"","sources":["../../src/Events/keyAccumulator.ts"],"names":[],"mappings":"AAAA,cAAM,cAAc;IAClB,OAAO,CAAC,WAAW,CAAqB;IAExC,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIhC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9B,cAAc,IAAI,MAAM,EAAE;IAI1B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAGhC;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,17 @@
1
+ class KeyAccumulator {
2
+ pressedKeys = new Set();
3
+ handleKeyDown(key) {
4
+ this.pressedKeys.add(key);
5
+ }
6
+ handleKeyUp(key) {
7
+ this.pressedKeys.delete(key);
8
+ }
9
+ getPressedKeys() {
10
+ return Array.from(this.pressedKeys);
11
+ }
12
+ isPressed(key) {
13
+ return this.pressedKeys.has(key);
14
+ }
15
+ }
16
+ export { KeyAccumulator };
17
+ //# sourceMappingURL=keyAccumulator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keyAccumulator.js","sourceRoot":"","sources":["../../src/Events/keyAccumulator.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc;IACV,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IAExC,aAAa,CAAC,GAAW;QACvB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,WAAW,CAAC,GAAW;QACrB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAED,cAAc;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACtC,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;CACF;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ type SaveId = string;
2
+ type SaveIndexEntry = {
3
+ id: SaveId;
4
+ createdAt: number;
5
+ updatedAt: number;
6
+ label?: string;
7
+ };
8
+ type SaveFile<T = unknown> = SaveIndexEntry & {
9
+ data: T;
10
+ };
11
+ type GameSavesOptions = {
12
+ namespace?: string;
13
+ };
14
+ declare class GameSaves {
15
+ private namespace;
16
+ private onLoadSaveFileCallback;
17
+ constructor(options?: GameSavesOptions);
18
+ onLoadSaveFile(callback: ((save: SaveFile) => void) | null): this;
19
+ create<T = unknown>(data: T, options?: {
20
+ label?: string;
21
+ id?: SaveId;
22
+ }): SaveId;
23
+ write<T = unknown>(id: SaveId, data: T, options?: {
24
+ label?: string;
25
+ createIfMissing?: boolean;
26
+ }): void;
27
+ read<T = unknown>(id: SaveId): SaveFile<T> | null;
28
+ list(): SaveIndexEntry[];
29
+ loadAll(): SaveFile[];
30
+ delete(id: SaveId): void;
31
+ clear(): void;
32
+ private indexKey;
33
+ private saveKey;
34
+ private readIndex;
35
+ private writeIndex;
36
+ }
37
+ export { GameSaves };
38
+ export type { GameSavesOptions, SaveFile, SaveId, SaveIndexEntry };
39
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/Game/Saves/index.ts"],"names":[],"mappings":"AAAA,KAAK,MAAM,GAAG,MAAM,CAAC;AAErB,KAAK,cAAc,GAAG;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI,cAAc,GAAG;IAC5C,IAAI,EAAE,CAAC,CAAC;CACT,CAAC;AAEF,KAAK,gBAAgB,GAAG;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAsFF,cAAM,SAAS;IACb,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,sBAAsB,CAA2C;gBAE7D,OAAO,CAAC,EAAE,gBAAgB;IAItC,cAAc,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC,GAAG,IAAI,GAAG,IAAI;IAKjE,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAM/E,KAAK,CAAC,CAAC,GAAG,OAAO,EACf,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,OAAO,CAAA;KAAE,GACtD,IAAI;IAgCP,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,EAAE,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI;IAyBjD,IAAI,IAAI,cAAc,EAAE;IAQxB,OAAO,IAAI,QAAQ,EAAE;IA0BrB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAWxB,KAAK,IAAI,IAAI;IAab,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,SAAS;IA2BjB,OAAO,CAAC,UAAU;CAGnB;AAED,OAAO,EAAE,SAAS,EAAE,CAAC;AACrB,YAAY,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC"}