dino-ge 1.8.10 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -26
- package/dist/Circle.d.ts +3 -1
- package/dist/Circle.js +7 -2
- package/dist/Circle.js.map +1 -1
- package/dist/Component.d.ts +2 -0
- package/dist/Component.js.map +1 -1
- package/dist/GameObject.js +2 -4
- package/dist/GameObject.js.map +1 -1
- package/dist/Input.js +51 -36
- package/dist/Input.js.map +1 -1
- package/dist/Physics.d.ts +1 -1
- package/dist/Physics.js +29 -22
- package/dist/Physics.js.map +1 -1
- package/dist/RenderingSystem.js +3 -3
- package/dist/RenderingSystem.js.map +1 -1
- package/dist/ShapeComponent.d.ts +4 -3
- package/dist/ShapeComponent.js +52 -21
- package/dist/ShapeComponent.js.map +1 -1
- package/dist/Sprite.d.ts +2 -1
- package/dist/Sprite.js +8 -8
- package/dist/Sprite.js.map +1 -1
- package/dist/TextComponent.d.ts +4 -3
- package/dist/TextComponent.js +40 -15
- package/dist/TextComponent.js.map +1 -1
- package/dist/TilemapComponent.d.ts +2 -1
- package/dist/TilemapComponent.js +2 -1
- package/dist/TilemapComponent.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
# dino-ge
|
|
2
2
|
|
|
3
|
-
A lightweight, performant 2D game engine built from the ground up in TypeScript. `dino-ge` provides a robust, developer-friendly framework for building
|
|
3
|
+
A lightweight, performant 2D game engine built from the ground up in TypeScript. `dino-ge` provides a robust, developer-friendly framework for building 2D web games.
|
|
4
|
+
|
|
5
|
+
⚠️ **This project is in alpha** ⚠️
|
|
4
6
|
|
|
5
7
|
## Features
|
|
6
8
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
- **TypeScript Native:** Full type safety and modern ES module support.
|
|
9
|
+
- **Composition-based ECS:** Built around a flexible Entity Component System for modular game design.
|
|
10
|
+
- **Hierarchical Transform System:** Supports complex parent-child relationships with nested position, rotation, and scaling.
|
|
11
|
+
- **Pixel-Perfect Sprite Animation:** Efficiently handles spritesheets with automatic frame calculation and smooth playback.
|
|
12
|
+
- **Robust 2D Physics:** Impulse-based resolution with support for AABB and Circle collision primitives.
|
|
13
|
+
- **Customisable Camera:** Built-in support for following targets, world-to-viewport coordinate mapping, and smooth zooming.
|
|
14
|
+
- **Playground Integration:** Seamlessly compatible with the Dino GE Playground for rapid prototyping and live editing.
|
|
14
15
|
|
|
15
16
|
## Installation
|
|
16
17
|
|
|
@@ -21,27 +22,16 @@ npm install dino-ge
|
|
|
21
22
|
## Quick Start
|
|
22
23
|
|
|
23
24
|
```typescript
|
|
24
|
-
import { Engine,
|
|
25
|
+
import { Engine, Sprite, Vector2 } from 'dino-ge';
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
// Create and set scene
|
|
33
|
-
const scene = new MyGameScene();
|
|
34
|
-
Engine.currentScene = scene;
|
|
35
|
-
},
|
|
36
|
-
update: () => {
|
|
37
|
-
// Global update logic
|
|
27
|
+
class MyGame {
|
|
28
|
+
constructor() {
|
|
29
|
+
new Engine({
|
|
30
|
+
onLoad: () => this.onLoad(),
|
|
31
|
+
update: (dt) => this.onUpdate(dt)
|
|
32
|
+
});
|
|
38
33
|
}
|
|
39
|
-
}, {
|
|
40
|
-
title: 'My Dino Game',
|
|
41
|
-
backgroundColour: '#264653'
|
|
42
|
-
});
|
|
43
34
|
|
|
44
|
-
class MyGameScene extends Scene {
|
|
45
35
|
onLoad() {
|
|
46
36
|
const player = new Sprite({
|
|
47
37
|
tag: 'player',
|
|
@@ -54,6 +44,10 @@ class MyGameScene extends Scene {
|
|
|
54
44
|
});
|
|
55
45
|
player.play();
|
|
56
46
|
}
|
|
47
|
+
|
|
48
|
+
onUpdate(dt: number) {
|
|
49
|
+
// Game logic here
|
|
50
|
+
}
|
|
57
51
|
}
|
|
58
52
|
```
|
|
59
53
|
|
package/dist/Circle.d.ts
CHANGED
|
@@ -23,7 +23,9 @@ export default class Circle extends GameObject {
|
|
|
23
23
|
radius: number;
|
|
24
24
|
/** Fill colour. */
|
|
25
25
|
colour: string;
|
|
26
|
-
/** Center point of the circle. */
|
|
26
|
+
/** Center point of the circle in world space. */
|
|
27
27
|
get center(): Vector2;
|
|
28
|
+
/** Radius of the circle in world space. */
|
|
29
|
+
get worldRadius(): number;
|
|
28
30
|
constructor(props: CircleProps);
|
|
29
31
|
}
|
package/dist/Circle.js
CHANGED
|
@@ -10,9 +10,14 @@ const defaultProps = {
|
|
|
10
10
|
* A basic circle shape that can be drawn to the screen.
|
|
11
11
|
*/
|
|
12
12
|
export default class Circle extends GameObject {
|
|
13
|
-
/** Center point of the circle. */
|
|
13
|
+
/** Center point of the circle in world space. */
|
|
14
14
|
get center() {
|
|
15
|
-
|
|
15
|
+
const r = this.radius * this.transform.worldScale.x;
|
|
16
|
+
return this.transform.worldPosition.add(new Vector2(r, r));
|
|
17
|
+
}
|
|
18
|
+
/** Radius of the circle in world space. */
|
|
19
|
+
get worldRadius() {
|
|
20
|
+
return this.radius * this.transform.worldScale.x;
|
|
16
21
|
}
|
|
17
22
|
constructor(props) {
|
|
18
23
|
super(props.tag || defaultProps.tag, props.zIndex || defaultProps.zIndex);
|
package/dist/Circle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Circle.js","sourceRoot":"","sources":["../src/Circle.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAkBjD,MAAM,YAAY,GAAG;IACnB,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,CAAC;CACV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAU;IAM5C,
|
|
1
|
+
{"version":3,"file":"Circle.js","sourceRoot":"","sources":["../src/Circle.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AAkBjD,MAAM,YAAY,GAAG;IACnB,GAAG,EAAE,QAAQ;IACb,MAAM,EAAE,OAAO;IACf,MAAM,EAAE,CAAC;CACV,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,UAAU;IAM5C,iDAAiD;IACjD,IAAI,MAAM;QACR,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,2CAA2C;IAC3C,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,YAAY,KAAkB;QAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,CAAC,CAAC;QAE1E,MAAM,cAAc,mCACf,YAAY,GACZ,KAAK,CACT,CAAC;QAEF,IAAI,CAAC,CAAC,cAAc,CAAC,QAAQ,YAAY,OAAO,CAAC,EAAE,CAAC;YAClD,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC;QACvC,IAAI,CAAC,SAAS,CAAC,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC;QAE7C,yFAAyF;QACzF,IAAI,CAAC,YAAY,CAAC,IAAI,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAEvF,IAAI,CAAC,YAAY,EAAE,CAAC;IACtB,CAAC;CACF"}
|
package/dist/Component.d.ts
CHANGED
|
@@ -6,4 +6,6 @@ import type GameObject from './GameObject.js';
|
|
|
6
6
|
export default abstract class Component {
|
|
7
7
|
/** Reference to the GameObject this component is attached to. */
|
|
8
8
|
gameObject?: GameObject;
|
|
9
|
+
/** Optional lifecycle hook called when the component is added to a GameObject. */
|
|
10
|
+
onAttach?(): void;
|
|
9
11
|
}
|
package/dist/Component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sourceRoot":"","sources":["../src/Component.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAgB,SAAS;
|
|
1
|
+
{"version":3,"file":"Component.js","sourceRoot":"","sources":["../src/Component.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAgB,SAAS;CAMtC"}
|
package/dist/GameObject.js
CHANGED
|
@@ -54,20 +54,18 @@ export default class GameObject {
|
|
|
54
54
|
* @param component The component to add.
|
|
55
55
|
*/
|
|
56
56
|
addComponent(component) {
|
|
57
|
+
var _a;
|
|
57
58
|
component.gameObject = this;
|
|
58
59
|
// Index the component by its class name and all base class names up to Component.
|
|
59
60
|
let proto = Object.getPrototypeOf(component);
|
|
60
61
|
while (proto && proto.constructor.name !== 'Object') {
|
|
61
62
|
const key = proto.constructor.name;
|
|
62
63
|
this._components.set(key, component);
|
|
63
|
-
// Stop walking once we've indexed up to the base Component class.
|
|
64
64
|
if (key === 'Component')
|
|
65
65
|
break;
|
|
66
66
|
proto = Object.getPrototypeOf(proto);
|
|
67
67
|
}
|
|
68
|
-
|
|
69
|
-
component.onAttach();
|
|
70
|
-
}
|
|
68
|
+
(_a = component.onAttach) === null || _a === void 0 ? void 0 : _a.call(component);
|
|
71
69
|
}
|
|
72
70
|
/**
|
|
73
71
|
* Removes a component from this entity by its class.
|
package/dist/GameObject.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GameObject.js","sourceRoot":"","sources":["../src/GameObject.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,kBAAkB,MAAM,yBAAyB,CAAC;AACzD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAE7C,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAgB,UAAU;IAatC,YAAY,GAAW,EAAE,MAAc;QAZvC,wCAAwC;QACxB,OAAE,GAAW,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxE,wDAAwD;QAChD,gBAAW,GAA2B,IAAI,GAAG,EAAE,CAAC;QAUtD,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAEjC,IAAI,CAAC,SAAS,GAAG,IAAI,kBAAkB,EAAE,CAAC;QAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,EAAE,CAAC,IAAY,EAAE,QAAsC;QACrD,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;QAC/C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;YAC9B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC;QACD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,IAAY,EAAE,QAAsC;;QACtD,MAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,0CAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACH,IAAI,CAAC,IAAY,EAAE,MAAgB;;QACjC,MAAA,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,0CAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACH,YAAY,CAAC,SAAoB
|
|
1
|
+
{"version":3,"file":"GameObject.js","sourceRoot":"","sources":["../src/GameObject.ts"],"names":[],"mappings":"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"}
|
package/dist/Input.js
CHANGED
|
@@ -16,40 +16,46 @@ class Input {
|
|
|
16
16
|
this.isInitialized = true;
|
|
17
17
|
document.addEventListener('mousemove', (event) => {
|
|
18
18
|
var _a, _b, _c, _d;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
const canvas = document.getElementById('canvas');
|
|
20
|
+
if (canvas && typeof canvas.getBoundingClientRect === 'function') {
|
|
21
|
+
const rect = canvas.getBoundingClientRect();
|
|
22
|
+
this.mousePosition.x = event.clientX - rect.left;
|
|
23
|
+
this.mousePosition.y = event.clientY - rect.top;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this.mousePosition.x = event.clientX;
|
|
27
|
+
this.mousePosition.y = event.clientY;
|
|
28
|
+
}
|
|
29
|
+
if (this.isResizing && Engine.selectedObject && Engine.debug) {
|
|
22
30
|
const obj = Engine.selectedObject;
|
|
23
31
|
const { worldPosition } = obj.transform;
|
|
24
|
-
const
|
|
25
|
-
const
|
|
32
|
+
const scale = obj.transform.scale || new Vector2(1, 1);
|
|
33
|
+
const worldWidth = Math.max(5, this.mouseX - worldPosition.x);
|
|
34
|
+
const worldHeight = Math.max(5, this.mouseY - worldPosition.y);
|
|
26
35
|
const sprite = obj.getComponent(SpriteComponent);
|
|
27
36
|
if (sprite && sprite.frameWidth > 0 && sprite.frameHeight > 0) {
|
|
28
|
-
//
|
|
29
|
-
obj.transform.scale.x =
|
|
30
|
-
obj.transform.scale.y =
|
|
31
|
-
// Sync bounds immediately
|
|
32
|
-
if (obj.bounds) {
|
|
33
|
-
obj.bounds.width = newWidth;
|
|
34
|
-
obj.bounds.height = newHeight;
|
|
35
|
-
}
|
|
37
|
+
// Resizing sprites changes their transform scale
|
|
38
|
+
obj.transform.scale.x = worldWidth / sprite.frameWidth;
|
|
39
|
+
obj.transform.scale.y = worldHeight / sprite.frameHeight;
|
|
36
40
|
}
|
|
37
41
|
else {
|
|
38
|
-
//
|
|
42
|
+
// Resizing other components changes their local dimensions
|
|
43
|
+
// We must compensate for current scale so that: localDim * scale = worldWidth
|
|
44
|
+
const localWidth = worldWidth / scale.x;
|
|
45
|
+
const localHeight = worldHeight / scale.y;
|
|
39
46
|
const shape = obj.getComponent(ShapeComponent);
|
|
40
47
|
const text = obj.getComponent(TextComponent);
|
|
41
|
-
if (shape
|
|
42
|
-
shape.width =
|
|
43
|
-
shape.height =
|
|
48
|
+
if (shape) {
|
|
49
|
+
shape.width = localWidth;
|
|
50
|
+
shape.height = localHeight;
|
|
44
51
|
}
|
|
45
|
-
else if (text
|
|
46
|
-
text.width =
|
|
47
|
-
text.height =
|
|
52
|
+
else if (text) {
|
|
53
|
+
text.width = localWidth;
|
|
54
|
+
text.height = localHeight;
|
|
48
55
|
}
|
|
49
56
|
else if (obj.bounds) {
|
|
50
|
-
|
|
51
|
-
obj.bounds.
|
|
52
|
-
obj.bounds.height = newHeight;
|
|
57
|
+
obj.bounds.width = localWidth;
|
|
58
|
+
obj.bounds.height = localHeight;
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
61
|
return;
|
|
@@ -70,9 +76,10 @@ class Input {
|
|
|
70
76
|
// Cursor feedback for resize handle
|
|
71
77
|
if (Engine.debug && Engine.selectedObject && !this.isDragging && !this.isResizing) {
|
|
72
78
|
const obj = Engine.selectedObject;
|
|
73
|
-
const width = (_b = (_a = obj.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
|
|
74
|
-
const height = (_d = (_c = obj.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;
|
|
75
79
|
const { worldPosition } = obj.transform;
|
|
80
|
+
const worldScale = obj.transform.worldScale || new Vector2(1, 1);
|
|
81
|
+
const width = ((_b = (_a = obj.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) * worldScale.x;
|
|
82
|
+
const height = ((_d = (_c = obj.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0) * worldScale.y;
|
|
76
83
|
const handleSize = 8 / Engine.camera.zoom;
|
|
77
84
|
const worldPos = new Vector2(this.mouseX, this.mouseY);
|
|
78
85
|
if (worldPos.x > worldPosition.x + width - handleSize / 2 &&
|
|
@@ -93,7 +100,7 @@ class Input {
|
|
|
93
100
|
}
|
|
94
101
|
});
|
|
95
102
|
document.addEventListener('mousedown', (event) => {
|
|
96
|
-
var _a, _b, _c, _d
|
|
103
|
+
var _a, _b, _c, _d;
|
|
97
104
|
if (event.target.tagName !== 'CANVAS')
|
|
98
105
|
return;
|
|
99
106
|
this.keys.add(`mouse${event.button}`);
|
|
@@ -103,9 +110,10 @@ class Input {
|
|
|
103
110
|
// First check if we're clicking the resize handle of the ALREADY selected object
|
|
104
111
|
if (Engine.selectedObject) {
|
|
105
112
|
const obj = Engine.selectedObject;
|
|
106
|
-
const width = (_b = (_a = obj.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
|
|
107
|
-
const height = (_d = (_c = obj.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;
|
|
108
113
|
const { worldPosition } = obj.transform;
|
|
114
|
+
const worldScale = obj.transform.worldScale || new Vector2(1, 1);
|
|
115
|
+
const width = ((_b = (_a = obj.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) * worldScale.x;
|
|
116
|
+
const height = ((_d = (_c = obj.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0) * worldScale.y;
|
|
109
117
|
const handleSize = 8 / Engine.camera.zoom;
|
|
110
118
|
if (worldPos.x > worldPosition.x + width - handleSize / 2 &&
|
|
111
119
|
worldPos.x < worldPosition.x + width + handleSize / 2 &&
|
|
@@ -118,11 +126,15 @@ class Input {
|
|
|
118
126
|
const objects = Engine.currentScene ? Engine.currentScene.objects : Engine.objects;
|
|
119
127
|
let found = false;
|
|
120
128
|
// Check objects from top to bottom (zIndex)
|
|
121
|
-
const sorted = Array.from(objects).sort((a, b) =>
|
|
122
|
-
for (
|
|
123
|
-
const
|
|
124
|
-
|
|
129
|
+
const sorted = Array.from(objects).sort((a, b) => b.metadata.zIndex - a.metadata.zIndex);
|
|
130
|
+
for (let i = 0; i < sorted.length; i++) {
|
|
131
|
+
const obj = sorted[i];
|
|
132
|
+
if (!obj.bounds)
|
|
133
|
+
continue;
|
|
125
134
|
const { worldPosition } = obj.transform;
|
|
135
|
+
const worldScale = obj.transform.worldScale || new Vector2(1, 1);
|
|
136
|
+
const width = obj.bounds.width * worldScale.x;
|
|
137
|
+
const height = obj.bounds.height * worldScale.y;
|
|
126
138
|
if (worldPos.x > worldPosition.x &&
|
|
127
139
|
worldPos.x < worldPosition.x + width &&
|
|
128
140
|
worldPos.y > worldPosition.y &&
|
|
@@ -151,17 +163,20 @@ class Input {
|
|
|
151
163
|
}
|
|
152
164
|
});
|
|
153
165
|
document.addEventListener('keydown', (event) => {
|
|
154
|
-
|
|
166
|
+
const key = String(event.key).toLowerCase();
|
|
167
|
+
this.keys.add(key);
|
|
155
168
|
// Toggle Pause with P
|
|
156
|
-
if (
|
|
169
|
+
if (key === 'p') {
|
|
157
170
|
Engine.paused = !Engine.paused;
|
|
158
171
|
if (Engine.paused) {
|
|
159
|
-
document.getElementById('canvas')
|
|
172
|
+
const canvas = document.getElementById('canvas');
|
|
173
|
+
if (canvas)
|
|
174
|
+
canvas.style.cursor = 'default';
|
|
160
175
|
}
|
|
161
176
|
}
|
|
162
177
|
});
|
|
163
178
|
document.addEventListener('keyup', (event) => {
|
|
164
|
-
this.keys.delete(event.key.toLowerCase());
|
|
179
|
+
this.keys.delete(String(event.key).toLowerCase());
|
|
165
180
|
});
|
|
166
181
|
window.addEventListener('blur', () => {
|
|
167
182
|
this.keys.clear();
|
package/dist/Input.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../src/Input.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAE/C;;GAEG;AACH,MAAqB,KAAK;IAUxB;;OAEG;IACH,MAAM,CAAC,IAAI;QACT,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,CAAC,KAAiB,EAAE,EAAE;;YAC3D,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Input.js","sourceRoot":"","sources":["../src/Input.ts"],"names":[],"mappings":"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"}
|
package/dist/Physics.d.ts
CHANGED
package/dist/Physics.js
CHANGED
|
@@ -33,7 +33,9 @@ export default class Physics {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
static circleVsCircle(c1, c2) {
|
|
36
|
-
const
|
|
36
|
+
const r1 = c1.worldRadius;
|
|
37
|
+
const r2 = c2.worldRadius;
|
|
38
|
+
const combinedRadius = r1 + r2;
|
|
37
39
|
const diff = c2.center.clone().subtract(c1.center);
|
|
38
40
|
const distSq = diff.x * diff.x + diff.y * diff.y;
|
|
39
41
|
if (distSq > combinedRadius * combinedRadius)
|
|
@@ -49,13 +51,15 @@ export default class Physics {
|
|
|
49
51
|
}
|
|
50
52
|
static aabbVsAabb(obj1, obj2) {
|
|
51
53
|
var _a, _b, _c, _d, _e, _f, _g, _h;
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
const
|
|
57
|
-
const
|
|
58
|
-
|
|
54
|
+
const scale1 = obj1.transform.worldScale;
|
|
55
|
+
const scale2 = obj2.transform.worldScale;
|
|
56
|
+
const w1 = ((_b = (_a = obj1.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) * scale1.x;
|
|
57
|
+
const h1 = ((_d = (_c = obj1.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0) * scale1.y;
|
|
58
|
+
const w2 = ((_f = (_e = obj2.bounds) === null || _e === void 0 ? void 0 : _e.width) !== null && _f !== void 0 ? _f : 0) * scale2.x;
|
|
59
|
+
const h2 = ((_h = (_g = obj2.bounds) === null || _g === void 0 ? void 0 : _g.height) !== null && _h !== void 0 ? _h : 0) * scale2.y;
|
|
60
|
+
const pos1 = obj1.transform.worldPosition;
|
|
61
|
+
const pos2 = obj2.transform.worldPosition;
|
|
62
|
+
// Center to center distance in world space
|
|
59
63
|
const center1 = new Vector2(pos1.x + w1 / 2, pos1.y + h1 / 2);
|
|
60
64
|
const center2 = new Vector2(pos2.x + w2 / 2, pos2.y + h2 / 2);
|
|
61
65
|
const diff = center2.clone().subtract(center1);
|
|
@@ -86,27 +90,29 @@ export default class Physics {
|
|
|
86
90
|
}
|
|
87
91
|
static circleVsRect(circle, rect) {
|
|
88
92
|
var _a, _b, _c, _d;
|
|
89
|
-
const
|
|
90
|
-
const
|
|
91
|
-
const
|
|
92
|
-
const
|
|
93
|
-
const
|
|
94
|
-
const
|
|
93
|
+
const cRadius = circle.worldRadius;
|
|
94
|
+
const cCenter = circle.center;
|
|
95
|
+
const rScale = rect.transform.worldScale;
|
|
96
|
+
const rectWidth = ((_b = (_a = rect.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) * rScale.x;
|
|
97
|
+
const rectHeight = ((_d = (_c = rect.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0) * rScale.y;
|
|
98
|
+
const rectPos = rect.transform.worldPosition;
|
|
99
|
+
const closestX = Math.max(rectPos.x, Math.min(cCenter.x, rectPos.x + rectWidth));
|
|
100
|
+
const closestY = Math.max(rectPos.y, Math.min(cCenter.y, rectPos.y + rectHeight));
|
|
101
|
+
const diff = new Vector2(closestX, closestY).subtract(cCenter);
|
|
95
102
|
const distSq = diff.x * diff.x + diff.y * diff.y;
|
|
96
|
-
if (distSq >
|
|
103
|
+
if (distSq > cRadius * cRadius)
|
|
97
104
|
return null;
|
|
98
105
|
const dist = Math.sqrt(distSq);
|
|
99
106
|
let normal;
|
|
100
107
|
let depth;
|
|
101
108
|
if (dist === 0) {
|
|
102
109
|
// Circle center is inside the rectangle
|
|
103
|
-
const
|
|
104
|
-
const
|
|
105
|
-
const
|
|
106
|
-
const
|
|
107
|
-
const dBottom = rectPos.y + rectHeight - center.y;
|
|
110
|
+
const dLeft = cCenter.x - rectPos.x;
|
|
111
|
+
const dRight = rectPos.x + rectWidth - cCenter.x;
|
|
112
|
+
const dTop = cCenter.y - rectPos.y;
|
|
113
|
+
const dBottom = rectPos.y + rectHeight - cCenter.y;
|
|
108
114
|
const minDist = Math.min(dLeft, dRight, dTop, dBottom);
|
|
109
|
-
depth =
|
|
115
|
+
depth = cRadius + minDist;
|
|
110
116
|
if (minDist === dLeft)
|
|
111
117
|
normal = new Vector2(-1, 0);
|
|
112
118
|
else if (minDist === dRight)
|
|
@@ -118,7 +124,7 @@ export default class Physics {
|
|
|
118
124
|
}
|
|
119
125
|
else {
|
|
120
126
|
normal = diff.multiply(1 / dist);
|
|
121
|
-
depth =
|
|
127
|
+
depth = cRadius - dist;
|
|
122
128
|
}
|
|
123
129
|
return {
|
|
124
130
|
obj1: circle,
|
|
@@ -163,6 +169,7 @@ export default class Physics {
|
|
|
163
169
|
const slop = 0.01; // Allowable penetration
|
|
164
170
|
const correctionMagnitude = (Math.max(depth - slop, 0) / ((isStatic1 ? 0 : 1) + (isStatic2 ? 0 : 1))) * percent;
|
|
165
171
|
const correction = normal.clone().multiply(correctionMagnitude);
|
|
172
|
+
// Apply correction to LOCAL position based on world normal
|
|
166
173
|
if (!isStatic1)
|
|
167
174
|
obj1.transform.position.subtract(correction);
|
|
168
175
|
if (!isStatic2)
|
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;AACrD,OAAO,MAAM,MAAM,aAAa,CAAC;AAgBjC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IAC1B;;;;;OAKG;IACH,MAAM,CAAC,oBAAoB,CAAC,IAAgB,EAAE,IAAgB;QAC5D,MAAM,SAAS,GAAG,IAAI,YAAY,MAAM,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,YAAY,MAAM,CAAC;QAEzC,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAc,EAAE,IAAc,CAAC,CAAC;QAC7D,CAAC;aAAM,IAAI,SAAS,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,MAAM,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAW,CAAC;YACnD,MAAM,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,IAAI,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC1B,mCAAmC;gBACnC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,EAAU,EAAE,EAAU;QAClD,MAAM,
|
|
1
|
+
{"version":3,"file":"Physics.js","sourceRoot":"","sources":["../src/Physics.ts"],"names":[],"mappings":"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"}
|
package/dist/RenderingSystem.js
CHANGED
|
@@ -68,9 +68,9 @@ export default class RenderingSystem extends System {
|
|
|
68
68
|
const sorted = Array.from(entities).sort((a, b) => (a.metadata.zIndex > b.metadata.zIndex ? 1 : -1));
|
|
69
69
|
sorted.forEach((object) => {
|
|
70
70
|
var _a, _b, _c, _d;
|
|
71
|
-
const { worldPosition } = object.transform;
|
|
72
|
-
const width = (_b = (_a = object.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0;
|
|
73
|
-
const height = (_d = (_c = object.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0;
|
|
71
|
+
const { worldPosition, worldScale } = object.transform;
|
|
72
|
+
const width = ((_b = (_a = object.bounds) === null || _a === void 0 ? void 0 : _a.width) !== null && _b !== void 0 ? _b : 0) * worldScale.x;
|
|
73
|
+
const height = ((_d = (_c = object.bounds) === null || _c === void 0 ? void 0 : _c.height) !== null && _d !== void 0 ? _d : 0) * worldScale.y;
|
|
74
74
|
// Frustum Culling
|
|
75
75
|
if (worldPosition.x < bounds.x + bounds.width &&
|
|
76
76
|
worldPosition.x + width > bounds.x &&
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderingSystem.js","sourceRoot":"","sources":["../src/RenderingSystem.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RenderingSystem.js","sourceRoot":"","sources":["../src/RenderingSystem.ts"],"names":[],"mappings":"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"}
|
package/dist/ShapeComponent.d.ts
CHANGED
|
@@ -11,21 +11,22 @@ export default class ShapeComponent extends RenderComponent {
|
|
|
11
11
|
type: ShapeType;
|
|
12
12
|
/** Fill colour. */
|
|
13
13
|
colour: string;
|
|
14
|
-
private _width;
|
|
15
|
-
private _height;
|
|
16
14
|
/** Width (for rect) or radius (for circle). */
|
|
17
15
|
get width(): number;
|
|
18
16
|
set width(val: number);
|
|
19
17
|
/** Height (for rect) or unused (for circle). */
|
|
20
18
|
get height(): number;
|
|
21
19
|
set height(val: number);
|
|
20
|
+
private _initialWidth;
|
|
21
|
+
private _initialHeight;
|
|
22
22
|
constructor(type: ShapeType, colour: string, width?: number, height?: number);
|
|
23
23
|
/**
|
|
24
24
|
* Ensures the parent GameObject has a BoundsComponent synced with this shape.
|
|
25
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
25
26
|
*/
|
|
26
27
|
private _updateGameObjectBounds;
|
|
27
28
|
/**
|
|
28
|
-
* Lifecycle hook called
|
|
29
|
+
* Lifecycle hook called when the component is added to a GameObject.
|
|
29
30
|
*/
|
|
30
31
|
onAttach(): void;
|
|
31
32
|
/**
|
package/dist/ShapeComponent.js
CHANGED
|
@@ -5,47 +5,76 @@ import BoundsComponent from './BoundsComponent.js';
|
|
|
5
5
|
*/
|
|
6
6
|
export default class ShapeComponent extends RenderComponent {
|
|
7
7
|
/** Width (for rect) or radius (for circle). */
|
|
8
|
-
get width() {
|
|
8
|
+
get width() {
|
|
9
|
+
var _a;
|
|
10
|
+
if ((_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) {
|
|
11
|
+
if (this.type === 'circle') {
|
|
12
|
+
return this.gameObject.bounds.width / 2;
|
|
13
|
+
}
|
|
14
|
+
return this.gameObject.bounds.width;
|
|
15
|
+
}
|
|
16
|
+
return this._initialWidth;
|
|
17
|
+
}
|
|
9
18
|
set width(val) {
|
|
10
|
-
|
|
11
|
-
this.
|
|
19
|
+
var _a;
|
|
20
|
+
this._initialWidth = val;
|
|
21
|
+
if ((_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) {
|
|
22
|
+
if (this.type === 'circle') {
|
|
23
|
+
this.gameObject.bounds.width = val * 2;
|
|
24
|
+
this.gameObject.bounds.height = val * 2;
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.gameObject.bounds.width = val;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
12
30
|
}
|
|
13
31
|
/** Height (for rect) or unused (for circle). */
|
|
14
|
-
get height() {
|
|
32
|
+
get height() {
|
|
33
|
+
var _a;
|
|
34
|
+
if ((_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) {
|
|
35
|
+
return this.gameObject.bounds.height;
|
|
36
|
+
}
|
|
37
|
+
return this._initialHeight;
|
|
38
|
+
}
|
|
15
39
|
set height(val) {
|
|
16
|
-
|
|
17
|
-
this.
|
|
40
|
+
var _a;
|
|
41
|
+
this._initialHeight = val;
|
|
42
|
+
if ((_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) {
|
|
43
|
+
this.gameObject.bounds.height = val;
|
|
44
|
+
}
|
|
18
45
|
}
|
|
19
46
|
constructor(type, colour, width = 0, height = 0) {
|
|
20
47
|
super();
|
|
21
48
|
this.type = type;
|
|
22
49
|
this.colour = colour;
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
50
|
+
this._initialWidth = width;
|
|
51
|
+
this._initialHeight = height;
|
|
25
52
|
}
|
|
26
53
|
/**
|
|
27
54
|
* Ensures the parent GameObject has a BoundsComponent synced with this shape.
|
|
55
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
28
56
|
*/
|
|
29
57
|
_updateGameObjectBounds() {
|
|
30
58
|
if (!this.gameObject)
|
|
31
59
|
return;
|
|
32
|
-
let targetWidth = this._width;
|
|
33
|
-
let targetHeight = this._height;
|
|
34
|
-
if (this.type === 'circle') {
|
|
35
|
-
targetWidth = this._width * 2;
|
|
36
|
-
targetHeight = this._width * 2;
|
|
37
|
-
}
|
|
38
60
|
if (!this.gameObject.bounds) {
|
|
61
|
+
let targetWidth = this._initialWidth;
|
|
62
|
+
let targetHeight = this._initialHeight;
|
|
63
|
+
if (this.type === 'circle') {
|
|
64
|
+
targetWidth = this._initialWidth * 2;
|
|
65
|
+
targetHeight = this._initialWidth * 2;
|
|
66
|
+
}
|
|
39
67
|
this.gameObject.bounds = new BoundsComponent(targetWidth, targetHeight);
|
|
40
68
|
this.gameObject.addComponent(this.gameObject.bounds);
|
|
41
69
|
}
|
|
42
70
|
else {
|
|
43
|
-
|
|
44
|
-
this.
|
|
71
|
+
// Sync initial values if bounds already exist
|
|
72
|
+
this.width = this._initialWidth;
|
|
73
|
+
this.height = this._initialHeight;
|
|
45
74
|
}
|
|
46
75
|
}
|
|
47
76
|
/**
|
|
48
|
-
* Lifecycle hook called
|
|
77
|
+
* Lifecycle hook called when the component is added to a GameObject.
|
|
49
78
|
*/
|
|
50
79
|
onAttach() {
|
|
51
80
|
this._updateGameObjectBounds();
|
|
@@ -55,9 +84,10 @@ export default class ShapeComponent extends RenderComponent {
|
|
|
55
84
|
* @param ctx The canvas 2D rendering context.
|
|
56
85
|
*/
|
|
57
86
|
draw(ctx) {
|
|
58
|
-
if (!this.gameObject)
|
|
87
|
+
if (!this.gameObject || !this.gameObject.bounds)
|
|
59
88
|
return;
|
|
60
89
|
const { worldPosition, worldRotation, worldScale } = this.gameObject.transform;
|
|
90
|
+
const { width, height } = this.gameObject.bounds;
|
|
61
91
|
ctx.save();
|
|
62
92
|
ctx.translate(worldPosition.x, worldPosition.y);
|
|
63
93
|
if (worldRotation !== 0)
|
|
@@ -65,12 +95,13 @@ export default class ShapeComponent extends RenderComponent {
|
|
|
65
95
|
ctx.scale(worldScale.x, worldScale.y);
|
|
66
96
|
ctx.fillStyle = this.colour;
|
|
67
97
|
if (this.type === 'rect') {
|
|
68
|
-
ctx.fillRect(0, 0,
|
|
98
|
+
ctx.fillRect(0, 0, width, height);
|
|
69
99
|
}
|
|
70
100
|
else if (this.type === 'circle') {
|
|
101
|
+
const radius = width / 2;
|
|
71
102
|
ctx.beginPath();
|
|
72
|
-
//
|
|
73
|
-
ctx.arc(
|
|
103
|
+
// In local space center is at (radius, radius)
|
|
104
|
+
ctx.arc(radius, radius, radius, 0, Math.PI * 2);
|
|
74
105
|
ctx.fill();
|
|
75
106
|
ctx.closePath();
|
|
76
107
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShapeComponent.js","sourceRoot":"","sources":["../src/ShapeComponent.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAOnD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"ShapeComponent.js","sourceRoot":"","sources":["../src/ShapeComponent.ts"],"names":[],"mappings":"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"}
|
package/dist/Sprite.d.ts
CHANGED
|
@@ -67,7 +67,8 @@ export default class Sprite extends GameObject {
|
|
|
67
67
|
set scale(val: number | Vector2);
|
|
68
68
|
constructor(props: SpriteProps);
|
|
69
69
|
/**
|
|
70
|
-
* Updates the bounds of the sprite based on its current frame size
|
|
70
|
+
* Updates the bounds of the sprite based on its current frame size.
|
|
71
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
71
72
|
* @private
|
|
72
73
|
*/
|
|
73
74
|
private _updateBounds;
|
package/dist/Sprite.js
CHANGED
|
@@ -48,7 +48,6 @@ export default class Sprite extends GameObject {
|
|
|
48
48
|
else {
|
|
49
49
|
this.transform.scale = val;
|
|
50
50
|
}
|
|
51
|
-
this._updateBounds();
|
|
52
51
|
}
|
|
53
52
|
constructor(props) {
|
|
54
53
|
if (!props.tag) {
|
|
@@ -66,12 +65,12 @@ export default class Sprite extends GameObject {
|
|
|
66
65
|
}
|
|
67
66
|
this._spriteComponent = new SpriteComponent(img, props.rows, props.cols, props.startCol, props.endCol);
|
|
68
67
|
this.addComponent(this._spriteComponent);
|
|
69
|
-
const
|
|
70
|
-
if (typeof
|
|
71
|
-
this.transform.scale = new Vector2(
|
|
68
|
+
const initialScale = props.scale !== undefined ? props.scale : 1;
|
|
69
|
+
if (typeof initialScale === 'number') {
|
|
70
|
+
this.transform.scale = new Vector2(initialScale, initialScale);
|
|
72
71
|
}
|
|
73
72
|
else {
|
|
74
|
-
this.transform.scale =
|
|
73
|
+
this.transform.scale = initialScale;
|
|
75
74
|
}
|
|
76
75
|
this.bounds = new BoundsComponent(0, 0);
|
|
77
76
|
this.addComponent(this.bounds);
|
|
@@ -85,13 +84,14 @@ export default class Sprite extends GameObject {
|
|
|
85
84
|
this.registered = false;
|
|
86
85
|
}
|
|
87
86
|
/**
|
|
88
|
-
* Updates the bounds of the sprite based on its current frame size
|
|
87
|
+
* Updates the bounds of the sprite based on its current frame size.
|
|
88
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
89
89
|
* @private
|
|
90
90
|
*/
|
|
91
91
|
_updateBounds() {
|
|
92
92
|
if (this.bounds) {
|
|
93
|
-
this.bounds.width = this.frameWidth
|
|
94
|
-
this.bounds.height = this.frameHeight
|
|
93
|
+
this.bounds.width = this.frameWidth;
|
|
94
|
+
this.bounds.height = this.frameHeight;
|
|
95
95
|
}
|
|
96
96
|
}
|
|
97
97
|
/**
|
package/dist/Sprite.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Sprite.js","sourceRoot":"","sources":["../src/Sprite.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Sprite.js","sourceRoot":"","sources":["../src/Sprite.ts"],"names":[],"mappings":"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"}
|
package/dist/TextComponent.d.ts
CHANGED
|
@@ -16,21 +16,22 @@ export default class TextComponent extends RenderComponent {
|
|
|
16
16
|
horizontalAlign: HorizontalAlign;
|
|
17
17
|
/** Vertical alignment. */
|
|
18
18
|
verticalAlign: VerticalAlign;
|
|
19
|
-
private _width;
|
|
20
|
-
private _height;
|
|
21
19
|
/** Width of the background box or interaction area. */
|
|
22
20
|
get width(): number;
|
|
23
21
|
set width(val: number);
|
|
24
22
|
/** Height of the background box or interaction area. */
|
|
25
23
|
get height(): number;
|
|
26
24
|
set height(val: number);
|
|
25
|
+
private _initialWidth;
|
|
26
|
+
private _initialHeight;
|
|
27
27
|
constructor(text: string, font: string, colour: string, horizontalAlign: HorizontalAlign, verticalAlign: VerticalAlign, width: number, height: number, backgroundColour?: string);
|
|
28
28
|
/**
|
|
29
29
|
* Ensures the parent GameObject has a BoundsComponent synced with this component.
|
|
30
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
30
31
|
*/
|
|
31
32
|
private _updateGameObjectBounds;
|
|
32
33
|
/**
|
|
33
|
-
* Lifecycle hook called
|
|
34
|
+
* Lifecycle hook called when the component is added to a GameObject.
|
|
34
35
|
*/
|
|
35
36
|
onAttach(): void;
|
|
36
37
|
/**
|
package/dist/TextComponent.js
CHANGED
|
@@ -5,16 +5,28 @@ import BoundsComponent from './BoundsComponent.js';
|
|
|
5
5
|
*/
|
|
6
6
|
export default class TextComponent extends RenderComponent {
|
|
7
7
|
/** Width of the background box or interaction area. */
|
|
8
|
-
get width() {
|
|
8
|
+
get width() {
|
|
9
|
+
var _a, _b, _c;
|
|
10
|
+
return (_c = (_b = (_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) === null || _b === void 0 ? void 0 : _b.width) !== null && _c !== void 0 ? _c : this._initialWidth;
|
|
11
|
+
}
|
|
9
12
|
set width(val) {
|
|
10
|
-
|
|
11
|
-
this.
|
|
13
|
+
var _a;
|
|
14
|
+
this._initialWidth = val;
|
|
15
|
+
if ((_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) {
|
|
16
|
+
this.gameObject.bounds.width = val;
|
|
17
|
+
}
|
|
12
18
|
}
|
|
13
19
|
/** Height of the background box or interaction area. */
|
|
14
|
-
get height() {
|
|
20
|
+
get height() {
|
|
21
|
+
var _a, _b, _c;
|
|
22
|
+
return (_c = (_b = (_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) === null || _b === void 0 ? void 0 : _b.height) !== null && _c !== void 0 ? _c : this._initialHeight;
|
|
23
|
+
}
|
|
15
24
|
set height(val) {
|
|
16
|
-
|
|
17
|
-
this.
|
|
25
|
+
var _a;
|
|
26
|
+
this._initialHeight = val;
|
|
27
|
+
if ((_a = this.gameObject) === null || _a === void 0 ? void 0 : _a.bounds) {
|
|
28
|
+
this.gameObject.bounds.height = val;
|
|
29
|
+
}
|
|
18
30
|
}
|
|
19
31
|
constructor(text, font, colour, horizontalAlign, verticalAlign, width, height, backgroundColour = '') {
|
|
20
32
|
super();
|
|
@@ -25,27 +37,28 @@ export default class TextComponent extends RenderComponent {
|
|
|
25
37
|
this.colour = colour;
|
|
26
38
|
this.horizontalAlign = horizontalAlign;
|
|
27
39
|
this.verticalAlign = verticalAlign;
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
40
|
+
this._initialWidth = width;
|
|
41
|
+
this._initialHeight = height;
|
|
30
42
|
this.backgroundColour = backgroundColour;
|
|
31
43
|
}
|
|
32
44
|
/**
|
|
33
45
|
* Ensures the parent GameObject has a BoundsComponent synced with this component.
|
|
46
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
34
47
|
*/
|
|
35
48
|
_updateGameObjectBounds() {
|
|
36
49
|
if (!this.gameObject)
|
|
37
50
|
return;
|
|
38
51
|
if (!this.gameObject.bounds) {
|
|
39
|
-
this.gameObject.bounds = new BoundsComponent(this.
|
|
52
|
+
this.gameObject.bounds = new BoundsComponent(this._initialWidth, this._initialHeight);
|
|
40
53
|
this.gameObject.addComponent(this.gameObject.bounds);
|
|
41
54
|
}
|
|
42
55
|
else {
|
|
43
|
-
this.gameObject.bounds.width = this.
|
|
44
|
-
this.gameObject.bounds.height = this.
|
|
56
|
+
this.gameObject.bounds.width = this._initialWidth;
|
|
57
|
+
this.gameObject.bounds.height = this._initialHeight;
|
|
45
58
|
}
|
|
46
59
|
}
|
|
47
60
|
/**
|
|
48
|
-
* Lifecycle hook called
|
|
61
|
+
* Lifecycle hook called when the component is added to a GameObject.
|
|
49
62
|
*/
|
|
50
63
|
onAttach() {
|
|
51
64
|
this._updateGameObjectBounds();
|
|
@@ -55,9 +68,10 @@ export default class TextComponent extends RenderComponent {
|
|
|
55
68
|
* @param ctx The canvas 2D rendering context.
|
|
56
69
|
*/
|
|
57
70
|
draw(ctx) {
|
|
58
|
-
if (!this.gameObject)
|
|
71
|
+
if (!this.gameObject || !this.gameObject.bounds)
|
|
59
72
|
return;
|
|
60
73
|
const { worldPosition, worldRotation, worldScale } = this.gameObject.transform;
|
|
74
|
+
const { width, height } = this.gameObject.bounds;
|
|
61
75
|
ctx.save();
|
|
62
76
|
ctx.translate(worldPosition.x, worldPosition.y);
|
|
63
77
|
if (worldRotation !== 0)
|
|
@@ -65,13 +79,24 @@ export default class TextComponent extends RenderComponent {
|
|
|
65
79
|
ctx.scale(worldScale.x, worldScale.y);
|
|
66
80
|
if (this.backgroundColour) {
|
|
67
81
|
ctx.fillStyle = this.backgroundColour;
|
|
68
|
-
ctx.fillRect(0, 0,
|
|
82
|
+
ctx.fillRect(0, 0, width, height);
|
|
69
83
|
}
|
|
70
84
|
ctx.font = this.font;
|
|
71
85
|
ctx.fillStyle = this.colour;
|
|
72
86
|
ctx.textAlign = this.horizontalAlign;
|
|
73
87
|
ctx.textBaseline = this.verticalAlign;
|
|
74
|
-
|
|
88
|
+
// Calculate draw position based on alignment
|
|
89
|
+
let x = 0;
|
|
90
|
+
let y = 0;
|
|
91
|
+
if (this.horizontalAlign === 'center')
|
|
92
|
+
x = width / 2;
|
|
93
|
+
else if (this.horizontalAlign === 'right' || this.horizontalAlign === 'end')
|
|
94
|
+
x = width;
|
|
95
|
+
if (this.verticalAlign === 'middle')
|
|
96
|
+
y = height / 2;
|
|
97
|
+
else if (this.verticalAlign === 'bottom')
|
|
98
|
+
y = height;
|
|
99
|
+
ctx.fillText(this.text, x, y);
|
|
75
100
|
ctx.restore();
|
|
76
101
|
}
|
|
77
102
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextComponent.js","sourceRoot":"","sources":["../src/TextComponent.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAGnD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,eAAe;
|
|
1
|
+
{"version":3,"file":"TextComponent.js","sourceRoot":"","sources":["../src/TextComponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,10 +14,11 @@ export default class TilemapComponent extends RenderComponent {
|
|
|
14
14
|
constructor(tileset: HTMLImageElement, data: number[][], tileSize: number, tilesetCols: number);
|
|
15
15
|
/**
|
|
16
16
|
* Ensures the parent GameObject has a BoundsComponent synced with this tilemap.
|
|
17
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
17
18
|
*/
|
|
18
19
|
private _updateGameObjectBounds;
|
|
19
20
|
/**
|
|
20
|
-
* Lifecycle hook called
|
|
21
|
+
* Lifecycle hook called when the component is added to a GameObject.
|
|
21
22
|
*/
|
|
22
23
|
onAttach(): void;
|
|
23
24
|
/**
|
package/dist/TilemapComponent.js
CHANGED
|
@@ -13,6 +13,7 @@ export default class TilemapComponent extends RenderComponent {
|
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Ensures the parent GameObject has a BoundsComponent synced with this tilemap.
|
|
16
|
+
* Note: Bounds represent the BASE local size (unscaled).
|
|
16
17
|
*/
|
|
17
18
|
_updateGameObjectBounds() {
|
|
18
19
|
if (!this.gameObject)
|
|
@@ -29,7 +30,7 @@ export default class TilemapComponent extends RenderComponent {
|
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
32
|
/**
|
|
32
|
-
* Lifecycle hook called
|
|
33
|
+
* Lifecycle hook called when the component is added to a GameObject.
|
|
33
34
|
*/
|
|
34
35
|
onAttach() {
|
|
35
36
|
this._updateGameObjectBounds();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TilemapComponent.js","sourceRoot":"","sources":["../src/TilemapComponent.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,MAAM,sBAAsB,CAAC;AACnD,OAAO,eAAe,MAAM,sBAAsB,CAAC;AAEnD;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,eAAe;IAU3D,YAAY,OAAyB,EAAE,IAAgB,EAAE,QAAgB,EAAE,WAAmB;QAC5F,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"TilemapComponent.js","sourceRoot":"","sources":["../src/TilemapComponent.ts"],"names":[],"mappings":"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"}
|