dino-ge 1.6.0 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/Engine.d.ts CHANGED
@@ -20,7 +20,7 @@ export interface EngineOpts {
20
20
  */
21
21
  export interface EngineCallbacks {
22
22
  /** Called once after the engine is initialized. */
23
- onLoad: () => void;
23
+ onLoad?: () => void;
24
24
  /** Called every frame for game logic and rendering. */
25
25
  update: () => void;
26
26
  /** Optional callback for physics or fixed-step logic. */
@@ -34,13 +34,12 @@ export declare class ObjectSet extends Set<GameObject> {
34
34
  * Find all objects with a specific tag.
35
35
  * @param tag The tag to search for.
36
36
  */
37
- findAll: (tag: string) => GameObject[];
37
+ findAll: (tag?: string) => GameObject[];
38
38
  }
39
39
  /**
40
40
  * The core singleton class that manages the game loop, rendering, and scene state.
41
41
  */
42
42
  export default class Engine {
43
- #private;
44
43
  /**
45
44
  * Global set of game objects if no scene is active.
46
45
  */
@@ -104,6 +103,10 @@ export default class Engine {
104
103
  * Sets the active scene, resetting the camera and calling the scene's onLoad.
105
104
  */
106
105
  static set currentScene(scene: Scene);
106
+ private _canvas;
107
+ private _ctx;
108
+ private _window;
109
+ private _title;
107
110
  /** Current background colour. */
108
111
  backgroundColour: string;
109
112
  /** Registered engine callbacks. */
@@ -118,7 +121,18 @@ export default class Engine {
118
121
  get mouseY(): number;
119
122
  /** Current frames per second. */
120
123
  fps: number;
124
+ private _oldTimestamp;
125
+ private _secondsPassed;
126
+ private _accumulator;
127
+ private _fixedDelta;
121
128
  constructor(callbacks: EngineCallbacks, opts?: Partial<EngineOpts>);
129
+ private _onLoad;
130
+ private _update;
131
+ private _fixedUpdate;
132
+ private _setBackground;
133
+ private _draw;
134
+ private _drawDebug;
135
+ private _findAllObjects;
122
136
  /**
123
137
  * Promisified setTimeout.
124
138
  * @param timeoutFn The function to run after the timeout.
package/dist/Engine.js CHANGED
@@ -7,18 +7,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
- var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
11
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
12
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
13
- return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
14
- };
15
- var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
16
- if (kind === "m") throw new TypeError("Private method is not writable");
17
- if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
18
- if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
19
- return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
20
- };
21
- var _Engine_instances, _a, _Engine_canvas, _Engine_ctx, _Engine_window, _Engine_title, _Engine_oldTimestamp, _Engine_secondsPassed, _Engine_accumulator, _Engine_fixedDelta, _Engine_onLoad, _Engine_update, _Engine_fixedUpdate, _Engine_setBackground, _Engine_draw, _Engine_drawDebug, _Engine_findAllObjects;
22
10
  import Canvas from './Canvas.js';
23
11
  import Input from './Input.js';
24
12
  import Camera from './Camera.js';
@@ -54,7 +42,7 @@ globalThis.__DINO_ENGINE_STATE__ = _globalState;
54
42
  /**
55
43
  * The core singleton class that manages the game loop, rendering, and scene state.
56
44
  */
57
- class Engine {
45
+ export default class Engine {
58
46
  /**
59
47
  * Global set of game objects if no scene is active.
60
48
  */
@@ -148,53 +136,168 @@ class Engine {
148
136
  return Input.mouseY;
149
137
  }
150
138
  constructor(callbacks, opts = {}) {
151
- _Engine_instances.add(this);
152
- _Engine_canvas.set(this, void 0);
153
- _Engine_ctx.set(this, void 0);
154
- _Engine_window.set(this, void 0);
155
- _Engine_title.set(this, void 0);
156
139
  /** Current frames per second. */
157
140
  this.fps = 0;
158
- _Engine_oldTimestamp.set(this, 0);
159
- _Engine_secondsPassed.set(this, 0);
160
- _Engine_accumulator.set(this, 0);
161
- _Engine_fixedDelta.set(this, 1 / 60);
141
+ this._oldTimestamp = 0;
142
+ this._secondsPassed = 0;
143
+ this._accumulator = 0;
144
+ this._fixedDelta = 1 / 60;
162
145
  const defaultedOpts = Object.assign({ width: '100%', height: '100%', title: 'Example', backgroundColour: 'white' }, opts);
163
- _a.objects.findAll = __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_findAllObjects).bind(this);
164
- __classPrivateFieldSet(this, _Engine_title, document.createElement('title'), "f");
165
- __classPrivateFieldGet(this, _Engine_title, "f").innerHTML = defaultedOpts.title;
166
- document.getElementsByTagName('head')[0].appendChild(__classPrivateFieldGet(this, _Engine_title, "f"));
146
+ Engine.objects.findAll = this._findAllObjects.bind(this);
147
+ this._title = document.createElement('title');
148
+ this._title.innerHTML = defaultedOpts.title;
149
+ const heads = document.getElementsByTagName('head');
150
+ if (heads.length > 0) {
151
+ heads[0].appendChild(this._title);
152
+ }
153
+ else {
154
+ document.documentElement.appendChild(document.createElement('head')).appendChild(this._title);
155
+ }
167
156
  this.backgroundColour = defaultedOpts.backgroundColour;
168
157
  this.callbacks = {
169
158
  onLoad: () => {
170
- callbacks.onLoad();
171
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_onLoad).call(this);
159
+ var _a;
160
+ (_a = callbacks.onLoad) === null || _a === void 0 ? void 0 : _a.call(callbacks);
161
+ this._onLoad();
172
162
  },
173
163
  update: callbacks.update,
164
+ fixedUpdate: callbacks.fixedUpdate,
174
165
  };
175
- __classPrivateFieldSet(this, _Engine_canvas, new Canvas(), "f");
176
- __classPrivateFieldSet(this, _Engine_ctx, __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.getContext('2d'), "f");
177
- this.width = __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.width;
178
- this.height = __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.height;
179
- if (_a.renderingSystem) {
180
- _a.renderingSystem.setContext(__classPrivateFieldGet(this, _Engine_ctx, "f"));
166
+ this._canvas = new Canvas();
167
+ this._ctx = this._canvas.canvas.getContext('2d');
168
+ this.width = this._canvas.canvas.width;
169
+ this.height = this._canvas.canvas.height;
170
+ if (Engine.renderingSystem) {
171
+ Engine.renderingSystem.setContext(this._ctx);
181
172
  }
182
173
  else {
183
- _a.renderingSystem = new RenderingSystem(__classPrivateFieldGet(this, _Engine_ctx, "f"));
174
+ Engine.renderingSystem = new RenderingSystem(this._ctx);
184
175
  }
185
- __classPrivateFieldSet(this, _Engine_window, document.createElement('div'), "f");
186
- __classPrivateFieldGet(this, _Engine_window, "f").id = 'canvas-container';
187
- __classPrivateFieldGet(this, _Engine_window, "f").style.width = defaultedOpts.width;
188
- __classPrivateFieldGet(this, _Engine_window, "f").style.height = defaultedOpts.height;
176
+ this._window = document.createElement('div');
177
+ this._window.id = 'canvas-container';
178
+ this._window.style.width = defaultedOpts.width;
179
+ this._window.style.height = defaultedOpts.height;
189
180
  Input.init();
190
181
  window.addEventListener('resize', () => {
191
- __classPrivateFieldGet(this, _Engine_canvas, "f").resize();
192
- this.width = __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.width;
193
- this.height = __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.height;
182
+ this._canvas.resize();
183
+ this.width = this._canvas.canvas.width;
184
+ this.height = this._canvas.canvas.height;
194
185
  });
195
- document.getElementsByTagName('body')[0].appendChild(__classPrivateFieldGet(this, _Engine_window, "f"));
196
- __classPrivateFieldGet(this, _Engine_window, "f").appendChild(__classPrivateFieldGet(this, _Engine_canvas, "f").canvas);
197
- setTimeout(() => this.callbacks.onLoad(), 0);
186
+ const bodies = document.getElementsByTagName('body');
187
+ if (bodies.length > 0) {
188
+ bodies[0].appendChild(this._window);
189
+ }
190
+ this._window.appendChild(this._canvas.canvas);
191
+ setTimeout(() => { var _a, _b; return (_b = (_a = this.callbacks).onLoad) === null || _b === void 0 ? void 0 : _b.call(_a); }, 0);
192
+ }
193
+ _onLoad() {
194
+ this._draw();
195
+ window.requestAnimationFrame(this._update.bind(this));
196
+ }
197
+ _update(timestamp) {
198
+ if (!Engine.paused) {
199
+ this._secondsPassed = (timestamp - this._oldTimestamp) / 1000;
200
+ this._oldTimestamp = timestamp;
201
+ this.fps = Math.round(1 / this._secondsPassed);
202
+ // Fixed update loop
203
+ this._accumulator += this._secondsPassed;
204
+ while (this._accumulator >= this._fixedDelta) {
205
+ this._fixedUpdate();
206
+ this._accumulator -= this._fixedDelta;
207
+ }
208
+ if (Engine.currentScene) {
209
+ Engine.currentScene.update();
210
+ }
211
+ this.callbacks.update();
212
+ this._draw();
213
+ }
214
+ else {
215
+ // Still allow drawing in paused mode if debug is on or for initial frame
216
+ this._draw();
217
+ }
218
+ window.requestAnimationFrame(this._update.bind(this));
219
+ }
220
+ _fixedUpdate() {
221
+ const objects = Engine.currentScene ? Engine.currentScene.objects : Engine.objects;
222
+ Engine._systems.forEach((system) => {
223
+ if (system.fixedUpdate) {
224
+ system.fixedUpdate(objects, this._fixedDelta);
225
+ }
226
+ });
227
+ if (this.callbacks.fixedUpdate) {
228
+ this.callbacks.fixedUpdate();
229
+ }
230
+ }
231
+ _setBackground() {
232
+ if (this._ctx) {
233
+ this._ctx.fillStyle = this.backgroundColour;
234
+ this._ctx.fillRect(0, 0, this._canvas.canvas.width, this._canvas.canvas.height);
235
+ }
236
+ }
237
+ _draw() {
238
+ this._setBackground();
239
+ const objects = Engine.currentScene ? Engine.currentScene.objects : Engine.objects;
240
+ if (Engine.renderingSystem) {
241
+ Engine.renderingSystem.update(objects, 0, Engine.debug);
242
+ }
243
+ if (Engine.debug) {
244
+ this._drawDebug(objects);
245
+ }
246
+ }
247
+ _drawDebug(objects) {
248
+ var _a, _b, _c, _d;
249
+ // Draw Stats Overlay (Top Right)
250
+ this._ctx.save();
251
+ this._ctx.setTransform(1, 0, 0, 1, 0, 0); // Reset transform for UI
252
+ const overlayWidth = 180;
253
+ const statsHeight = 80;
254
+ const padding = 10;
255
+ const x = this._canvas.canvas.width - overlayWidth - padding;
256
+ let y = padding;
257
+ // Background for Stats
258
+ this._ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';
259
+ this._ctx.fillRect(x, y, overlayWidth, statsHeight);
260
+ this._ctx.fillStyle = 'white';
261
+ this._ctx.textAlign = 'left';
262
+ this._ctx.textBaseline = 'top';
263
+ this._ctx.fillText(`FPS: ${this.fps}`, x + 10, y + 10);
264
+ this._ctx.fillText(`Objects: ${objects.size}`, x + 10, y + 25);
265
+ this._ctx.fillText(`Mouse X: ${Math.round(this.mouseX)}`, x + 10, y + 45);
266
+ this._ctx.fillText(`Mouse Y: ${Math.round(this.mouseY)}`, x + 10, y + 60);
267
+ // Inspector Panel (If object selected)
268
+ if (Engine.selectedObject) {
269
+ y += statsHeight + 10;
270
+ const obj = Engine.selectedObject;
271
+ const properties = [
272
+ ['Pos', `${Math.round(obj.transform.position.x)}, ${Math.round(obj.transform.position.y)}`],
273
+ ['Size', `${Math.round((_b = (_a = obj.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0)}x${Math.round((_d = (_c = obj.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0)}`]
274
+ ];
275
+ const tagComp = obj.metadata;
276
+ if (tagComp) {
277
+ properties.unshift(['Tag', tagComp.tag]);
278
+ properties.push(['Z-Index', tagComp.zIndex]);
279
+ }
280
+ const physComp = obj.getComponent(PhysicsComponent);
281
+ if (physComp) {
282
+ properties.push(['Vel', `${Math.round(physComp.velocity.x)}, ${Math.round(physComp.velocity.y)}`]);
283
+ properties.push(['Acc', `${Math.round(physComp.acceleration.x)}, ${Math.round(physComp.acceleration.y)}`]);
284
+ }
285
+ const inspectorHeight = 20 + (properties.length * 15);
286
+ this._ctx.fillStyle = 'rgba(0, 0, 0, 0.7)';
287
+ this._ctx.fillRect(x, y, overlayWidth, inspectorHeight);
288
+ this._ctx.strokeStyle = '#00ff00';
289
+ this._ctx.strokeRect(x, y, overlayWidth, inspectorHeight);
290
+ this._ctx.fillStyle = '#00ff00';
291
+ this._ctx.fillText('INSPECTOR', x + 10, y + 5);
292
+ this._ctx.fillStyle = 'white';
293
+ properties.forEach(([key, val], i) => {
294
+ this._ctx.fillText(`${key}: ${val}`, x + 10, y + 20 + (i * 15));
295
+ });
296
+ }
297
+ this._ctx.restore();
298
+ }
299
+ _findAllObjects(tag = '') {
300
+ return Array.from(Engine.objects).filter((obj) => obj.metadata.tag === tag);
198
301
  }
199
302
  /**
200
303
  * Promisified setTimeout.
@@ -234,8 +337,8 @@ class Engine {
234
337
  * @param object The object to register.
235
338
  */
236
339
  static registerObject(object) {
237
- if (_a.currentScene) {
238
- _a.currentScene.add(object);
340
+ if (Engine.currentScene) {
341
+ Engine.currentScene.add(object);
239
342
  }
240
343
  else {
241
344
  this.objects.add(object);
@@ -246,8 +349,8 @@ class Engine {
246
349
  * @param object The object to destroy.
247
350
  */
248
351
  static destroyObject(object) {
249
- if (_a.currentScene) {
250
- _a.currentScene.remove(object);
352
+ if (Engine.currentScene) {
353
+ Engine.currentScene.remove(object);
251
354
  }
252
355
  else {
253
356
  this.objects.delete(object);
@@ -255,114 +358,12 @@ class Engine {
255
358
  }
256
359
  /** Destroy all objects in the active scene or global engine. */
257
360
  static destroyAll() {
258
- if (_a.currentScene) {
259
- _a.currentScene.clear();
361
+ if (Engine.currentScene) {
362
+ Engine.currentScene.clear();
260
363
  }
261
364
  else {
262
365
  this.objects.clear();
263
366
  }
264
367
  }
265
368
  }
266
- _a = Engine, _Engine_canvas = new WeakMap(), _Engine_ctx = new WeakMap(), _Engine_window = new WeakMap(), _Engine_title = new WeakMap(), _Engine_oldTimestamp = new WeakMap(), _Engine_secondsPassed = new WeakMap(), _Engine_accumulator = new WeakMap(), _Engine_fixedDelta = new WeakMap(), _Engine_instances = new WeakSet(), _Engine_onLoad = function _Engine_onLoad() {
267
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_draw).call(this);
268
- window.requestAnimationFrame(__classPrivateFieldGet(this, _Engine_instances, "m", _Engine_update).bind(this));
269
- }, _Engine_update = function _Engine_update(timestamp) {
270
- if (!_a.paused) {
271
- __classPrivateFieldSet(this, _Engine_secondsPassed, (timestamp - __classPrivateFieldGet(this, _Engine_oldTimestamp, "f")) / 1000, "f");
272
- __classPrivateFieldSet(this, _Engine_oldTimestamp, timestamp, "f");
273
- this.fps = Math.round(1 / __classPrivateFieldGet(this, _Engine_secondsPassed, "f"));
274
- // Fixed update loop
275
- __classPrivateFieldSet(this, _Engine_accumulator, __classPrivateFieldGet(this, _Engine_accumulator, "f") + __classPrivateFieldGet(this, _Engine_secondsPassed, "f"), "f");
276
- while (__classPrivateFieldGet(this, _Engine_accumulator, "f") >= __classPrivateFieldGet(this, _Engine_fixedDelta, "f")) {
277
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_fixedUpdate).call(this);
278
- __classPrivateFieldSet(this, _Engine_accumulator, __classPrivateFieldGet(this, _Engine_accumulator, "f") - __classPrivateFieldGet(this, _Engine_fixedDelta, "f"), "f");
279
- }
280
- if (_a.currentScene) {
281
- _a.currentScene.update();
282
- }
283
- this.callbacks.update();
284
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_draw).call(this);
285
- }
286
- else {
287
- // Still allow drawing in paused mode if debug is on or for initial frame
288
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_draw).call(this);
289
- }
290
- window.requestAnimationFrame(__classPrivateFieldGet(this, _Engine_instances, "m", _Engine_update).bind(this));
291
- }, _Engine_fixedUpdate = function _Engine_fixedUpdate() {
292
- const objects = _a.currentScene ? _a.currentScene.objects : _a.objects;
293
- _a._systems.forEach((system) => {
294
- if (system.fixedUpdate) {
295
- system.fixedUpdate(objects, __classPrivateFieldGet(this, _Engine_fixedDelta, "f"));
296
- }
297
- });
298
- if (this.callbacks.fixedUpdate) {
299
- this.callbacks.fixedUpdate();
300
- }
301
- }, _Engine_setBackground = function _Engine_setBackground() {
302
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillStyle = this.backgroundColour;
303
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillRect(0, 0, __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.width, __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.height);
304
- }, _Engine_draw = function _Engine_draw() {
305
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_setBackground).call(this);
306
- const objects = _a.currentScene ? _a.currentScene.objects : _a.objects;
307
- if (_a.renderingSystem) {
308
- _a.renderingSystem.update(objects, 0, _a.debug);
309
- }
310
- if (_a.debug) {
311
- __classPrivateFieldGet(this, _Engine_instances, "m", _Engine_drawDebug).call(this, objects);
312
- }
313
- }, _Engine_drawDebug = function _Engine_drawDebug(objects) {
314
- var _b, _c, _d, _e;
315
- // Draw Stats Overlay (Top Right)
316
- __classPrivateFieldGet(this, _Engine_ctx, "f").save();
317
- __classPrivateFieldGet(this, _Engine_ctx, "f").setTransform(1, 0, 0, 1, 0, 0); // Reset transform for UI
318
- const overlayWidth = 180;
319
- const statsHeight = 80;
320
- const padding = 10;
321
- const x = __classPrivateFieldGet(this, _Engine_canvas, "f").canvas.width - overlayWidth - padding;
322
- let y = padding;
323
- // Background for Stats
324
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillStyle = 'rgba(0, 0, 0, 0.7)';
325
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillRect(x, y, overlayWidth, statsHeight);
326
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillStyle = 'white';
327
- __classPrivateFieldGet(this, _Engine_ctx, "f").textAlign = 'left';
328
- __classPrivateFieldGet(this, _Engine_ctx, "f").textBaseline = 'top';
329
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillText(`FPS: ${this.fps}`, x + 10, y + 10);
330
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillText(`Objects: ${objects.size}`, x + 10, y + 25);
331
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillText(`Mouse X: ${Math.round(this.mouseX)}`, x + 10, y + 45);
332
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillText(`Mouse Y: ${Math.round(this.mouseY)}`, x + 10, y + 60);
333
- // Inspector Panel (If object selected)
334
- if (_a.selectedObject) {
335
- y += statsHeight + 10;
336
- const obj = _a.selectedObject;
337
- const properties = [
338
- ['Pos', `${Math.round(obj.transform.position.x)}, ${Math.round(obj.transform.position.y)}`],
339
- ['Size', `${Math.round((_c = (_b = obj.bounds) === null || _b === void 0 ? void 0 : _b.width) !== null && _c !== void 0 ? _c : 0)}x${Math.round((_e = (_d = obj.bounds) === null || _d === void 0 ? void 0 : _d.height) !== null && _e !== void 0 ? _e : 0)}`]
340
- ];
341
- const tagComp = obj.metadata;
342
- if (tagComp) {
343
- properties.unshift(['Tag', tagComp.tag]);
344
- properties.push(['Z-Index', tagComp.zIndex]);
345
- }
346
- const physComp = obj.getComponent(PhysicsComponent);
347
- if (physComp) {
348
- properties.push(['Vel', `${Math.round(physComp.velocity.x)}, ${Math.round(physComp.velocity.y)}`]);
349
- properties.push(['Acc', `${Math.round(physComp.acceleration.x)}, ${Math.round(physComp.acceleration.y)}`]);
350
- }
351
- const inspectorHeight = 20 + (properties.length * 15);
352
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillStyle = 'rgba(0, 0, 0, 0.7)';
353
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillRect(x, y, overlayWidth, inspectorHeight);
354
- __classPrivateFieldGet(this, _Engine_ctx, "f").strokeStyle = '#00ff00';
355
- __classPrivateFieldGet(this, _Engine_ctx, "f").strokeRect(x, y, overlayWidth, inspectorHeight);
356
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillStyle = '#00ff00';
357
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillText('INSPECTOR', x + 10, y + 5);
358
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillStyle = 'white';
359
- properties.forEach(([key, val], i) => {
360
- __classPrivateFieldGet(this, _Engine_ctx, "f").fillText(`${key}: ${val}`, x + 10, y + 20 + (i * 15));
361
- });
362
- }
363
- __classPrivateFieldGet(this, _Engine_ctx, "f").restore();
364
- }, _Engine_findAllObjects = function _Engine_findAllObjects(tag = '') {
365
- return Array.from(_a.objects).filter((obj) => obj.metadata.tag === tag);
366
- };
367
- export default Engine;
368
369
  //# sourceMappingURL=Engine.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;AA4BrD;;GAEG;AACH,MAAM,OAAO,SAAU,SAAQ,GAAe;IAA9C;;QACE;;;WAGG;QACH,YAAO,GAAkC,GAAG,EAAE,CAAC,EAAE,CAAC;IACpD,CAAC;CAAA;AAgBD;;GAEG;AACH,MAAM,YAAY,GAAiB,UAAiE,CAAC,qBAAqB,IAAI;IAC5H,OAAO,EAAE,IAAI,SAAS,EAAE;IACxB,MAAM,EAAE,KAAK;IACb,KAAK,EAAE,KAAK;IACZ,cAAc,EAAE,IAAI;IACpB,MAAM,EAAE,IAAI,MAAM,EAAE;IACpB,OAAO,EAAE,CAAC,IAAI,aAAa,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,WAAW,EAAE;CAC1B,CAAC;AACD,UAAiE,CAAC,qBAAqB,GAAG,YAAY,CAAC;AAExG;;GAEG;AACH,MAAqB,MAAM;IACzB;;OAEG;IACI,MAAM,KAAK,OAAO,KAAgB,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAEvE;;OAEG;IACK,MAAM,KAAK,QAAQ,KAAe,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAExE;;OAEG;IACI,MAAM,KAAK,eAAe,KAAkC,OAAO,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC;IAClG,MAAM,KAAK,eAAe,CAAC,GAAgC,IAAI,YAAY,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC;IAE3G;;OAEG;IACI,MAAM,KAAK,MAAM,KAAc,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5D,MAAM,KAAK,MAAM,CAAC,GAAY;QACnC,IAAI,YAAY,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAChC,YAAY,CAAC,MAAM,GAAG,GAAG,CAAC;YAC1B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,KAAK,KAAc,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC1D,MAAM,KAAK,KAAK,CAAC,GAAY;QAClC,IAAI,YAAY,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;YAC/B,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACK,MAAM,KAAK,MAAM,KAAkB,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAExE;;;;OAIG;IACI,MAAM,CAAC,EAAE,CAAC,IAAY,EAAE,QAAsC;QACnE,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAA8B,CAAC,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,GAAG,CAAC,IAAY,EAAE,QAAsC;QACpE,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAA8B,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,IAAI,CAAC,IAAY,EAAE,MAAgB;QAC/C,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC/D,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,cAAc,KAAwB,OAAO,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC;IACtF,MAAM,KAAK,cAAc,CAAC,GAAsB,IAAI,YAAY,CAAC,cAAc,GAAG,GAAG,CAAC,CAAC,CAAC;IAE/F;;OAEG;IACI,MAAM,KAAK,MAAM,KAAa,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;IAIlE;;OAEG;IACI,MAAM,KAAK,YAAY;QAC5B,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,MAAM,KAAK,YAAY,CAAC,KAAY;QACzC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IAiBD,+CAA+C;IAC/C,IAAI,MAAM;QACR,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,+CAA+C;IAC/C,IAAI,MAAM;QACR,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IASD,YAAY,SAA0B,EAAE,OAA4B,EAAE;;QAhCtE,iCAAgB;QAChB,8BAAgC;QAChC,iCAAwB;QACxB,gCAAyB;QAsBzB,iCAAiC;QACjC,QAAG,GAAW,CAAC,CAAC;QAChB,+BAAwB,CAAC,EAAC;QAC1B,gCAAyB,CAAC,EAAC;QAC3B,8BAAuB,CAAC,EAAC;QACzB,6BAAsB,CAAC,GAAG,EAAE,EAAC;QAG3B,MAAM,aAAa,mBACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,SAAS,EAChB,gBAAgB,EAAE,OAAO,IACtB,IAAI,CACR,CAAC;QAGF,EAAM,CAAC,OAAO,CAAC,OAAO,GAAG,uBAAA,IAAI,iDAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEzD,uBAAA,IAAI,iBAAU,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,MAAA,CAAC;QAC9C,uBAAA,IAAI,qBAAO,CAAC,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC;QAC5C,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,uBAAA,IAAI,qBAAO,CAAC,CAAC;QAElE,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC,gBAAgB,CAAC;QAEvD,IAAI,CAAC,SAAS,GAAG;YACf,MAAM,EAAE,GAAG,EAAE;gBACX,SAAS,CAAC,MAAM,EAAE,CAAC;gBACnB,uBAAA,IAAI,yCAAQ,MAAZ,IAAI,CAAU,CAAC;YACjB,CAAC;YACD,MAAM,EAAE,SAAS,CAAC,MAAM;SACzB,CAAC;QAEF,uBAAA,IAAI,kBAAW,IAAI,MAAM,EAAE,MAAA,CAAC;QAC5B,uBAAA,IAAI,eAAQ,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,MAAA,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,MAAM,GAAG,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAEzC,IAAI,EAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,EAAM,CAAC,eAAe,CAAC,UAAU,CAAC,uBAAA,IAAI,mBAAK,CAAC,CAAC;QAC/C,CAAC;aAAM,CAAC;YACN,EAAM,CAAC,eAAe,GAAG,IAAI,eAAe,CAAC,uBAAA,IAAI,mBAAK,CAAC,CAAC;QAC1D,CAAC;QAED,uBAAA,IAAI,kBAAW,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,MAAA,CAAC;QAC7C,uBAAA,IAAI,sBAAQ,CAAC,EAAE,GAAG,kBAAkB,CAAC;QACrC,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC;QAC/C,uBAAA,IAAI,sBAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;QAEjD,KAAK,CAAC,IAAI,EAAE,CAAC;QAEb,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACrC,uBAAA,IAAI,sBAAQ,CAAC,MAAM,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;YACvC,IAAI,CAAC,MAAM,GAAG,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,uBAAA,IAAI,sBAAQ,CAAC,CAAC;QACnE,uBAAA,IAAI,sBAAQ,CAAC,WAAW,CAAC,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,CAAC;QAE9C,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IAC/C,CAAC;IAuID;;;;OAIG;IACG,UAAU,CAAC,SAAqB,EAAE,IAAY;;YAClD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC5B,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,SAAS,EAAE,CAAC;QACd,CAAC;KAAA;IAED;;;;;OAKG;IACH,SAAS,CAAC,YAAoB,EAAE,EAAc,EAAE,OAAmB;QACjE,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;gBACnB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,MAAM,CAAC,KAAa;QACtB,MAAM,MAAM,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACjD,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;IAC1C,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,MAAkB;QACtC,IAAI,EAAM,CAAC,YAAY,EAAE,CAAC;YACxB,EAAM,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,aAAa,CAAC,MAAkB;QACrC,IAAI,EAAM,CAAC,YAAY,EAAE,CAAC;YACxB,EAAM,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,UAAU;QACf,IAAI,EAAM,CAAC,YAAY,EAAE,CAAC;YACxB,EAAM,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;CACF;;IAtMG,uBAAA,IAAI,uCAAM,MAAV,IAAI,CAAQ,CAAC;IAEb,MAAM,CAAC,qBAAqB,CAAC,uBAAA,IAAI,yCAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC,2CAEO,SAAiB;IACvB,IAAI,CAAC,EAAM,CAAC,MAAM,EAAE,CAAC;QACnB,uBAAA,IAAI,yBAAkB,CAAC,SAAS,GAAG,uBAAA,IAAI,4BAAc,CAAC,GAAG,IAAI,MAAA,CAAC;QAC9D,uBAAA,IAAI,wBAAiB,SAAS,MAAA,CAAC;QAE/B,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,uBAAA,IAAI,6BAAe,CAAC,CAAC;QAE/C,oBAAoB;QACpB,2GAAqB,uBAAA,IAAI,6BAAe,MAAA,CAAC;QACzC,OAAO,uBAAA,IAAI,2BAAa,IAAI,uBAAA,IAAI,0BAAY,EAAE,CAAC;YAC7C,uBAAA,IAAI,8CAAa,MAAjB,IAAI,CAAe,CAAC;YACpB,2GAAqB,uBAAA,IAAI,0BAAY,MAAA,CAAC;QACxC,CAAC;QAED,IAAI,EAAM,CAAC,YAAY,EAAE,CAAC;YACxB,EAAM,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/B,CAAC;QAED,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QACxB,uBAAA,IAAI,uCAAM,MAAV,IAAI,CAAQ,CAAC;IACf,CAAC;SAAM,CAAC;QACN,yEAAyE;QACzE,uBAAA,IAAI,uCAAM,MAAV,IAAI,CAAQ,CAAC;IACf,CAAC;IAED,MAAM,CAAC,qBAAqB,CAAC,uBAAA,IAAI,yCAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACxD,CAAC;IAGC,MAAM,OAAO,GAAG,EAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAM,CAAC,OAAO,CAAC;IAEnF,EAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACjC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;YACvB,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,uBAAA,IAAI,0BAAY,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IAC/B,CAAC;AACH,CAAC;IAGC,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,CAAC;IAC5C,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClF,CAAC;IAGC,uBAAA,IAAI,gDAAe,MAAnB,IAAI,CAAiB,CAAC;IAEtB,MAAM,OAAO,GAAG,EAAM,CAAC,YAAY,CAAC,CAAC,CAAC,EAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAM,CAAC,OAAO,CAAC;IAEnF,IAAI,EAAM,CAAC,eAAe,EAAE,CAAC;QAC3B,EAAM,CAAC,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,EAAM,CAAC,KAAK,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,EAAM,CAAC,KAAK,EAAE,CAAC;QACjB,uBAAA,IAAI,4CAAW,MAAf,IAAI,EAAY,OAAO,CAAC,CAAC;IAC3B,CAAC;AACH,CAAC,iDACU,OAAwB;;IACjC,iCAAiC;IACjC,uBAAA,IAAI,mBAAK,CAAC,IAAI,EAAE,CAAC;IACjB,uBAAA,IAAI,mBAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,yBAAyB;IAEnE,MAAM,YAAY,GAAG,GAAG,CAAC;IACzB,MAAM,WAAW,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,MAAM,CAAC,GAAG,uBAAA,IAAI,sBAAQ,CAAC,MAAM,CAAC,KAAK,GAAG,YAAY,GAAG,OAAO,CAAC;IAC7D,IAAI,CAAC,GAAG,OAAO,CAAC;IAEhB,uBAAuB;IACvB,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC;IAC3C,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;IAEpD,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,OAAO,CAAC;IAC9B,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,MAAM,CAAC;IAC7B,uBAAA,IAAI,mBAAK,CAAC,YAAY,GAAG,KAAK,CAAC;IAE/B,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACvD,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,YAAY,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC/D,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1E,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAE1E,uCAAuC;IACvC,IAAI,EAAM,CAAC,cAAc,EAAE,CAAC;QAC1B,CAAC,IAAI,WAAW,GAAG,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,EAAM,CAAC,cAAc,CAAC;QAClC,MAAM,UAAU,GAAgC;YAC9C,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3F,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,MAAA,MAAA,GAAG,CAAC,MAAM,0CAAE,KAAK,mCAAI,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAA,MAAA,GAAG,CAAC,MAAM,0CAAE,MAAM,mCAAI,CAAC,CAAC,EAAE,CAAC;SACzF,CAAC;QAEF,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC7B,IAAI,OAAO,EAAE,CAAC;YACZ,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;QACpD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACnG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7G,CAAC;QAED,MAAM,eAAe,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QACtD,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,oBAAoB,CAAC;QAC3C,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QACxD,uBAAA,IAAI,mBAAK,CAAC,WAAW,GAAG,SAAS,CAAC;QAClC,uBAAA,IAAI,mBAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;QAE1D,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QAChC,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAE/C,uBAAA,IAAI,mBAAK,CAAC,SAAS,GAAG,OAAO,CAAC;QAC9B,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;YACnC,uBAAA,IAAI,mBAAK,CAAC,QAAQ,CAAC,GAAG,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;IACL,CAAC;IAED,uBAAA,IAAI,mBAAK,CAAC,OAAO,EAAE,CAAC;AACtB,CAAC,2DAEe,MAAc,EAAE;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;AAC9E,CAAC;eA/TkB,MAAM"}
1
+ {"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
package/dist/Physics.d.ts CHANGED
@@ -1,16 +1,38 @@
1
+ import Vector2 from './Vector2.js';
1
2
  import GameObject from './GameObject.js';
3
+ /**
4
+ * Holds data about a collision between two objects.
5
+ */
6
+ export interface CollisionManifold {
7
+ /** First object in the collision. */
8
+ obj1: GameObject;
9
+ /** Second object in the collision. */
10
+ obj2: GameObject;
11
+ /** Normalized direction of the collision from obj1 to obj2. */
12
+ normal: Vector2;
13
+ /** Penetration depth. */
14
+ depth: number;
15
+ }
2
16
  /**
3
17
  * Utility class for collision detection between game objects.
4
18
  */
5
19
  export default class Physics {
6
20
  /**
7
21
  * Checks if two game objects are colliding.
8
- /**
9
- * Checks if two game objects are colliding and resolves it if not static.
10
- * @param obj1 First object.
11
- * @param obj2 Second object.
12
- * @returns True if the objects are colliding.
13
- */
22
+ * @param obj1 First object.
23
+ * @param obj2 Second object.
24
+ * @returns A manifold if colliding, else null.
25
+ */
26
+ static getCollisionManifold(obj1: GameObject, obj2: GameObject): CollisionManifold | null;
27
+ private static circleVsCircle;
28
+ private static aabbVsAabb;
29
+ private static circleVsRect;
30
+ /**
31
+ * Checks if two game objects are colliding and resolves it.
32
+ * @param obj1 First object.
33
+ * @param obj2 Second object.
34
+ * @returns True if the objects were colliding.
35
+ */
14
36
  static checkCollision(obj1: GameObject, obj2: GameObject): boolean;
15
37
  private static resolveCollision;
16
38
  }
package/dist/Physics.js CHANGED
@@ -7,85 +7,197 @@ import PhysicsComponent from './PhysicsComponent.js';
7
7
  export default class Physics {
8
8
  /**
9
9
  * Checks if two game objects are colliding.
10
- /**
11
- * Checks if two game objects are colliding and resolves it if not static.
12
- * @param obj1 First object.
13
- * @param obj2 Second object.
14
- * @returns True if the objects are colliding.
15
- */
16
- static checkCollision(obj1, obj2) {
17
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
10
+ * @param obj1 First object.
11
+ * @param obj2 Second object.
12
+ * @returns A manifold if colliding, else null.
13
+ */
14
+ static getCollisionManifold(obj1, obj2) {
18
15
  const isCircle1 = obj1 instanceof Circle;
19
16
  const isCircle2 = obj2 instanceof Circle;
20
- let isColliding = false;
21
17
  if (isCircle1 && isCircle2) {
22
- const c1 = obj1;
23
- const c2 = obj2;
24
- isColliding = Vector2.distance(c1.center, c2.center) < c1.radius + c2.radius;
18
+ return this.circleVsCircle(obj1, obj2);
25
19
  }
26
20
  else if (isCircle1 || isCircle2) {
27
21
  const circle = (isCircle1 ? obj1 : obj2);
28
22
  const rect = (isCircle1 ? obj2 : obj1);
29
- const rectWidth = (_b = (_a = rect.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
30
- const rectHeight = (_d = (_c = rect.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;
31
- const closestX = Math.max(rect.transform.position.x, Math.min(circle.center.x, rect.transform.position.x + rectWidth));
32
- const closestY = Math.max(rect.transform.position.y, Math.min(circle.center.y, rect.transform.position.y + rectHeight));
33
- isColliding = Vector2.distance(circle.center, new Vector2(closestX, closestY)) < circle.radius;
23
+ const manifold = this.circleVsRect(circle, rect);
24
+ if (manifold && isCircle2) {
25
+ // Flip normal if obj1 was the rect
26
+ manifold.normal.multiply(-1);
27
+ }
28
+ return manifold;
34
29
  }
35
30
  else {
36
- const w1 = (_f = (_e = obj1.bounds) === null || _e === void 0 ? void 0 : _e.width) !== null && _f !== void 0 ? _f : 0;
37
- const h1 = (_h = (_g = obj1.bounds) === null || _g === void 0 ? void 0 : _g.height) !== null && _h !== void 0 ? _h : 0;
38
- const w2 = (_k = (_j = obj2.bounds) === null || _j === void 0 ? void 0 : _j.width) !== null && _k !== void 0 ? _k : 0;
39
- const h2 = (_m = (_l = obj2.bounds) === null || _l === void 0 ? void 0 : _l.height) !== null && _m !== void 0 ? _m : 0;
40
- isColliding = (obj1.transform.position.x < obj2.transform.position.x + w2 &&
41
- obj1.transform.position.x + w1 > obj2.transform.position.x &&
42
- obj1.transform.position.y < obj2.transform.position.y + h2 &&
43
- obj1.transform.position.y + h1 > obj2.transform.position.y);
44
- }
45
- const obj1Static = (_p = (_o = obj1.getComponent(PhysicsComponent)) === null || _o === void 0 ? void 0 : _o.isStatic) !== null && _p !== void 0 ? _p : false;
46
- const obj2Static = (_r = (_q = obj2.getComponent(PhysicsComponent)) === null || _q === void 0 ? void 0 : _q.isStatic) !== null && _r !== void 0 ? _r : false;
47
- if (isColliding && (!obj1Static || !obj2Static)) {
48
- this.resolveCollision(obj1, obj2, obj1Static, obj2Static);
31
+ return this.aabbVsAabb(obj1, obj2);
49
32
  }
50
- return isColliding;
51
33
  }
52
- static resolveCollision(obj1, obj2, obj1Static, obj2Static) {
34
+ static circleVsCircle(c1, c2) {
35
+ const combinedRadius = c1.radius + c2.radius;
36
+ const diff = c2.center.clone().subtract(c1.center);
37
+ const distSq = diff.x * diff.x + diff.y * diff.y;
38
+ if (distSq > combinedRadius * combinedRadius)
39
+ return null;
40
+ const dist = Math.sqrt(distSq);
41
+ const normal = dist !== 0 ? diff.multiply(1 / dist) : new Vector2(0, 1);
42
+ return {
43
+ obj1: c1,
44
+ obj2: c2,
45
+ normal,
46
+ depth: combinedRadius - dist
47
+ };
48
+ }
49
+ static aabbVsAabb(obj1, obj2) {
53
50
  var _a, _b, _c, _d, _e, _f, _g, _h;
54
51
  const w1 = (_b = (_a = obj1.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
55
52
  const h1 = (_d = (_c = obj1.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;
56
53
  const w2 = (_f = (_e = obj2.bounds) === null || _e === void 0 ? void 0 : _e.width) !== null && _f !== void 0 ? _f : 0;
57
54
  const h2 = (_h = (_g = obj2.bounds) === null || _g === void 0 ? void 0 : _g.height) !== null && _h !== void 0 ? _h : 0;
58
- // Calculate overlap
59
- const overlapX = Math.min(obj1.transform.position.x + w1 - obj2.transform.position.x, obj2.transform.position.x + w2 - obj1.transform.position.x);
60
- const overlapY = Math.min(obj1.transform.position.y + h1 - obj2.transform.position.y, obj2.transform.position.y + h2 - obj1.transform.position.y);
61
- // Push apart
55
+ const pos1 = obj1.transform.position;
56
+ const pos2 = obj2.transform.position;
57
+ // Center to center distance
58
+ const center1 = new Vector2(pos1.x + w1 / 2, pos1.y + h1 / 2);
59
+ const center2 = new Vector2(pos2.x + w2 / 2, pos2.y + h2 / 2);
60
+ const diff = center2.clone().subtract(center1);
61
+ // Overlap on x and y axes
62
+ const overlapX = (w1 / 2 + w2 / 2) - Math.abs(diff.x);
63
+ if (overlapX <= 0)
64
+ return null;
65
+ const overlapY = (h1 / 2 + h2 / 2) - Math.abs(diff.y);
66
+ if (overlapY <= 0)
67
+ return null;
68
+ // Resolve on the axis of least penetration
62
69
  if (overlapX < overlapY) {
63
- if (obj1.transform.position.x < obj2.transform.position.x) {
64
- if (!obj1Static)
65
- obj1.transform.position.x -= overlapX / 2;
66
- if (!obj2Static)
67
- obj2.transform.position.x += overlapX / 2;
68
- }
69
- else {
70
- if (!obj1Static)
71
- obj1.transform.position.x += overlapX / 2;
72
- if (!obj2Static)
73
- obj2.transform.position.x -= overlapX / 2;
74
- }
70
+ return {
71
+ obj1,
72
+ obj2,
73
+ normal: new Vector2(diff.x > 0 ? 1 : -1, 0),
74
+ depth: overlapX
75
+ };
75
76
  }
76
77
  else {
77
- if (obj1.transform.position.y < obj2.transform.position.y) {
78
- if (!obj1Static)
79
- obj1.transform.position.y -= overlapY / 2;
80
- if (!obj2Static)
81
- obj2.transform.position.y += overlapY / 2;
82
- }
83
- else {
84
- if (!obj1Static)
85
- obj1.transform.position.y += overlapY / 2;
86
- if (!obj2Static)
87
- obj2.transform.position.y -= overlapY / 2;
88
- }
78
+ return {
79
+ obj1,
80
+ obj2,
81
+ normal: new Vector2(0, diff.y > 0 ? 1 : -1),
82
+ depth: overlapY
83
+ };
84
+ }
85
+ }
86
+ static circleVsRect(circle, rect) {
87
+ var _a, _b, _c, _d;
88
+ const rectWidth = (_b = (_a = rect.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
89
+ const rectHeight = (_d = (_c = rect.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;
90
+ const rectPos = rect.transform.position;
91
+ const closestX = Math.max(rectPos.x, Math.min(circle.center.x, rectPos.x + rectWidth));
92
+ const closestY = Math.max(rectPos.y, Math.min(circle.center.y, rectPos.y + rectHeight));
93
+ const diff = new Vector2(closestX, closestY).subtract(circle.center);
94
+ const distSq = diff.x * diff.x + diff.y * diff.y;
95
+ if (distSq > circle.radius * circle.radius)
96
+ return null;
97
+ const dist = Math.sqrt(distSq);
98
+ let normal;
99
+ let depth;
100
+ if (dist === 0) {
101
+ // Circle center is inside the rectangle
102
+ const center = circle.center;
103
+ const dLeft = center.x - rectPos.x;
104
+ const dRight = rectPos.x + rectWidth - center.x;
105
+ const dTop = center.y - rectPos.y;
106
+ const dBottom = rectPos.y + rectHeight - center.y;
107
+ const minDist = Math.min(dLeft, dRight, dTop, dBottom);
108
+ depth = circle.radius + minDist;
109
+ if (minDist === dLeft)
110
+ normal = new Vector2(-1, 0);
111
+ else if (minDist === dRight)
112
+ normal = new Vector2(1, 0);
113
+ else if (minDist === dTop)
114
+ normal = new Vector2(0, -1);
115
+ else
116
+ normal = new Vector2(0, 1);
117
+ }
118
+ else {
119
+ normal = diff.multiply(1 / dist);
120
+ depth = circle.radius - dist;
121
+ }
122
+ return {
123
+ obj1: circle,
124
+ obj2: rect,
125
+ normal,
126
+ depth
127
+ };
128
+ }
129
+ /**
130
+ * Checks if two game objects are colliding and resolves it.
131
+ * @param obj1 First object.
132
+ * @param obj2 Second object.
133
+ * @returns True if the objects were colliding.
134
+ */
135
+ static checkCollision(obj1, obj2) {
136
+ var _a, _b;
137
+ const manifold = this.getCollisionManifold(obj1, obj2);
138
+ if (!manifold)
139
+ return false;
140
+ const phys1 = obj1.getComponent(PhysicsComponent);
141
+ const phys2 = obj2.getComponent(PhysicsComponent);
142
+ const obj1Static = (_a = phys1 === null || phys1 === void 0 ? void 0 : phys1.isStatic) !== null && _a !== void 0 ? _a : false;
143
+ const obj2Static = (_b = phys2 === null || phys2 === void 0 ? void 0 : phys2.isStatic) !== null && _b !== void 0 ? _b : false;
144
+ if (!obj1Static || !obj2Static) {
145
+ this.resolveCollision(manifold, phys1, phys2);
146
+ }
147
+ return true;
148
+ }
149
+ static resolveCollision(manifold, phys1, phys2) {
150
+ var _a, _b;
151
+ const { obj1, obj2, normal, depth } = manifold;
152
+ const isStatic1 = (_a = phys1 === null || phys1 === void 0 ? void 0 : phys1.isStatic) !== null && _a !== void 0 ? _a : true; // Assume static if no physics component
153
+ const isStatic2 = (_b = phys2 === null || phys2 === void 0 ? void 0 : phys2.isStatic) !== null && _b !== void 0 ? _b : true;
154
+ // 1. Positional Correction (to prevent sinking/jitter)
155
+ const percent = 0.8; // How much of the penetration to resolve
156
+ const slop = 0.01; // Allowable penetration
157
+ const correctionMagnitude = (Math.max(depth - slop, 0) / ((isStatic1 ? 0 : 1) + (isStatic2 ? 0 : 1))) * percent;
158
+ const correction = normal.clone().multiply(correctionMagnitude);
159
+ if (!isStatic1)
160
+ obj1.transform.position.subtract(correction);
161
+ if (!isStatic2)
162
+ obj2.transform.position.add(correction);
163
+ // 2. Impulse-based Velocity Response
164
+ if (phys1 && phys2) {
165
+ // Relative velocity along normal
166
+ const rv = phys2.velocity.clone().subtract(phys1.velocity);
167
+ const velAlongNormal = Vector2.dot(rv, normal);
168
+ // Do not resolve if velocities are separating
169
+ if (velAlongNormal > 0)
170
+ return;
171
+ // Calculate restitution (bounciness) - use the minimum of both objects
172
+ const e = Math.min(phys1.restitution, phys2.restitution);
173
+ // Calculate impulse scalar
174
+ const invMass1 = isStatic1 ? 0 : (1 / phys1.mass);
175
+ const invMass2 = isStatic2 ? 0 : (1 / phys2.mass);
176
+ let j = -(1 + e) * velAlongNormal;
177
+ j /= invMass1 + invMass2;
178
+ // Apply impulse
179
+ const impulse = normal.clone().multiply(j);
180
+ if (!isStatic1)
181
+ phys1.velocity.subtract(impulse.clone().multiply(invMass1));
182
+ if (!isStatic2)
183
+ phys2.velocity.add(impulse.clone().multiply(invMass2));
184
+ }
185
+ else if (phys1 || phys2) {
186
+ // Only one object has physics, treat the other as static infinity mass
187
+ const activePhys = (phys1 || phys2);
188
+ // Direction FROM active TO static
189
+ const n = phys1 ? normal : normal.clone().multiply(-1);
190
+ // Relative velocity (static - active)
191
+ const rv = activePhys.velocity.clone().multiply(-1);
192
+ const velAlongNormal = Vector2.dot(rv, n);
193
+ // Do not resolve if velocities are separating
194
+ if (velAlongNormal > 0)
195
+ return;
196
+ const e = activePhys.restitution;
197
+ let j = -(1 + e) * velAlongNormal;
198
+ j /= (1 / activePhys.mass);
199
+ const impulse = n.clone().multiply(j);
200
+ activePhys.velocity.subtract(impulse.clone().multiply(1 / activePhys.mass));
89
201
  }
90
202
  }
91
203
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Physics.js","sourceRoot":"","sources":["../src/Physics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Physics.js","sourceRoot":"","sources":["../src/Physics.ts"],"names":[],"mappings":"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"}
@@ -12,4 +12,8 @@ export default class PhysicsComponent extends Component {
12
12
  mass: number;
13
13
  /** Whether the object is immovable (e.g., walls). */
14
14
  isStatic: boolean;
15
+ /** Bounciness of the object (0 = inelastic, 1 = perfectly elastic). */
16
+ restitution: number;
17
+ /** Resistance to sliding. */
18
+ friction: number;
15
19
  }
@@ -14,6 +14,10 @@ export default class PhysicsComponent extends Component {
14
14
  this.mass = 1;
15
15
  /** Whether the object is immovable (e.g., walls). */
16
16
  this.isStatic = false;
17
+ /** Bounciness of the object (0 = inelastic, 1 = perfectly elastic). */
18
+ this.restitution = 0.5;
19
+ /** Resistance to sliding. */
20
+ this.friction = 0.2;
17
21
  }
18
22
  }
19
23
  //# sourceMappingURL=PhysicsComponent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PhysicsComponent.js","sourceRoot":"","sources":["../src/PhysicsComponent.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAS;IAAvD;;QACE,6CAA6C;QAC7C,aAAQ,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,yDAAyD;QACzD,iBAAY,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,wDAAwD;QACxD,SAAI,GAAW,CAAC,CAAC;QACjB,qDAAqD;QACrD,aAAQ,GAAY,KAAK,CAAC;IAC5B,CAAC;CAAA"}
1
+ {"version":3,"file":"PhysicsComponent.js","sourceRoot":"","sources":["../src/PhysicsComponent.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,gBAAgB,CAAC;AACvC,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,SAAS;IAAvD;;QACE,6CAA6C;QAC7C,aAAQ,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACtC,yDAAyD;QACzD,iBAAY,GAAY,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1C,wDAAwD;QACxD,SAAI,GAAW,CAAC,CAAC;QACjB,qDAAqD;QACrD,aAAQ,GAAY,KAAK,CAAC;QAC1B,uEAAuE;QACvE,gBAAW,GAAW,GAAG,CAAC;QAC1B,6BAA6B;QAC7B,aAAQ,GAAW,GAAG,CAAC;IACzB,CAAC;CAAA"}
package/dist/Text.js CHANGED
@@ -27,7 +27,7 @@ const defaultProps = {
27
27
  position: new Vector2(0, 0),
28
28
  zIndex: 0,
29
29
  register: true,
30
- onClick: () => { },
30
+ onClick: function defaultOnClick() { },
31
31
  };
32
32
  /**
33
33
  * Represents text that can be drawn to the screen and interact with input.
package/dist/Text.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Text.js","sourceRoot":"","sources":["../src/Text.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,eAAe,MAAM,sBAAsB,CAAC;AA+CnD,MAAM,YAAY,GAAG;IACnB,GAAG,EAAE,MAAM;IACX,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,IAAI,EAAE,KAAK;IACrB,IAAI,EAAE,WAAW;IACjB,IAAI,EAAE,EAAE;IACR,eAAe,EAAE,QAAQ;IACzB,aAAa,EAAE,QAAQ;IACvB,QAAQ,EAAE,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAC3B,MAAM,EAAE,CAAC;IACT,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC;CAClB,CAAC;AAEF;;GAEG;AACH,MAAqB,IAAK,SAAQ,UAAU;IAK1C,wBAAwB;IACxB,IAAI,MAAM,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,IAAI,MAAM,CAAC,GAAW,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;IAE7D,6BAA6B;IAC7B,IAAI,gBAAgB,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAC/E,IAAI,gBAAgB,CAAC,GAAW,IAAI,IAAI,CAAC,cAAc,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC;IAKjF,qDAAqD;IACrD,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,GAAW,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IAEzD,wBAAwB;IACxB,IAAI,IAAI,KAAa,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,IAAI,IAAI,CAAC,GAAW;QAClB,IAAI,CAAC,cAAc,CAAC,IAAI,GAAG,GAAG,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC3B,CAAC;IAKD,4BAA4B;IAC5B,IAAI,eAAe,KAAsB,OAAO,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC,CAAC;IACtF,IAAI,eAAe,CAAC,GAAoB,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC;IAExF,0BAA0B;IAC1B,IAAI,aAAa,KAAoB,OAAO,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAChF,IAAI,aAAa,CAAC,GAAkB,IAAI,IAAI,CAAC,cAAc,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC;IAUlF,YAAY,KAAqB;QAC/B,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;;QA9C5E,qCAAc;QAqCd,+CAA+C;QAC/C,aAAQ,GAAY,IAAI,CAAC;QACzB,kDAAkD;QAClD,eAAU,GAAY,KAAK,CAAC;QAE5B,iCAAiC;QACjC,YAAO,GAAe,GAAG,EAAE,GAAE,CAAC,CAAC;QAK7B,MAAM,cAAc,mCACf,YAAY,GACZ,KAAK,CACT,CAAC;QAEF,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,GAAG,IAAI,CAAC,QAAQ,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;QACzD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC;QACzC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;QAClD,MAAM,eAAe,GAAoB,cAAc,CAAC,eAAkC,CAAC;QAC3F,MAAM,aAAa,GAAkB,cAAc,CAAC,aAA8B,CAAC;QACnF,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QAClE,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC;QAC1D,MAAM,gBAAgB,GAAG,cAAc,CAAC,gBAAgB,IAAI,EAAE,CAAC;QAE/D,uBAAA,IAAI,sBAAiB,uBAAA,IAAI,yCAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAA,CAAC;QAEjD,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;QACxC,CAAC;QAED,IAAI,CAAC,cAAc,GAAG,IAAI,aAAa,CACrC,IAAI,EACJ,IAAI,EACJ,cAAc,CAAC,MAAM,EACrB,eAAe,EACf,aAAa,EACb,KAAK,EACL,MAAM,EACN,gBAAgB,CACjB,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAEvC,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAE/B,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IAED,+EAA+E;IAC/E,YAAY;QACV,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,KAAK,CAAC,gBAAgB,CAAC,uBAAA,IAAI,0BAAc,CAAC,CAAC;YAC3C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,WAAW;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,KAAK,CAAC,mBAAmB,CAAC,uBAAA,IAAI,0BAAc,CAAC,CAAC;YAC9C,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;CAgBF;kHAda,GAAY;;IACtB,MAAM,KAAK,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,KAAK,mCAAI,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,MAAA,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,mCAAI,CAAC,CAAC;IACxC,IACE,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK;QACzC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACjC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,MAAM,EAC1C,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;IACH,CAAC;AACH,CAAC;eA1HkB,IAAI"}
1
+ {"version":3,"file":"Text.js","sourceRoot":"","sources":["../src/Text.ts"],"names":[],"mappings":"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"}
package/dist/Vector2.d.ts CHANGED
@@ -1,16 +1,7 @@
1
- /**
2
- * Simple 2D vector interface.
3
- */
4
- export interface Vector2 {
5
- /** X coordinate. */
6
- x: number;
7
- /** Y coordinate. */
8
- y: number;
9
- }
10
1
  /**
11
2
  * Class representing a 2D vector or point.
12
3
  */
13
- export default class implements Vector2 {
4
+ export default class Vector2 {
14
5
  /** X coordinate. */
15
6
  x: number;
16
7
  /** Y coordinate. */
@@ -23,4 +14,22 @@ export default class implements Vector2 {
23
14
  * @returns The distance between v1 and v2.
24
15
  */
25
16
  static distance(v1: Vector2, v2: Vector2): number;
17
+ /**
18
+ * Calculates the dot product of two vectors.
19
+ * @param v1 First vector.
20
+ * @param v2 Second vector.
21
+ */
22
+ static dot(v1: Vector2, v2: Vector2): number;
23
+ /** Returns the length of the vector. */
24
+ get magnitude(): number;
25
+ /** Returns a new normalized (unit length) version of this vector. */
26
+ get normalized(): Vector2;
27
+ /** Adds another vector to this one. */
28
+ add(other: Vector2): Vector2;
29
+ /** Subtracts another vector from this one. */
30
+ subtract(other: Vector2): Vector2;
31
+ /** Multiplies this vector by a scalar. */
32
+ multiply(scalar: number): Vector2;
33
+ /** Returns a copy of this vector. */
34
+ clone(): Vector2;
26
35
  }
package/dist/Vector2.js CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Class representing a 2D vector or point.
3
3
  */
4
- export default class {
4
+ export default class Vector2 {
5
5
  constructor(x = 0, y = 0) {
6
6
  this.x = x;
7
7
  this.y = y;
@@ -17,5 +17,46 @@ export default class {
17
17
  const dy = v1.y - v2.y;
18
18
  return Math.sqrt(dx * dx + dy * dy);
19
19
  }
20
+ /**
21
+ * Calculates the dot product of two vectors.
22
+ * @param v1 First vector.
23
+ * @param v2 Second vector.
24
+ */
25
+ static dot(v1, v2) {
26
+ return v1.x * v2.x + v1.y * v2.y;
27
+ }
28
+ /** Returns the length of the vector. */
29
+ get magnitude() {
30
+ return Math.sqrt(this.x * this.x + this.y * this.y);
31
+ }
32
+ /** Returns a new normalized (unit length) version of this vector. */
33
+ get normalized() {
34
+ const mag = this.magnitude;
35
+ if (mag === 0)
36
+ return new Vector2(0, 0);
37
+ return new Vector2(this.x / mag, this.y / mag);
38
+ }
39
+ /** Adds another vector to this one. */
40
+ add(other) {
41
+ this.x += other.x;
42
+ this.y += other.y;
43
+ return this;
44
+ }
45
+ /** Subtracts another vector from this one. */
46
+ subtract(other) {
47
+ this.x -= other.x;
48
+ this.y -= other.y;
49
+ return this;
50
+ }
51
+ /** Multiplies this vector by a scalar. */
52
+ multiply(scalar) {
53
+ this.x *= scalar;
54
+ this.y *= scalar;
55
+ return this;
56
+ }
57
+ /** Returns a copy of this vector. */
58
+ clone() {
59
+ return new Vector2(this.x, this.y);
60
+ }
20
61
  }
21
62
  //# sourceMappingURL=Vector2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"AAUA;;GAEG;AACH,MAAM,CAAC,OAAO;IAMZ,YAAY,IAAY,CAAC,EAAE,IAAY,CAAC;QACtC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAW,EAAE,EAAW;QACtC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC;CACF"}
1
+ {"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAM1B,YAAY,IAAY,CAAC,EAAE,IAAY,CAAC;QACtC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IACb,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,EAAW,EAAE,EAAW;QACtC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,GAAG,CAAC,EAAW,EAAE,EAAW;QACjC,OAAO,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,wCAAwC;IACxC,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,qEAAqE;IACrE,IAAI,UAAU;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,uCAAuC;IACvC,GAAG,CAAC,KAAc;QAChB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,8CAA8C;IAC9C,QAAQ,CAAC,KAAc;QACrB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC;QAClB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,0CAA0C;IAC1C,QAAQ,CAAC,MAAc;QACrB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;QACjB,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qCAAqC;IACrC,KAAK;QACH,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACrC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dino-ge",
3
- "version": "1.6.0",
3
+ "version": "1.7.1",
4
4
  "description": "Lightweight, performant 2D game engine built with TypeScript",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -11,6 +11,7 @@
11
11
  "scripts": {
12
12
  "build": "tsc -p tsconfig.build.json",
13
13
  "test": "jest",
14
+ "test:coverage": "jest --coverage",
14
15
  "docs": "typedoc --out ../../docs/api src/ --entryPointStrategy expand"
15
16
  },
16
17
  "author": "Rich <richgled25@gmail.com>",