@datamoc/mw_games 0.30.0 → 0.31.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/CHANGELOG.md +19 -0
- package/README.md +1 -1
- package/api-surface.json +72 -0
- package/dist/mw_games.global.js +20 -20
- package/dist/two-d/render/Camera.d.ts +13 -3
- package/dist/two-d/render/Camera.d.ts.map +1 -1
- package/dist/two-d/render/Camera.js +35 -25
- package/dist/two-d/render/Camera.js.map +1 -1
- package/dist/two-d/render/SpriteMotion.d.ts +121 -0
- package/dist/two-d/render/SpriteMotion.d.ts.map +1 -0
- package/dist/two-d/render/SpriteMotion.js +193 -0
- package/dist/two-d/render/SpriteMotion.js.map +1 -0
- package/dist/two-d/render/index.d.ts +2 -0
- package/dist/two-d/render/index.d.ts.map +1 -1
- package/dist/two-d/render/index.js +1 -0
- package/dist/two-d/render/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/sbom.cdx.json +6 -6
|
@@ -66,6 +66,12 @@ export interface CameraOptions {
|
|
|
66
66
|
* its source, without a per-tile sampling flag.
|
|
67
67
|
*/
|
|
68
68
|
pixelPerfectTileSize?: number;
|
|
69
|
+
/**
|
|
70
|
+
* Device pixels per CSS pixel, read live. `apply()` rounds the screen offset, and
|
|
71
|
+
* `pixelPerfectTileSize` snaps zoom, to whole *device* pixels at this ratio. Defaults to 1;
|
|
72
|
+
* `createCamera` supplies the running renderer's resolution.
|
|
73
|
+
*/
|
|
74
|
+
resolution?: () => number;
|
|
69
75
|
}
|
|
70
76
|
/**
|
|
71
77
|
* @example
|
|
@@ -92,7 +98,8 @@ export declare class Camera {
|
|
|
92
98
|
/** centre of the view, in world units */
|
|
93
99
|
x: number;
|
|
94
100
|
y: number;
|
|
95
|
-
private
|
|
101
|
+
private requestedZoom;
|
|
102
|
+
private readonly resolution;
|
|
96
103
|
private deadzone;
|
|
97
104
|
private readonly pixelPerfectTileSize?;
|
|
98
105
|
private viewWidth;
|
|
@@ -145,6 +152,7 @@ export declare class Camera {
|
|
|
145
152
|
animateRotationTo(angle: number, intensity?: number): void;
|
|
146
153
|
/** cos/sin of the current rotation, the shared arithmetic `toScreen`/`toWorld`/`view` use */
|
|
147
154
|
private get spin();
|
|
155
|
+
/** snapped on every read, not on set, so a resolution change (a `QualityScaler` step) is followed */
|
|
148
156
|
get zoom(): number;
|
|
149
157
|
set zoom(value: number);
|
|
150
158
|
/**
|
|
@@ -211,9 +219,11 @@ export declare class Camera {
|
|
|
211
219
|
};
|
|
212
220
|
private clampedCentre;
|
|
213
221
|
private apply;
|
|
222
|
+
private snapToDevice;
|
|
214
223
|
}
|
|
215
224
|
/**
|
|
216
|
-
* The nearest zoom to `zoom` at which `tileSize * zoom` is a whole number of
|
|
225
|
+
* The nearest zoom to `zoom` at which `tileSize * zoom` is a whole number of device pixels
|
|
226
|
+
* (`resolution` device pixels per screen pixel, default 1) -
|
|
217
227
|
* the pure math behind `CameraOptions.pixelPerfectTileSize`, exported so a game can snap a
|
|
218
228
|
* zoom value (from a slider, say) before ever handing it to a `Camera`.
|
|
219
229
|
*
|
|
@@ -224,7 +234,7 @@ export declare class Camera {
|
|
|
224
234
|
* console.log(snapZoom(2.4, 16)); // 2.375 - 16 * 2.375 = 38, a whole number of pixels
|
|
225
235
|
* ```
|
|
226
236
|
*/
|
|
227
|
-
export declare function snapZoom(zoom: number, tileSize: number): number;
|
|
237
|
+
export declare function snapZoom(zoom: number, tileSize: number, resolution?: number): number;
|
|
228
238
|
/**
|
|
229
239
|
* a camera sized to the running game's viewport, updated on every frame
|
|
230
240
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/Camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAMpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,aAAa;IAC7B,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAExB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Camera.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/Camera.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAMpC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,MAAM,WAAW,aAAa;IAC7B,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;OAKG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,KAAK,CAAC;IAExB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;;;;;;;;OAWG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,MAAM;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,KAAK,8CAAmB;IAEjC,yCAAyC;IACzC,CAAC,SAAK;IACN,CAAC,SAAK;IAEN,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAS;IAE/C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,UAAU,CAAK;IAGvB,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,OAAO,CAAK;IAEpB,OAAO,CAAC,YAAY,CAAyC;IAG7D,OAAO,CAAC,eAAe,CAAK;IAE5B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAK;IAEnB,yFAAyF;IACzF,OAAO,CAAC,MAAM,CAA2E;IAEzF,2FAA2F;IAC3F,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,OAAO,CAAC,IAAI,CAAK;IAKjB,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,cAAc,CAAK;IAE3B,YAAY,OAAO,GAAE,aAAkB,EAQtC;IAED,kFAAkF;IAClF,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED,oFAAoF;IACpF,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED;;;;OAIG;IACH,IAAI,eAAe,IAAI,MAAM,CAE5B;IAED,kEAAkE;IAClE,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAMlC;IAED,6FAA6F;IAC7F,MAAM,CAAC,KAAK,SAAI,GAAG,IAAI,CAEtB;IAED;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAK5B;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,IAAI,CAGpD;IAED,6FAA6F;IAC7F,OAAO,KAAK,IAAI,GAGf;IAED,qGAAqG;IACrG,IAAI,IAAI,IAAI,MAAM,CAIjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAErB;IAED;;;;;OAKG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,IAAI,CAKzE;IAED;;;;;;;OAOG;IACH,IAAI,IAAI,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAiBlE;IAED,oEAAoE;IACpE,SAAS,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI,CAEzF;IAED,wEAAwE;IACxE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAMjC;IAED,kCAAkC;IAClC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,SAAI,GAAG,IAAI,CAG/C;IAED,oEAAoE;IACpE,MAAM,CAAC,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,SAAS,SAAI,GAAG,IAAI,CAG5D;IAED,aAAa,IAAI,IAAI,CAGpB;IAED,2DAA2D;IAC3D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,IAAI,CAM7C;IAED;;;;;;;;;OASG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,SAAM,GAAG,IAAI,CAEnD;IAED,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CA4CvB;IAED,iEAAiE;IACjE,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAavD;IAED,+FAA+F;IAC/F,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAStD;IAID,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,KAAK;IAwBb,OAAO,CAAC,YAAY;CAIpB;AAYD;;;;;;;;;;;;GAYG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,MAAM,CAG/E;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,GAAE,aAAkB,GAAG,MAAM,CAMhE"}
|
|
@@ -29,6 +29,7 @@ export class Camera {
|
|
|
29
29
|
/** centre of the view, in world units */
|
|
30
30
|
this.x = 0;
|
|
31
31
|
this.y = 0;
|
|
32
|
+
this.requestedZoom = 1;
|
|
32
33
|
this.viewWidth = 0;
|
|
33
34
|
this.viewHeight = 0;
|
|
34
35
|
//where this camera's own rectangle starts on screen; 0,0 for an ordinary full-screen
|
|
@@ -58,7 +59,7 @@ export class Camera {
|
|
|
58
59
|
this.stepsPerTurn = options.grid === 'hex' ? 6 : 4;
|
|
59
60
|
this.deadzone = options.deadzone ?? 0;
|
|
60
61
|
this.pixelPerfectTileSize = options.pixelPerfectTileSize;
|
|
61
|
-
this.
|
|
62
|
+
this.resolution = options.resolution ?? (() => 1);
|
|
62
63
|
this.zoom = options.zoom ?? 1;
|
|
63
64
|
}
|
|
64
65
|
/** the rotation step this view is turned to, always in `0 .. stepsPerTurn - 1` */
|
|
@@ -117,12 +118,14 @@ export class Camera {
|
|
|
117
118
|
const angle = this.rotation;
|
|
118
119
|
return { cos: Math.cos(angle), sin: Math.sin(angle) };
|
|
119
120
|
}
|
|
121
|
+
/** snapped on every read, not on set, so a resolution change (a `QualityScaler` step) is followed */
|
|
120
122
|
get zoom() {
|
|
121
|
-
return this.
|
|
123
|
+
return this.pixelPerfectTileSize
|
|
124
|
+
? snapZoom(this.requestedZoom, this.pixelPerfectTileSize, this.resolution())
|
|
125
|
+
: this.requestedZoom;
|
|
122
126
|
}
|
|
123
127
|
set zoom(value) {
|
|
124
|
-
|
|
125
|
-
this._zoom = this.pixelPerfectTileSize ? snapZoom(clamped, this.pixelPerfectTileSize) : clamped;
|
|
128
|
+
this.requestedZoom = Math.max(0.01, value);
|
|
126
129
|
}
|
|
127
130
|
/**
|
|
128
131
|
* The framework calls this on resize; sizes are in screen pixels. `screenX`/`screenY`
|
|
@@ -145,8 +148,8 @@ export class Camera {
|
|
|
145
148
|
* its exact numbers.
|
|
146
149
|
*/
|
|
147
150
|
get view() {
|
|
148
|
-
const width = this.viewWidth / this.
|
|
149
|
-
const height = this.viewHeight / this.
|
|
151
|
+
const width = this.viewWidth / this.zoom;
|
|
152
|
+
const height = this.viewHeight / this.zoom;
|
|
150
153
|
const { x: centreX, y: centreY } = this.clampedCentre(this.x, this.y);
|
|
151
154
|
if (this._angle === 0)
|
|
152
155
|
return { x: centreX - width / 2, y: centreY - height / 2, width, height };
|
|
@@ -207,14 +210,14 @@ export class Camera {
|
|
|
207
210
|
* it starts, matching what a caller asked for rather than what world-space asked for.
|
|
208
211
|
*/
|
|
209
212
|
shakeScreen(intensity, duration = 0.4) {
|
|
210
|
-
this.shake(intensity / this.
|
|
213
|
+
this.shake(intensity / this.zoom, duration);
|
|
211
214
|
}
|
|
212
215
|
update(dt) {
|
|
213
216
|
if (this.followTarget && this.followIntensity > 0) {
|
|
214
217
|
//half the view's world-unit size, not this.view itself: that getter also clamps to
|
|
215
218
|
//bounds, which the deadzone has no use for and would cost an extra allocation here
|
|
216
|
-
const deadX = ((this.viewWidth / this.
|
|
217
|
-
const deadY = ((this.viewHeight / this.
|
|
219
|
+
const deadX = ((this.viewWidth / this.zoom) * this.deadzone) / 2;
|
|
220
|
+
const deadY = ((this.viewHeight / this.zoom) * this.deadzone) / 2;
|
|
218
221
|
let dx = this.followTarget.x - this.x;
|
|
219
222
|
let dy = this.followTarget.y - this.y;
|
|
220
223
|
//inside the deadzone the camera simply does not move
|
|
@@ -260,16 +263,16 @@ export class Camera {
|
|
|
260
263
|
const dx = x - centreX;
|
|
261
264
|
const dy = y - centreY;
|
|
262
265
|
return {
|
|
263
|
-
x: (dx * cos - dy * sin) * this.
|
|
264
|
-
y: (dx * sin + dy * cos) * this.
|
|
266
|
+
x: (dx * cos - dy * sin) * this.zoom + this.screenX + this.viewWidth / 2,
|
|
267
|
+
y: (dx * sin + dy * cos) * this.zoom + this.screenY + this.viewHeight / 2,
|
|
265
268
|
};
|
|
266
269
|
}
|
|
267
270
|
/** screen pixels to world point, for turning a click into a tile; the inverse of `toScreen` */
|
|
268
271
|
toWorld(x, y) {
|
|
269
272
|
const { x: centreX, y: centreY } = this.clampedCentre(this.x + this.shakeX, this.y + this.shakeY);
|
|
270
273
|
const { cos, sin } = this.spin;
|
|
271
|
-
const rx = (x - this.screenX - this.viewWidth / 2) / this.
|
|
272
|
-
const ry = (y - this.screenY - this.viewHeight / 2) / this.
|
|
274
|
+
const rx = (x - this.screenX - this.viewWidth / 2) / this.zoom;
|
|
275
|
+
const ry = (y - this.screenY - this.viewHeight / 2) / this.zoom;
|
|
273
276
|
return {
|
|
274
277
|
x: centreX + rx * cos + ry * sin,
|
|
275
278
|
y: centreY - rx * sin + ry * cos,
|
|
@@ -280,8 +283,8 @@ export class Camera {
|
|
|
280
283
|
clampedCentre(x, y) {
|
|
281
284
|
if (!this.bounds)
|
|
282
285
|
return { x, y };
|
|
283
|
-
const halfWidth = this.viewWidth / this.
|
|
284
|
-
const halfHeight = this.viewHeight / this.
|
|
286
|
+
const halfWidth = this.viewWidth / this.zoom / 2;
|
|
287
|
+
const halfHeight = this.viewHeight / this.zoom / 2;
|
|
285
288
|
const { minX, minY, maxX, maxY } = this.bounds;
|
|
286
289
|
//when the map is narrower than the view, centre it rather than clamping to an
|
|
287
290
|
//edge, which would push the map against one side of the screen
|
|
@@ -292,22 +295,28 @@ export class Camera {
|
|
|
292
295
|
}
|
|
293
296
|
apply() {
|
|
294
297
|
const { x: centreX, y: centreY } = this.clampedCentre(this.x + this.shakeX, this.y + this.shakeY);
|
|
295
|
-
this.world.scale.set(this.
|
|
298
|
+
this.world.scale.set(this.zoom);
|
|
296
299
|
if (this._angle === 0) {
|
|
297
300
|
//unturned: rotate about the origin, the transform every existing camera had
|
|
298
301
|
this.world.rotation = 0;
|
|
299
302
|
this.world.pivot.set(0, 0);
|
|
300
303
|
//rounding to whole screen pixels stops pixel art shimmering as the camera moves
|
|
301
|
-
this.world.x =
|
|
302
|
-
this.world.y =
|
|
304
|
+
this.world.x = this.snapToDevice(this.screenX + this.viewWidth / 2 - centreX * this.zoom);
|
|
305
|
+
this.world.y = this.snapToDevice(this.screenY + this.viewHeight / 2 - centreY * this.zoom);
|
|
303
306
|
return;
|
|
304
307
|
}
|
|
305
308
|
//turned: pivot on the view centre so the layer turns about what the player is looking
|
|
306
309
|
//at, and the centre lands on the same screen point the unturned camera would use
|
|
307
310
|
this.world.rotation = this.rotation;
|
|
308
311
|
this.world.pivot.set(centreX, centreY);
|
|
309
|
-
this.world.x =
|
|
310
|
-
this.world.y =
|
|
312
|
+
this.world.x = this.snapToDevice(this.screenX + this.viewWidth / 2);
|
|
313
|
+
this.world.y = this.snapToDevice(this.screenY + this.viewHeight / 2);
|
|
314
|
+
}
|
|
315
|
+
//a whole device pixel, not a whole CSS one: at a devicePixelRatio of 1.5 an odd CSS offset is
|
|
316
|
+
//half a device pixel, which puts every tile edge between pixels and leaves a seam
|
|
317
|
+
snapToDevice(value) {
|
|
318
|
+
const resolution = this.resolution();
|
|
319
|
+
return Math.round(value * resolution) / resolution;
|
|
311
320
|
}
|
|
312
321
|
}
|
|
313
322
|
//the signed turn from `from` to `to`, in (-pi, pi], so easing always takes the shorter way
|
|
@@ -322,7 +331,8 @@ function angleDiff(from, to) {
|
|
|
322
331
|
return diff;
|
|
323
332
|
}
|
|
324
333
|
/**
|
|
325
|
-
* The nearest zoom to `zoom` at which `tileSize * zoom` is a whole number of
|
|
334
|
+
* The nearest zoom to `zoom` at which `tileSize * zoom` is a whole number of device pixels
|
|
335
|
+
* (`resolution` device pixels per screen pixel, default 1) -
|
|
326
336
|
* the pure math behind `CameraOptions.pixelPerfectTileSize`, exported so a game can snap a
|
|
327
337
|
* zoom value (from a slider, say) before ever handing it to a `Camera`.
|
|
328
338
|
*
|
|
@@ -333,9 +343,9 @@ function angleDiff(from, to) {
|
|
|
333
343
|
* console.log(snapZoom(2.4, 16)); // 2.375 - 16 * 2.375 = 38, a whole number of pixels
|
|
334
344
|
* ```
|
|
335
345
|
*/
|
|
336
|
-
export function snapZoom(zoom, tileSize) {
|
|
337
|
-
const pixels = Math.max(1, Math.round(zoom * tileSize));
|
|
338
|
-
return pixels / tileSize;
|
|
346
|
+
export function snapZoom(zoom, tileSize, resolution = 1) {
|
|
347
|
+
const pixels = Math.max(1, Math.round(zoom * tileSize * resolution));
|
|
348
|
+
return pixels / (tileSize * resolution);
|
|
339
349
|
}
|
|
340
350
|
/**
|
|
341
351
|
* a camera sized to the running game's viewport, updated on every frame
|
|
@@ -348,8 +358,8 @@ export function snapZoom(zoom, tileSize) {
|
|
|
348
358
|
* ```
|
|
349
359
|
*/
|
|
350
360
|
export function createCamera(options = {}) {
|
|
351
|
-
const camera = new Camera(options);
|
|
352
361
|
const game = Game.current;
|
|
362
|
+
const camera = new Camera({ resolution: () => game.app.renderer.resolution, ...options });
|
|
353
363
|
//the logical viewport, not the backing store, which is larger on a hidpi display
|
|
354
364
|
camera.setViewport(game.width, game.height);
|
|
355
365
|
return camera;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Camera.js","sourceRoot":"","sources":["../../../src/two-d/render/Camera.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Camera.js","sourceRoot":"","sources":["../../../src/two-d/render/Camera.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { Tweener } from '../../core/Tween.ts';
|
|
2
|
+
import { type MotionIntent } from '../../core/Motion.ts';
|
|
3
|
+
/** any object with a display transform; a Pixi `Sprite` or `Container`, or a plain double in a test */
|
|
4
|
+
export interface MotionTarget {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
rotation: number;
|
|
8
|
+
scale: {
|
|
9
|
+
x: number;
|
|
10
|
+
y: number;
|
|
11
|
+
};
|
|
12
|
+
skew: {
|
|
13
|
+
x: number;
|
|
14
|
+
y: number;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export interface SpriteMotionOptions {
|
|
18
|
+
/** share a `Tweener` with other features, driven by its owner; by default this owns one, driven by `update(dt)` */
|
|
19
|
+
tweener?: Tweener;
|
|
20
|
+
/** what the effects are for under reduced motion; defaults to `decorative`, which collapses them */
|
|
21
|
+
intent?: MotionIntent;
|
|
22
|
+
}
|
|
23
|
+
/** what a running effect gives back: await `done`, or `cancel()` to restore its share of the transform at once */
|
|
24
|
+
export interface MotionHandle {
|
|
25
|
+
readonly done: Promise<void>;
|
|
26
|
+
cancel(): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Squash, hop, bob, wobble, spin, shear and flip over a display object's transform, each
|
|
30
|
+
* running through a `Tweener` so reduced motion is honoured once, here, instead of by every
|
|
31
|
+
* game's own `scale`/`Math.sin` write.
|
|
32
|
+
*
|
|
33
|
+
* The object's transform at construction is its rest pose. Every running effect keeps its own
|
|
34
|
+
* contribution and the transform is recomputed from the rest pose and all contributions, so
|
|
35
|
+
* effects compose (a hop with a squash) and never accumulate drift: when one ends, is
|
|
36
|
+
* cancelled, or the whole motion is destroyed, its share simply disappears. Rotation and
|
|
37
|
+
* shear turn about the object's origin, so give a sprite a centred anchor (or pivot) first.
|
|
38
|
+
* Sequence effects behind a game event by awaiting a handle's `done`.
|
|
39
|
+
*
|
|
40
|
+
* Which effect plays on which event, and how much, is the game's business; this only moves.
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```ts
|
|
44
|
+
* import { SpriteMotion } from '@datamoc/mw_games/two-d/render';
|
|
45
|
+
*
|
|
46
|
+
* const rat = { x: 0, y: 0, rotation: 0, scale: { x: 1, y: 1 }, skew: { x: 0, y: 0 } };
|
|
47
|
+
* const motion = new SpriteMotion(rat);
|
|
48
|
+
*
|
|
49
|
+
* motion.hop({ height: 6, duration: 0.3 }); // up and back down
|
|
50
|
+
* motion.squash({ amount: 0.2, duration: 0.3 }); // composes with the hop
|
|
51
|
+
* motion.flip('x'); // face the other way, composes with both
|
|
52
|
+
* motion.update(1 / 60); // in the game loop
|
|
53
|
+
*
|
|
54
|
+
* motion.destroy(); // back to the rest pose, flip included
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export declare class SpriteMotion {
|
|
58
|
+
private readonly target;
|
|
59
|
+
private readonly tweener;
|
|
60
|
+
private readonly ownsTweener;
|
|
61
|
+
private readonly intent;
|
|
62
|
+
private readonly rest;
|
|
63
|
+
private readonly contributions;
|
|
64
|
+
private readonly loops;
|
|
65
|
+
private nextId;
|
|
66
|
+
private flipX;
|
|
67
|
+
private flipY;
|
|
68
|
+
private destroyed;
|
|
69
|
+
constructor(target: MotionTarget, options?: SpriteMotionOptions);
|
|
70
|
+
/** scale x and y in opposition and back: `amount` 0.2 is 20% wider and 20% shorter at the peak */
|
|
71
|
+
squash(options: {
|
|
72
|
+
amount: number;
|
|
73
|
+
duration: number;
|
|
74
|
+
}): MotionHandle;
|
|
75
|
+
/** up `height` world units and back down (the rest pose is the ground) */
|
|
76
|
+
hop(options: {
|
|
77
|
+
height: number;
|
|
78
|
+
duration: number;
|
|
79
|
+
}): MotionHandle;
|
|
80
|
+
/**
|
|
81
|
+
* A sinusoidal vertical offset of `amplitude`. With `cycles` it plays that many periods and
|
|
82
|
+
* ends; without, it loops until cancelled (breathing, a floating item). Under reduced motion
|
|
83
|
+
* a looping bob holds still.
|
|
84
|
+
*/
|
|
85
|
+
bob(options: {
|
|
86
|
+
amplitude: number;
|
|
87
|
+
period: number;
|
|
88
|
+
cycles?: number;
|
|
89
|
+
}): MotionHandle;
|
|
90
|
+
/** swings `angle` radians either side and settles, a jiggle that dies away */
|
|
91
|
+
wobble(options: {
|
|
92
|
+
angle: number;
|
|
93
|
+
duration: number;
|
|
94
|
+
}): MotionHandle;
|
|
95
|
+
/** `turns` full turns about the origin, eased, ending exactly where it started */
|
|
96
|
+
spin(options: {
|
|
97
|
+
turns: number;
|
|
98
|
+
duration: number;
|
|
99
|
+
}): MotionHandle;
|
|
100
|
+
/** leans by `amount` radians of skew and back, a hit-recoil or a lean into a step */
|
|
101
|
+
shear(options: {
|
|
102
|
+
amount: number;
|
|
103
|
+
duration: number;
|
|
104
|
+
}): MotionHandle;
|
|
105
|
+
/**
|
|
106
|
+
* Mirrors along `axis` ('x' turns left to right). A state, not an animation: it composes
|
|
107
|
+
* with whatever is running and is undone by `destroy`. Pass `mirrored` to set it outright
|
|
108
|
+
* rather than toggle; returns the new state.
|
|
109
|
+
*/
|
|
110
|
+
flip(axis: 'x' | 'y', mirrored?: boolean): boolean;
|
|
111
|
+
/** advances the effects; call from the game loop (the tweener part is skipped for a shared one) */
|
|
112
|
+
update(dt: number): void;
|
|
113
|
+
/** true while any effect is still running */
|
|
114
|
+
get isBusy(): boolean;
|
|
115
|
+
/** cancels every effect and puts the object back in its rest pose, flips included */
|
|
116
|
+
destroy(): void;
|
|
117
|
+
private run;
|
|
118
|
+
private loop;
|
|
119
|
+
private write;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=SpriteMotion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpriteMotion.d.ts","sourceRoot":"","sources":["../../../src/two-d/render/SpriteMotion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Easing, Tweener } from '../../core/Tween.js';
|
|
2
|
+
import { reducedMotion } from '../../core/Motion.js';
|
|
3
|
+
const NONE = { scaleX: 1, scaleY: 1, dy: 0, rotation: 0, skewX: 0 };
|
|
4
|
+
const INERT = { done: Promise.resolve(), cancel() { } };
|
|
5
|
+
/**
|
|
6
|
+
* Squash, hop, bob, wobble, spin, shear and flip over a display object's transform, each
|
|
7
|
+
* running through a `Tweener` so reduced motion is honoured once, here, instead of by every
|
|
8
|
+
* game's own `scale`/`Math.sin` write.
|
|
9
|
+
*
|
|
10
|
+
* The object's transform at construction is its rest pose. Every running effect keeps its own
|
|
11
|
+
* contribution and the transform is recomputed from the rest pose and all contributions, so
|
|
12
|
+
* effects compose (a hop with a squash) and never accumulate drift: when one ends, is
|
|
13
|
+
* cancelled, or the whole motion is destroyed, its share simply disappears. Rotation and
|
|
14
|
+
* shear turn about the object's origin, so give a sprite a centred anchor (or pivot) first.
|
|
15
|
+
* Sequence effects behind a game event by awaiting a handle's `done`.
|
|
16
|
+
*
|
|
17
|
+
* Which effect plays on which event, and how much, is the game's business; this only moves.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```ts
|
|
21
|
+
* import { SpriteMotion } from '@datamoc/mw_games/two-d/render';
|
|
22
|
+
*
|
|
23
|
+
* const rat = { x: 0, y: 0, rotation: 0, scale: { x: 1, y: 1 }, skew: { x: 0, y: 0 } };
|
|
24
|
+
* const motion = new SpriteMotion(rat);
|
|
25
|
+
*
|
|
26
|
+
* motion.hop({ height: 6, duration: 0.3 }); // up and back down
|
|
27
|
+
* motion.squash({ amount: 0.2, duration: 0.3 }); // composes with the hop
|
|
28
|
+
* motion.flip('x'); // face the other way, composes with both
|
|
29
|
+
* motion.update(1 / 60); // in the game loop
|
|
30
|
+
*
|
|
31
|
+
* motion.destroy(); // back to the rest pose, flip included
|
|
32
|
+
* ```
|
|
33
|
+
*/
|
|
34
|
+
export class SpriteMotion {
|
|
35
|
+
constructor(target, options = {}) {
|
|
36
|
+
this.contributions = new Map();
|
|
37
|
+
this.loops = new Set();
|
|
38
|
+
this.nextId = 0;
|
|
39
|
+
this.flipX = false;
|
|
40
|
+
this.flipY = false;
|
|
41
|
+
this.destroyed = false;
|
|
42
|
+
this.target = target;
|
|
43
|
+
this.tweener = options.tweener ?? new Tweener();
|
|
44
|
+
this.ownsTweener = options.tweener === undefined;
|
|
45
|
+
this.intent = options.intent ?? 'decorative';
|
|
46
|
+
this.rest = {
|
|
47
|
+
y: target.y,
|
|
48
|
+
rotation: target.rotation,
|
|
49
|
+
scaleX: target.scale.x,
|
|
50
|
+
scaleY: target.scale.y,
|
|
51
|
+
skewX: target.skew.x,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/** scale x and y in opposition and back: `amount` 0.2 is 20% wider and 20% shorter at the peak */
|
|
55
|
+
squash(options) {
|
|
56
|
+
const { amount, duration } = options;
|
|
57
|
+
return this.run(duration, (t) => {
|
|
58
|
+
const s = Math.sin(Math.PI * t) * amount;
|
|
59
|
+
return { scaleX: 1 + s, scaleY: 1 - s };
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** up `height` world units and back down (the rest pose is the ground) */
|
|
63
|
+
hop(options) {
|
|
64
|
+
const { height, duration } = options;
|
|
65
|
+
return this.run(duration, (t) => ({ dy: -Math.sin(Math.PI * t) * height }));
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* A sinusoidal vertical offset of `amplitude`. With `cycles` it plays that many periods and
|
|
69
|
+
* ends; without, it loops until cancelled (breathing, a floating item). Under reduced motion
|
|
70
|
+
* a looping bob holds still.
|
|
71
|
+
*/
|
|
72
|
+
bob(options) {
|
|
73
|
+
const { amplitude, period, cycles } = options;
|
|
74
|
+
if (cycles !== undefined) {
|
|
75
|
+
return this.run(period * cycles, (t) => ({ dy: Math.sin(2 * Math.PI * cycles * t) * amplitude }));
|
|
76
|
+
}
|
|
77
|
+
return this.loop((elapsed) => ({ dy: Math.sin((2 * Math.PI * elapsed) / period) * amplitude }));
|
|
78
|
+
}
|
|
79
|
+
/** swings `angle` radians either side and settles, a jiggle that dies away */
|
|
80
|
+
wobble(options) {
|
|
81
|
+
const { angle, duration } = options;
|
|
82
|
+
return this.run(duration, (t) => ({ rotation: Math.sin(4 * Math.PI * t) * (1 - t) * angle }));
|
|
83
|
+
}
|
|
84
|
+
/** `turns` full turns about the origin, eased, ending exactly where it started */
|
|
85
|
+
spin(options) {
|
|
86
|
+
const { turns, duration } = options;
|
|
87
|
+
return this.run(duration, (t) => ({ rotation: Math.PI * 2 * turns * t }), Easing.easeInOutQuad);
|
|
88
|
+
}
|
|
89
|
+
/** leans by `amount` radians of skew and back, a hit-recoil or a lean into a step */
|
|
90
|
+
shear(options) {
|
|
91
|
+
const { amount, duration } = options;
|
|
92
|
+
return this.run(duration, (t) => ({ skewX: Math.sin(Math.PI * t) * amount }));
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Mirrors along `axis` ('x' turns left to right). A state, not an animation: it composes
|
|
96
|
+
* with whatever is running and is undone by `destroy`. Pass `mirrored` to set it outright
|
|
97
|
+
* rather than toggle; returns the new state.
|
|
98
|
+
*/
|
|
99
|
+
flip(axis, mirrored) {
|
|
100
|
+
if (axis === 'x')
|
|
101
|
+
this.flipX = mirrored ?? !this.flipX;
|
|
102
|
+
else
|
|
103
|
+
this.flipY = mirrored ?? !this.flipY;
|
|
104
|
+
this.write();
|
|
105
|
+
return axis === 'x' ? this.flipX : this.flipY;
|
|
106
|
+
}
|
|
107
|
+
/** advances the effects; call from the game loop (the tweener part is skipped for a shared one) */
|
|
108
|
+
update(dt) {
|
|
109
|
+
if (this.ownsTweener)
|
|
110
|
+
this.tweener.update(dt);
|
|
111
|
+
for (const advance of [...this.loops])
|
|
112
|
+
advance(dt);
|
|
113
|
+
}
|
|
114
|
+
/** true while any effect is still running */
|
|
115
|
+
get isBusy() {
|
|
116
|
+
return this.contributions.size > 0;
|
|
117
|
+
}
|
|
118
|
+
/** cancels every effect and puts the object back in its rest pose, flips included */
|
|
119
|
+
destroy() {
|
|
120
|
+
this.destroyed = true;
|
|
121
|
+
this.contributions.clear();
|
|
122
|
+
this.loops.clear();
|
|
123
|
+
this.flipX = this.flipY = false;
|
|
124
|
+
this.write();
|
|
125
|
+
}
|
|
126
|
+
run(duration, shape, ease = Easing.linear) {
|
|
127
|
+
if (this.destroyed)
|
|
128
|
+
return INERT;
|
|
129
|
+
const id = this.nextId++;
|
|
130
|
+
const finish = () => {
|
|
131
|
+
this.contributions.delete(id);
|
|
132
|
+
this.write();
|
|
133
|
+
};
|
|
134
|
+
this.contributions.set(id, NONE);
|
|
135
|
+
const done = this.tweener
|
|
136
|
+
.tween(duration, (t) => {
|
|
137
|
+
//a cancelled effect's tween still ticks to its end; it must not write again
|
|
138
|
+
if (!this.contributions.has(id))
|
|
139
|
+
return;
|
|
140
|
+
this.contributions.set(id, { ...NONE, ...shape(t) });
|
|
141
|
+
this.write();
|
|
142
|
+
}, { ease, intent: this.intent })
|
|
143
|
+
.then(finish);
|
|
144
|
+
return { done, cancel: finish };
|
|
145
|
+
}
|
|
146
|
+
loop(shape) {
|
|
147
|
+
if (this.destroyed)
|
|
148
|
+
return INERT;
|
|
149
|
+
const id = this.nextId++;
|
|
150
|
+
let elapsed = 0;
|
|
151
|
+
let resolve;
|
|
152
|
+
const done = new Promise((r) => (resolve = r));
|
|
153
|
+
const advance = (dt) => {
|
|
154
|
+
elapsed += dt;
|
|
155
|
+
//a decorative loop has no reason to move once the preference is on
|
|
156
|
+
const held = reducedMotion() && this.intent === 'decorative';
|
|
157
|
+
this.contributions.set(id, held ? NONE : { ...NONE, ...shape(elapsed) });
|
|
158
|
+
this.write();
|
|
159
|
+
};
|
|
160
|
+
this.contributions.set(id, NONE);
|
|
161
|
+
this.loops.add(advance);
|
|
162
|
+
return {
|
|
163
|
+
done,
|
|
164
|
+
cancel: () => {
|
|
165
|
+
this.loops.delete(advance);
|
|
166
|
+
this.contributions.delete(id);
|
|
167
|
+
this.write();
|
|
168
|
+
resolve();
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
write() {
|
|
173
|
+
let scaleX = 1;
|
|
174
|
+
let scaleY = 1;
|
|
175
|
+
let dy = 0;
|
|
176
|
+
let rotation = 0;
|
|
177
|
+
let skewX = 0;
|
|
178
|
+
for (const c of this.contributions.values()) {
|
|
179
|
+
scaleX *= c.scaleX;
|
|
180
|
+
scaleY *= c.scaleY;
|
|
181
|
+
dy += c.dy;
|
|
182
|
+
rotation += c.rotation;
|
|
183
|
+
skewX += c.skewX;
|
|
184
|
+
}
|
|
185
|
+
const { rest, target } = this;
|
|
186
|
+
target.y = rest.y + dy;
|
|
187
|
+
target.rotation = rest.rotation + rotation;
|
|
188
|
+
target.scale.x = rest.scaleX * scaleX * (this.flipX ? -1 : 1);
|
|
189
|
+
target.scale.y = rest.scaleY * scaleY * (this.flipY ? -1 : 1);
|
|
190
|
+
target.skew.x = rest.skewX + skewX;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=SpriteMotion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SpriteMotion.js","sourceRoot":"","sources":["../../../src/two-d/render/SpriteMotion.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,6 +43,8 @@ export { ActorAnimator } from './ActorAnimator.ts';
|
|
|
43
43
|
export type { ActorAnimationState, ActorAnimatorOptions } from './ActorAnimator.ts';
|
|
44
44
|
export { StatusVisuals } from './StatusVisuals.ts';
|
|
45
45
|
export type { TintTarget, StatusVisualStyle, StatusVisualsOptions } from './StatusVisuals.ts';
|
|
46
|
+
export { SpriteMotion } from './SpriteMotion.ts';
|
|
47
|
+
export type { MotionTarget, MotionHandle, SpriteMotionOptions } from './SpriteMotion.ts';
|
|
46
48
|
export { blobIndex, autotileFrames, BLOB_SHAPES } from './Autotile.ts';
|
|
47
49
|
export type { NeighborMask } from './Autotile.ts';
|
|
48
50
|
export { RpgmAutotileAtlas, rpgmAutotileFrame, rpgmAutotileSlot, xpAutotileRef, xpAutotilePattern, assertAutotileLayout, autotileCellParts, rpgmTableEdgeCells, RPGM_AUTOTILE_SLOT_BASES, RPGM_AUTOTILE_SLOT_COUNTS, RPGM_FLOOR_AUTOTILE_TABLE, RPGM_WALL_AUTOTILE_TABLE, XP_AUTOTILE_PATTERNS, XP_NEIGHBORS_TO_PATTERN, } from './RpgmAutotile.ts';
|