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 +17 -3
- package/dist/Engine.js +154 -153
- package/dist/Engine.js.map +1 -1
- package/dist/Physics.d.ts +28 -6
- package/dist/Physics.js +172 -60
- package/dist/Physics.js.map +1 -1
- package/dist/PhysicsComponent.d.ts +4 -0
- package/dist/PhysicsComponent.js +4 -0
- package/dist/PhysicsComponent.js.map +1 -1
- package/dist/Text.js +1 -1
- package/dist/Text.js.map +1 -1
- package/dist/Vector2.d.ts +19 -10
- package/dist/Vector2.js +42 -1
- package/dist/Vector2.js.map +1 -1
- package/package.json +2 -1
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
|
|
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
|
|
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
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
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
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
document.getElementsByTagName('head')
|
|
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
|
-
|
|
171
|
-
|
|
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
|
-
|
|
176
|
-
|
|
177
|
-
this.width =
|
|
178
|
-
this.height =
|
|
179
|
-
if (
|
|
180
|
-
|
|
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
|
-
|
|
174
|
+
Engine.renderingSystem = new RenderingSystem(this._ctx);
|
|
184
175
|
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
-
|
|
192
|
-
this.width =
|
|
193
|
-
this.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')
|
|
196
|
-
|
|
197
|
-
|
|
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 (
|
|
238
|
-
|
|
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 (
|
|
250
|
-
|
|
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 (
|
|
259
|
-
|
|
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
|
package/dist/Engine.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Engine.js","sourceRoot":"","sources":["../src/Engine.ts"],"names":[],"mappings":"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"}
|
|
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
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
59
|
-
const
|
|
60
|
-
|
|
61
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
}
|
package/dist/Physics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Physics.js","sourceRoot":"","sources":["../src/Physics.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,gBAAgB,MAAM,uBAAuB,CAAC;
|
|
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
|
}
|
package/dist/PhysicsComponent.js
CHANGED
|
@@ -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;
|
|
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
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,
|
|
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
|
|
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
|
package/dist/Vector2.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vector2.js","sourceRoot":"","sources":["../src/Vector2.ts"],"names":[],"mappings":"
|
|
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.
|
|
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>",
|