@caperjs/core 0.4.1 → 0.5.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/build/internal/manifest.mjs +2 -2
- package/build/internal/validate.mjs +2 -1
- package/build/plugins/assetTypes.mjs +27 -23
- package/build/plugins/caperConfig.mjs +5 -3
- package/build/plugins/lists.mjs +0 -15
- package/lib/{CaptionsPlugin-cSJj-R9M.js → CaptionsPlugin-CDbGZrN9.js} +11 -11
- package/lib/CaptionsPlugin-CDbGZrN9.js.map +1 -0
- package/lib/{DataAdapter-D2tc6hx9.js → DataAdapter-BTlNzWqg.js} +2 -2
- package/lib/{DataAdapter-D2tc6hx9.js.map → DataAdapter-BTlNzWqg.js.map} +1 -1
- package/lib/{DebugRenderer-CGUKy6Fy.js → DebugRenderer-eSVpon4c.js} +2 -2
- package/lib/{DebugRenderer-CGUKy6Fy.js.map → DebugRenderer-eSVpon4c.js.map} +1 -1
- package/lib/{DevToolsPlugin-B8GX3H9b.js → DevToolsPlugin-Ci6r9j-m.js} +2 -2
- package/lib/{DevToolsPlugin-B8GX3H9b.js.map → DevToolsPlugin-Ci6r9j-m.js.map} +1 -1
- package/lib/{GSAPPlugin-Br9AjuTD.js → GSAPPlugin-C8zo-fyt.js} +2 -2
- package/lib/{GSAPPlugin-Br9AjuTD.js.map → GSAPPlugin-C8zo-fyt.js.map} +1 -1
- package/lib/{LayoutPlugin-BX3OP7pw.js → LayoutPlugin-Cs2lcXKb.js} +4 -4
- package/lib/{LayoutPlugin-BX3OP7pw.js.map → LayoutPlugin-Cs2lcXKb.js.map} +1 -1
- package/lib/{SpinePlugin-C-JDdXpf.js → SpinePlugin-CLgSXBQm.js} +2 -2
- package/lib/{SpinePlugin-C-JDdXpf.js.map → SpinePlugin-CLgSXBQm.js.map} +1 -1
- package/lib/{StatsPlugin-yJlJtoQ2.js → StatsPlugin-D_90U3BG.js} +4 -4
- package/lib/{StatsPlugin-yJlJtoQ2.js.map → StatsPlugin-D_90U3BG.js.map} +1 -1
- package/lib/{VoiceOverPlugin-DjSZp4Ko.js → VoiceOverPlugin-CAE1dtOw.js} +33 -33
- package/lib/{VoiceOverPlugin-DjSZp4Ko.js.map → VoiceOverPlugin-CAE1dtOw.js.map} +1 -1
- package/lib/caper.mjs +87 -87
- package/lib/caper.mjs.map +1 -1
- package/lib/{const-C3sxeYhl.js → const-BTDpIdRO.js} +192 -199
- package/lib/const-BTDpIdRO.js.map +1 -0
- package/lib/display/Container.d.ts +1 -28
- package/lib/display/Container.d.ts.map +1 -1
- package/lib/display/ParticleContainer.d.ts +20 -29
- package/lib/display/ParticleContainer.d.ts.map +1 -1
- package/lib/display/ParticleContainer.test.d.ts +2 -0
- package/lib/display/ParticleContainer.test.d.ts.map +1 -0
- package/lib/display/SpineAnimation.d.ts +1 -2
- package/lib/display/SpineAnimation.d.ts.map +1 -1
- package/lib/display/SpineAnimation.test.d.ts +1 -0
- package/lib/display/SpineAnimation.test.d.ts.map +1 -0
- package/lib/mixins/factory/const.d.ts.map +1 -1
- package/lib/mixins/focus.d.ts.map +1 -1
- package/lib/mixins/index.d.ts +1 -0
- package/lib/mixins/index.d.ts.map +1 -1
- package/lib/mixins/lifecycle.d.ts +56 -0
- package/lib/mixins/lifecycle.d.ts.map +1 -0
- package/lib/plugins/FullScreenPlugin.d.ts.map +1 -1
- package/lib/plugins/KeyboardPlugin.d.ts.map +1 -1
- package/lib/plugins/Plugin.d.ts.map +1 -1
- package/lib/plugins/WebEventsPlugin.d.ts +1 -0
- package/lib/plugins/WebEventsPlugin.d.ts.map +1 -1
- package/lib/plugins/audio/AudioInstance.d.ts +3 -3
- package/lib/plugins/audio/AudioInstance.d.ts.map +1 -1
- package/lib/plugins/captions/CaptionsRenderer.d.ts.map +1 -1
- package/lib/plugins/focus/FocusManagerPlugin.d.ts.map +1 -1
- package/lib/{registries-BfV-VF7a.js → registries-nN_hU44y.js} +109 -77
- package/lib/registries-nN_hU44y.js.map +1 -0
- package/lib/utils/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/core/Application.ts +2 -2
- package/src/display/Container.ts +5 -72
- package/src/display/ParticleContainer.test.ts +127 -0
- package/src/display/ParticleContainer.ts +28 -62
- package/src/display/SpineAnimation.test.ts +79 -0
- package/src/display/SpineAnimation.ts +4 -6
- package/src/mixins/factory/const.ts +2 -1
- package/src/mixins/focus.ts +0 -2
- package/src/mixins/index.ts +4 -0
- package/src/mixins/lifecycle.ts +160 -0
- package/src/plugins/DataAdapter.ts +1 -1
- package/src/plugins/FullScreenPlugin.test.ts +9 -0
- package/src/plugins/FullScreenPlugin.ts +0 -1
- package/src/plugins/KeyboardPlugin.ts +0 -1
- package/src/plugins/Plugin.ts +0 -2
- package/src/plugins/TimerPlugin.ts +1 -1
- package/src/plugins/WebEventsPlugin.test.ts +13 -0
- package/src/plugins/WebEventsPlugin.ts +12 -1
- package/src/plugins/audio/AudioInstance.ts +2 -2
- package/src/plugins/captions/CaptionsPlugin.test.ts +48 -3
- package/src/plugins/captions/CaptionsPlugin.ts +5 -5
- package/src/plugins/captions/CaptionsRenderer.ts +0 -1
- package/src/plugins/focus/FocusManagerPlugin.ts +0 -1
- package/src/ui/Input.ts +2 -2
- package/src/utils/types.ts +0 -1
- package/src/version.ts +1 -1
- package/lib/CaptionsPlugin-cSJj-R9M.js.map +0 -1
- package/lib/const-C3sxeYhl.js.map +0 -1
- package/lib/registries-BfV-VF7a.js.map +0 -1
package/lib/utils/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/utils/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@caperjs/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"title": "Caper",
|
|
5
5
|
"description": "An opinionated HTML game framework built on PixiJS v8",
|
|
6
6
|
"bin": {
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"build": "pnpm generate-version && vite build",
|
|
59
59
|
"prepack": "pnpm build",
|
|
60
60
|
"visualize:examples": "cd ./examples && npx vite-bundle-visualizer",
|
|
61
|
-
"lint": "eslint \"src/**/*.ts\"",
|
|
61
|
+
"lint": "eslint \"src/**/*.ts\" --max-warnings 0",
|
|
62
62
|
"lint:fix": "eslint \"src/**/*.ts\" --fix",
|
|
63
63
|
"test": "vitest run",
|
|
64
64
|
"test:watch": "vitest",
|
package/src/core/Application.ts
CHANGED
|
@@ -338,7 +338,7 @@ export class Application extends PIXIPApplication implements IApplication {
|
|
|
338
338
|
public get appVersion() {
|
|
339
339
|
try {
|
|
340
340
|
this._appVersion = __CAPER_APP_VERSION;
|
|
341
|
-
} catch
|
|
341
|
+
} catch {
|
|
342
342
|
this._appVersion = -1;
|
|
343
343
|
}
|
|
344
344
|
|
|
@@ -351,7 +351,7 @@ export class Application extends PIXIPApplication implements IApplication {
|
|
|
351
351
|
if (!this._appName) {
|
|
352
352
|
try {
|
|
353
353
|
this._appName = __CAPER_APP_NAME;
|
|
354
|
-
} catch
|
|
354
|
+
} catch {
|
|
355
355
|
this._appName = 'n/a';
|
|
356
356
|
}
|
|
357
357
|
}
|
package/src/display/Container.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { DestroyOptions, Container as PIXIContainer, Sprite, Texture, Ticker } from 'pixi.js';
|
|
2
2
|
import { Animated } from '../mixins/animated';
|
|
3
3
|
import { Factory } from '../mixins/factory/Factory';
|
|
4
|
+
import { WithLifecycle } from '../mixins/lifecycle';
|
|
4
5
|
import { WithSignals } from '../mixins/signals';
|
|
5
6
|
|
|
6
|
-
import { Application } from '../core/Application';
|
|
7
7
|
import { Signal } from '../signals';
|
|
8
8
|
import { SignalOrder } from '../signals/Signal';
|
|
9
9
|
import type { AppTypeOverrides, PointLike, Size } from '../utils';
|
|
@@ -61,11 +61,7 @@ export interface IContainer {
|
|
|
61
61
|
* The Container class extends the _Container class (which includes the Animated and Factory mixins) and implements the IContainer interface.
|
|
62
62
|
* It represents a container for PIXI.js display objects.
|
|
63
63
|
*/
|
|
64
|
-
export class Container extends Animated(WithSignals(Factory())) implements IContainer {
|
|
65
|
-
private static readonly __caper_method_binding_root = true;
|
|
66
|
-
|
|
67
|
-
public onDestroy: Signal<() => void> = new Signal();
|
|
68
|
-
|
|
64
|
+
export class Container extends WithLifecycle(Animated(WithSignals(Factory()))) implements IContainer {
|
|
69
65
|
protected __background: Sprite;
|
|
70
66
|
|
|
71
67
|
protected _animationContext: string | undefined;
|
|
@@ -76,8 +72,6 @@ export class Container extends Animated(WithSignals(Factory())) implements ICont
|
|
|
76
72
|
this._animationContext = value;
|
|
77
73
|
}
|
|
78
74
|
|
|
79
|
-
private __config: ContainerConfig;
|
|
80
|
-
|
|
81
75
|
public static onGlobalChildAdded = new Signal<(child: PIXIContainer) => void>();
|
|
82
76
|
public static onGlobalChildRemoved = new Signal<(child: PIXIContainer) => void>();
|
|
83
77
|
|
|
@@ -89,25 +83,17 @@ export class Container extends Animated(WithSignals(Factory())) implements ICont
|
|
|
89
83
|
Container.onGlobalChildRemoved.emit(child);
|
|
90
84
|
}
|
|
91
85
|
|
|
92
|
-
/**
|
|
93
|
-
* Get the application instance.
|
|
94
|
-
*/
|
|
95
|
-
public get app(): AppTypeOverrides['App'] {
|
|
96
|
-
return Application.getInstance();
|
|
97
|
-
}
|
|
98
|
-
|
|
99
86
|
/**
|
|
100
87
|
* The constructor for the Container class.
|
|
101
88
|
* @param config - The configuration for the container.
|
|
102
89
|
*/
|
|
103
90
|
constructor(config: Partial<ContainerConfig> = {}) {
|
|
104
91
|
super();
|
|
105
|
-
|
|
92
|
+
const { autoResize, autoUpdate, priority }: ContainerConfig = { ...defaultConfig, ...config };
|
|
106
93
|
// Bind all methods of this class to the current instance.
|
|
107
94
|
bindAllMethods(this);
|
|
108
|
-
//
|
|
109
|
-
this.
|
|
110
|
-
this.on('removed', this._removed);
|
|
95
|
+
// Wire up the shared lifecycle (adds the 'added' / 'removed' listeners).
|
|
96
|
+
this._initLifecycle({ autoResize, autoUpdate, resizePriority: priority });
|
|
111
97
|
this.on('childAdded', this._childAdded);
|
|
112
98
|
this.on('childRemoved', this._childRemoved);
|
|
113
99
|
}
|
|
@@ -152,42 +138,15 @@ export class Container extends Animated(WithSignals(Factory())) implements ICont
|
|
|
152
138
|
return this.__background;
|
|
153
139
|
}
|
|
154
140
|
|
|
155
|
-
/**
|
|
156
|
-
* Update the container. This method is meant to be overridden by subclasses.
|
|
157
|
-
* @param ticker
|
|
158
|
-
*/
|
|
159
|
-
public update(ticker?: Ticker | number) {
|
|
160
|
-
void ticker;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
/**
|
|
164
|
-
* Resize the container. This method is meant to be overridden by subclasses.
|
|
165
|
-
* @param size
|
|
166
|
-
*/
|
|
167
|
-
public resize(size?: Size) {
|
|
168
|
-
void size;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/**
|
|
172
|
-
* This method is called when the container is added to the stage. It is meant to be overridden by subclasses.
|
|
173
|
-
*/
|
|
174
|
-
public added() {}
|
|
175
|
-
|
|
176
141
|
public childAdded(child: PIXIContainer) {
|
|
177
142
|
void child;
|
|
178
143
|
}
|
|
179
144
|
|
|
180
145
|
destroy(options?: DestroyOptions): void {
|
|
181
146
|
this.app.animation.killAll(this.animationContext);
|
|
182
|
-
if (this.__config.autoUpdate) {
|
|
183
|
-
this.app.ticker.remove(this.update, this);
|
|
184
|
-
}
|
|
185
|
-
this.onDestroy.emit();
|
|
186
147
|
super.destroy(options);
|
|
187
148
|
}
|
|
188
149
|
|
|
189
|
-
public removed() {}
|
|
190
|
-
|
|
191
150
|
public childRemoved(child: PIXIContainer) {
|
|
192
151
|
void child;
|
|
193
152
|
}
|
|
@@ -197,32 +156,6 @@ export class Container extends Animated(WithSignals(Factory())) implements ICont
|
|
|
197
156
|
this.__background.height = this.app.size.height;
|
|
198
157
|
}
|
|
199
158
|
|
|
200
|
-
/**
|
|
201
|
-
* This method is called when the container is added to the stage. It sets up auto-resizing and auto-updating if enabled.
|
|
202
|
-
*/
|
|
203
|
-
private _added() {
|
|
204
|
-
if (this.__config.autoResize) {
|
|
205
|
-
this.addSignalConnection(this.app.onResize.connect(this.resize, this.__config.priority ?? 'highest'));
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
if (this.__config.autoUpdate) {
|
|
209
|
-
this.app.ticker.add(this.update, this, -999999);
|
|
210
|
-
}
|
|
211
|
-
this.added();
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
private _removed() {
|
|
215
|
-
if (this.__config.autoResize) {
|
|
216
|
-
this.app.onResize.disconnect(this.resize);
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
if (this.__config.autoUpdate) {
|
|
220
|
-
this.app.ticker.remove(this.update, this);
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
this.removed();
|
|
224
|
-
}
|
|
225
|
-
|
|
226
159
|
private _childAdded(child: PIXIContainer) {
|
|
227
160
|
Container.childAdded(child);
|
|
228
161
|
this.childAdded(child);
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { Container as PIXIContainer, ParticleContainer as PIXIParticleContainer } from 'pixi.js';
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
|
|
4
|
+
import { Signal } from '../signals';
|
|
5
|
+
import type { Size } from '../utils';
|
|
6
|
+
import { ParticleContainer } from './ParticleContainer';
|
|
7
|
+
|
|
8
|
+
class TestParticleContainer extends ParticleContainer {
|
|
9
|
+
public resizeCalls: (Size | undefined)[] = [];
|
|
10
|
+
public updateCalls = 0;
|
|
11
|
+
|
|
12
|
+
public resize(size?: Size) {
|
|
13
|
+
this.resizeCalls.push(size);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public update() {
|
|
17
|
+
this.updateCalls++;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
describe('ParticleContainer lifecycle', () => {
|
|
22
|
+
let app: {
|
|
23
|
+
onResize: Signal<(size: Size) => void>;
|
|
24
|
+
ticker: { add: ReturnType<typeof vi.fn>; remove: ReturnType<typeof vi.fn> };
|
|
25
|
+
};
|
|
26
|
+
let originalAppDescriptor: PropertyDescriptor | undefined;
|
|
27
|
+
|
|
28
|
+
beforeEach(() => {
|
|
29
|
+
app = {
|
|
30
|
+
onResize: new Signal<(size: Size) => void>(),
|
|
31
|
+
ticker: { add: vi.fn(), remove: vi.fn() },
|
|
32
|
+
};
|
|
33
|
+
// `app` is a getter on the mixin prototype; shadow it on ParticleContainer's
|
|
34
|
+
// own prototype so the constructor picks up the fake app.
|
|
35
|
+
originalAppDescriptor = Object.getOwnPropertyDescriptor(ParticleContainer.prototype, 'app');
|
|
36
|
+
Object.defineProperty(ParticleContainer.prototype, 'app', { get: () => app, configurable: true });
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
afterEach(() => {
|
|
40
|
+
if (originalAppDescriptor) {
|
|
41
|
+
Object.defineProperty(ParticleContainer.prototype, 'app', originalAppDescriptor);
|
|
42
|
+
} else {
|
|
43
|
+
delete (ParticleContainer.prototype as any).app;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it('routes app resizes to resize() once it has been added to the stage', () => {
|
|
48
|
+
const particles = new TestParticleContainer();
|
|
49
|
+
|
|
50
|
+
// not on the stage yet — nothing is connected
|
|
51
|
+
app.onResize.emit({ width: 10, height: 20 });
|
|
52
|
+
expect(particles.resizeCalls).toEqual([]);
|
|
53
|
+
|
|
54
|
+
new PIXIContainer().addChild(particles);
|
|
55
|
+
app.onResize.emit({ width: 100, height: 50 });
|
|
56
|
+
|
|
57
|
+
expect(particles.resizeCalls).toEqual([{ width: 100, height: 50 }]);
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
it('does not connect resize() when autoResize is off', () => {
|
|
61
|
+
const particles = new TestParticleContainer({ autoResize: false });
|
|
62
|
+
new PIXIContainer().addChild(particles);
|
|
63
|
+
|
|
64
|
+
app.onResize.emit({ width: 100, height: 50 });
|
|
65
|
+
|
|
66
|
+
expect(particles.resizeCalls).toEqual([]);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('adds update() to the ticker with the configured priority', () => {
|
|
70
|
+
const particles = new TestParticleContainer({ priority: 5 });
|
|
71
|
+
new PIXIContainer().addChild(particles);
|
|
72
|
+
|
|
73
|
+
expect(app.ticker.add).toHaveBeenCalledWith(particles.update, particles, 5);
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
it('disconnects resize, the ticker and emits onDestroy on destroy', () => {
|
|
77
|
+
const particles = new TestParticleContainer();
|
|
78
|
+
new PIXIContainer().addChild(particles);
|
|
79
|
+
|
|
80
|
+
const onDestroy = vi.fn();
|
|
81
|
+
particles.onDestroy.connect(onDestroy);
|
|
82
|
+
|
|
83
|
+
particles.destroy();
|
|
84
|
+
|
|
85
|
+
expect(onDestroy).toHaveBeenCalledTimes(1);
|
|
86
|
+
expect(app.ticker.remove).toHaveBeenCalledWith(particles.update, particles);
|
|
87
|
+
|
|
88
|
+
app.onResize.emit({ width: 100, height: 50 });
|
|
89
|
+
expect(particles.resizeCalls).toEqual([]);
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
it('calls through to Pixi update() so the particle buffers are flagged', () => {
|
|
93
|
+
const particles = new ParticleContainer();
|
|
94
|
+
const pixiUpdate = vi.spyOn(PIXIParticleContainer.prototype, 'update');
|
|
95
|
+
|
|
96
|
+
(particles as any)._childrenDirty = false;
|
|
97
|
+
particles.update();
|
|
98
|
+
|
|
99
|
+
expect(pixiUpdate).toHaveBeenCalledTimes(1);
|
|
100
|
+
expect((particles as any)._childrenDirty).toBe(true);
|
|
101
|
+
|
|
102
|
+
pixiUpdate.mockRestore();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it('flags the particle buffers when update() is driven by the ticker', () => {
|
|
106
|
+
const particles = new ParticleContainer();
|
|
107
|
+
new PIXIContainer().addChild(particles);
|
|
108
|
+
|
|
109
|
+
const [tick, context] = app.ticker.add.mock.calls[0];
|
|
110
|
+
(particles as any)._childrenDirty = false;
|
|
111
|
+
tick.call(context);
|
|
112
|
+
|
|
113
|
+
expect((particles as any)._childrenDirty).toBe(true);
|
|
114
|
+
});
|
|
115
|
+
|
|
116
|
+
it('disconnects resize and the ticker when removed from the stage', () => {
|
|
117
|
+
const particles = new TestParticleContainer();
|
|
118
|
+
const parent = new PIXIContainer();
|
|
119
|
+
parent.addChild(particles);
|
|
120
|
+
|
|
121
|
+
parent.removeChild(particles);
|
|
122
|
+
app.onResize.emit({ width: 100, height: 50 });
|
|
123
|
+
|
|
124
|
+
expect(particles.resizeCalls).toEqual([]);
|
|
125
|
+
expect(app.ticker.remove).toHaveBeenCalledWith(particles.update, particles);
|
|
126
|
+
});
|
|
127
|
+
});
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
import { DestroyOptions, ParticleContainerOptions, ParticleContainer as PIXIParticleContainer, Ticker } from 'pixi.js';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { WithLifecycle } from '../mixins/lifecycle';
|
|
4
|
+
import { WithSignals } from '../mixins/signals';
|
|
4
5
|
import { Signal } from '../signals';
|
|
5
6
|
import type { AppTypeOverrides, Size } from '../utils';
|
|
6
7
|
import { bindAllMethods } from '../utils';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
|
-
* Configuration for the
|
|
10
|
+
* Configuration for the ParticleContainer class.
|
|
10
11
|
*/
|
|
11
12
|
export interface ParticleContainerConfig extends ParticleContainerOptions {
|
|
13
|
+
autoResize: boolean;
|
|
12
14
|
autoUpdate: boolean;
|
|
13
15
|
priority: number;
|
|
14
16
|
}
|
|
15
17
|
|
|
16
|
-
export const ParticleContainerConfigKeys: (keyof ParticleContainerConfig)[] = ['autoUpdate', 'priority'];
|
|
18
|
+
export const ParticleContainerConfigKeys: (keyof ParticleContainerConfig)[] = ['autoResize', 'autoUpdate', 'priority'];
|
|
17
19
|
|
|
18
|
-
const defaultConfig: ParticleContainerConfig = { autoUpdate: true, priority: 0 };
|
|
20
|
+
const defaultConfig: ParticleContainerConfig = { autoResize: true, autoUpdate: true, priority: 0 };
|
|
19
21
|
|
|
20
22
|
export interface IParticleContainer {
|
|
21
23
|
app: AppTypeOverrides['App'];
|
|
@@ -26,82 +28,46 @@ export interface IParticleContainer {
|
|
|
26
28
|
|
|
27
29
|
added(): Promise<void> | void;
|
|
28
30
|
|
|
31
|
+
removed(): Promise<void> | void;
|
|
32
|
+
|
|
33
|
+
resize(size?: Size): void;
|
|
34
|
+
|
|
29
35
|
update(ticker?: Ticker | number): void;
|
|
30
36
|
}
|
|
31
37
|
|
|
32
38
|
/**
|
|
33
|
-
* The
|
|
34
|
-
*
|
|
39
|
+
* The ParticleContainer class extends PIXI's ParticleContainer with Caper's
|
|
40
|
+
* shared lifecycle (the `added` / `removed` / `resize` / `update` hooks and
|
|
41
|
+
* their auto-connections) and signal-connection tracking. It does not get the
|
|
42
|
+
* Factory mixin — a particle container holds particles, not display children.
|
|
43
|
+
*
|
|
44
|
+
* Caper's lifecycle `update()` hook shadows PIXI's own `update()`, which flags
|
|
45
|
+
* the particle buffers for re-upload, so the default implementation here calls
|
|
46
|
+
* through to it. Subclasses that override `update()` must call
|
|
47
|
+
* `super.update(ticker)`.
|
|
35
48
|
*/
|
|
36
|
-
export class ParticleContainer extends PIXIParticleContainer implements IParticleContainer {
|
|
37
|
-
onDestroy: Signal<() => void> = new Signal();
|
|
38
|
-
static __caper_method_binding_root = true;
|
|
39
|
-
private __config: ParticleContainerConfig;
|
|
40
|
-
|
|
49
|
+
export class ParticleContainer extends WithLifecycle(WithSignals(PIXIParticleContainer)) implements IParticleContainer {
|
|
41
50
|
/**
|
|
42
|
-
* The constructor for the
|
|
51
|
+
* The constructor for the ParticleContainer class.
|
|
43
52
|
* @param config - The configuration for the container.
|
|
44
53
|
*/
|
|
45
54
|
constructor(config: Partial<ParticleContainerConfig> = {}) {
|
|
46
55
|
super(config);
|
|
47
|
-
|
|
56
|
+
const { autoResize, autoUpdate, priority }: ParticleContainerConfig = { ...defaultConfig, ...config };
|
|
48
57
|
// Bind all methods of this class to the current instance.
|
|
49
58
|
bindAllMethods(this);
|
|
50
|
-
//
|
|
51
|
-
this.
|
|
52
|
-
this.on('removed', this._removed);
|
|
59
|
+
// Wire up the shared lifecycle (adds the 'added' / 'removed' listeners).
|
|
60
|
+
this._initLifecycle({ autoResize, autoUpdate, resizePriority: priority, updatePriority: priority });
|
|
53
61
|
}
|
|
54
62
|
|
|
55
63
|
/**
|
|
56
|
-
*
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
return Application.getInstance() as AppTypeOverrides['App'];
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Update the container. This method is meant to be overridden by subclasses.
|
|
64
|
+
* Flag the particle buffers for re-upload. `super.update()` would resolve to
|
|
65
|
+
* the lifecycle mixin's no-op hook, so PIXI's implementation is called
|
|
66
|
+
* directly.
|
|
63
67
|
* @param ticker
|
|
64
68
|
*/
|
|
65
69
|
public update(ticker?: Ticker | number) {
|
|
66
70
|
void ticker;
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Resize the container. This method is meant to be overridden by subclasses.
|
|
71
|
-
* @param size
|
|
72
|
-
*/
|
|
73
|
-
public resize(size?: Size) {
|
|
74
|
-
void size;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
/**
|
|
78
|
-
* This method is called when the container is added to the stage. It is meant to be overridden by subclasses.
|
|
79
|
-
*/
|
|
80
|
-
public added() {}
|
|
81
|
-
|
|
82
|
-
destroy(options?: DestroyOptions): void {
|
|
83
|
-
if (this.__config.autoUpdate) {
|
|
84
|
-
this.app.ticker.remove(this.update, this);
|
|
85
|
-
}
|
|
86
|
-
this.onDestroy.emit();
|
|
87
|
-
super.destroy(options);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
public removed() {}
|
|
91
|
-
/**
|
|
92
|
-
* This method is called when the container is added to the stage. It sets up auto-resizing and auto-updating if enabled.
|
|
93
|
-
*/
|
|
94
|
-
private _added() {
|
|
95
|
-
if (this.__config.autoUpdate) {
|
|
96
|
-
this.app.ticker.add(this.update, this, this.__config.priority);
|
|
97
|
-
}
|
|
98
|
-
this.added();
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
private _removed() {
|
|
102
|
-
if (this.__config.autoUpdate) {
|
|
103
|
-
this.app.ticker.remove(this.update, this);
|
|
104
|
-
}
|
|
105
|
-
this.removed();
|
|
71
|
+
PIXIParticleContainer.prototype.update.call(this);
|
|
106
72
|
}
|
|
107
73
|
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Container as PIXIContainer } from 'pixi.js';
|
|
2
|
+
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
3
|
+
|
|
4
|
+
// Registers the factory method table `Factory()` (part of SpineAnimation's mixin
|
|
5
|
+
// chain) reads from — must be imported before any display/ui class is
|
|
6
|
+
// constructed. See importOrder.containerFirst.test.ts.
|
|
7
|
+
import '../mixins/factory/const';
|
|
8
|
+
import { Signal } from '../signals';
|
|
9
|
+
import type { Size } from '../utils';
|
|
10
|
+
import { SpineAnimation } from './SpineAnimation';
|
|
11
|
+
|
|
12
|
+
class FakeSpine extends PIXIContainer {
|
|
13
|
+
public autoUpdate = true;
|
|
14
|
+
public state = {
|
|
15
|
+
data: { skeletonData: { animations: [{ name: 'idle' }] } },
|
|
16
|
+
addListener: vi.fn(),
|
|
17
|
+
removeListener: vi.fn(),
|
|
18
|
+
getCurrent: () => null,
|
|
19
|
+
setAnimation: vi.fn(),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
class TestSpineAnimation extends SpineAnimation {
|
|
24
|
+
public resizeCalls: (Size | undefined)[] = [];
|
|
25
|
+
|
|
26
|
+
public resize(size?: Size) {
|
|
27
|
+
this.resizeCalls.push(size);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
describe('SpineAnimation lifecycle', () => {
|
|
32
|
+
let app: { onResize: Signal<(size: Size) => void>; actions: () => Signal<() => void> };
|
|
33
|
+
let originalAppDescriptor: PropertyDescriptor | undefined;
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
app = {
|
|
37
|
+
onResize: new Signal<(size: Size) => void>(),
|
|
38
|
+
actions: () => new Signal<() => void>(),
|
|
39
|
+
};
|
|
40
|
+
(window as any).Spine = { from: () => new FakeSpine() };
|
|
41
|
+
// `app` is a getter on the mixin prototype; shadow it on SpineAnimation's
|
|
42
|
+
// own prototype so the constructor picks up the fake app.
|
|
43
|
+
originalAppDescriptor = Object.getOwnPropertyDescriptor(SpineAnimation.prototype, 'app');
|
|
44
|
+
Object.defineProperty(SpineAnimation.prototype, 'app', { get: () => app, configurable: true });
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
afterEach(() => {
|
|
48
|
+
if (originalAppDescriptor) {
|
|
49
|
+
Object.defineProperty(SpineAnimation.prototype, 'app', originalAppDescriptor);
|
|
50
|
+
} else {
|
|
51
|
+
delete (SpineAnimation.prototype as any).app;
|
|
52
|
+
}
|
|
53
|
+
delete (window as any).Spine;
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
it('routes app resizes to resize() once it has been added to the stage', () => {
|
|
57
|
+
const animation = new TestSpineAnimation();
|
|
58
|
+
|
|
59
|
+
// not on the stage yet — nothing is connected
|
|
60
|
+
app.onResize.emit({ width: 10, height: 20 });
|
|
61
|
+
expect(animation.resizeCalls).toEqual([]);
|
|
62
|
+
|
|
63
|
+
new PIXIContainer().addChild(animation);
|
|
64
|
+
app.onResize.emit({ width: 100, height: 50 });
|
|
65
|
+
|
|
66
|
+
expect(animation.resizeCalls).toEqual([{ width: 100, height: 50 }]);
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
it('disconnects resize when removed from the stage', () => {
|
|
70
|
+
const animation = new TestSpineAnimation();
|
|
71
|
+
const parent = new PIXIContainer();
|
|
72
|
+
parent.addChild(animation);
|
|
73
|
+
|
|
74
|
+
parent.removeChild(animation);
|
|
75
|
+
app.onResize.emit({ width: 100, height: 50 });
|
|
76
|
+
|
|
77
|
+
expect(animation.resizeCalls).toEqual([]);
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { type AnimationStateListener, type Event, type TrackEntry } from '@esotericsoftware/spine-core';
|
|
2
|
-
import { Application } from '../core/Application';
|
|
3
2
|
import type { SpineProps } from '../mixins/factory/props';
|
|
4
3
|
import { Factory } from '../mixins/factory/Factory';
|
|
4
|
+
import { WithLifecycle } from '../mixins/lifecycle';
|
|
5
5
|
import { WithSignals } from '../mixins/signals';
|
|
6
6
|
import { Signal } from '../signals';
|
|
7
7
|
import { type AppTypeOverrides, bindAllMethods, Spine } from '../utils';
|
|
8
8
|
|
|
9
|
-
const _SpineAnimation = WithSignals(Factory());
|
|
9
|
+
const _SpineAnimation = WithLifecycle(WithSignals(Factory()));
|
|
10
10
|
|
|
11
11
|
export interface ISpineAnimation<ANames extends string = string> extends InstanceType<typeof _SpineAnimation> {
|
|
12
12
|
readonly spine: Spine;
|
|
@@ -43,10 +43,6 @@ export class SpineAnimation<ANames extends string = string> extends _SpineAnimat
|
|
|
43
43
|
|
|
44
44
|
protected _stateListener: AnimationStateListener;
|
|
45
45
|
|
|
46
|
-
get app(): AppTypeOverrides['App'] {
|
|
47
|
-
return Application.getInstance();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
46
|
get animationNames(): ANames[] {
|
|
51
47
|
return this.spine.state.data.skeletonData.animations.map((a) => a.name) as ANames[];
|
|
52
48
|
}
|
|
@@ -65,6 +61,8 @@ export class SpineAnimation<ANames extends string = string> extends _SpineAnimat
|
|
|
65
61
|
public constructor(props?: Partial<SpineProps>) {
|
|
66
62
|
super();
|
|
67
63
|
bindAllMethods(this);
|
|
64
|
+
// Wire up the shared lifecycle (adds the 'added' / 'removed' listeners).
|
|
65
|
+
this._initLifecycle();
|
|
68
66
|
let data = props?.data;
|
|
69
67
|
let spineData: { skeleton: string; atlas: string } | string = '';
|
|
70
68
|
if (typeof data === 'string') {
|
|
@@ -142,7 +142,8 @@ export const defaultFactoryMethods = {
|
|
|
142
142
|
|
|
143
143
|
svg(props: WithRequiredProps<SvgProps, 'ctx'>) {
|
|
144
144
|
const entity = new Svg(props.ctx);
|
|
145
|
-
const { position, x, y, pivot, scale, scaleX, scaleY,
|
|
145
|
+
const { position, x, y, pivot, scale, scaleX, scaleY, ...rest } = props;
|
|
146
|
+
delete (rest as { ctx?: unknown }).ctx;
|
|
146
147
|
resolvePosition({ position, x, y }, entity);
|
|
147
148
|
resolveScale({ scale, scaleX, scaleY }, entity);
|
|
148
149
|
resolvePivot(pivot, entity);
|
package/src/mixins/focus.ts
CHANGED
|
@@ -93,7 +93,6 @@ export function Focusable<TBase extends Constructor<Container>>(Base: TBase): TB
|
|
|
93
93
|
return [this.getFocusArea().width, this.getFocusArea().height];
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
97
96
|
protected _onMouseOver(_e: MouseEvent) {
|
|
98
97
|
this.app.focus.setFocus(this);
|
|
99
98
|
}
|
|
@@ -107,7 +106,6 @@ export function Focusable<TBase extends Constructor<Container>>(Base: TBase): TB
|
|
|
107
106
|
this.click();
|
|
108
107
|
}
|
|
109
108
|
|
|
110
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
111
109
|
protected _handleKeyUp(_e: KeyboardEvent) {}
|
|
112
110
|
|
|
113
111
|
private _maybeEmit(type: string, e: FederatedEvent) {
|
package/src/mixins/index.ts
CHANGED
|
@@ -3,3 +3,7 @@ export * from './animated';
|
|
|
3
3
|
export * from './focus';
|
|
4
4
|
export * from './interaction';
|
|
5
5
|
export * from './factory';
|
|
6
|
+
// Appended last on purpose: `lifecycle` is already evaluated as a dependency of
|
|
7
|
+
// the display classes `./factory` pulls in, so this line adds no new module
|
|
8
|
+
// evaluation order. See the import-cycle notes in docs/wiki/mixins-and-factory.md.
|
|
9
|
+
export * from './lifecycle';
|