@energy8platform/game-engine 0.1.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 +1134 -0
- package/dist/animation.cjs.js +505 -0
- package/dist/animation.cjs.js.map +1 -0
- package/dist/animation.d.ts +235 -0
- package/dist/animation.esm.js +500 -0
- package/dist/animation.esm.js.map +1 -0
- package/dist/assets.cjs.js +148 -0
- package/dist/assets.cjs.js.map +1 -0
- package/dist/assets.d.ts +97 -0
- package/dist/assets.esm.js +146 -0
- package/dist/assets.esm.js.map +1 -0
- package/dist/audio.cjs.js +345 -0
- package/dist/audio.cjs.js.map +1 -0
- package/dist/audio.d.ts +135 -0
- package/dist/audio.esm.js +343 -0
- package/dist/audio.esm.js.map +1 -0
- package/dist/core.cjs.js +1832 -0
- package/dist/core.cjs.js.map +1 -0
- package/dist/core.d.ts +633 -0
- package/dist/core.esm.js +1827 -0
- package/dist/core.esm.js.map +1 -0
- package/dist/debug.cjs.js +298 -0
- package/dist/debug.cjs.js.map +1 -0
- package/dist/debug.d.ts +114 -0
- package/dist/debug.esm.js +295 -0
- package/dist/debug.esm.js.map +1 -0
- package/dist/index.cjs.js +3623 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +1607 -0
- package/dist/index.esm.js +3598 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/ui.cjs.js +1081 -0
- package/dist/ui.cjs.js.map +1 -0
- package/dist/ui.d.ts +387 -0
- package/dist/ui.esm.js +1072 -0
- package/dist/ui.esm.js.map +1 -0
- package/dist/vite.cjs.js +125 -0
- package/dist/vite.cjs.js.map +1 -0
- package/dist/vite.d.ts +42 -0
- package/dist/vite.esm.js +122 -0
- package/dist/vite.esm.js.map +1 -0
- package/package.json +107 -0
- package/src/animation/Easing.ts +116 -0
- package/src/animation/SpineHelper.ts +162 -0
- package/src/animation/Timeline.ts +138 -0
- package/src/animation/Tween.ts +225 -0
- package/src/animation/index.ts +4 -0
- package/src/assets/AssetManager.ts +174 -0
- package/src/assets/index.ts +2 -0
- package/src/audio/AudioManager.ts +366 -0
- package/src/audio/index.ts +1 -0
- package/src/core/EventEmitter.ts +47 -0
- package/src/core/GameApplication.ts +306 -0
- package/src/core/Scene.ts +48 -0
- package/src/core/SceneManager.ts +258 -0
- package/src/core/index.ts +4 -0
- package/src/debug/DevBridge.ts +259 -0
- package/src/debug/FPSOverlay.ts +102 -0
- package/src/debug/index.ts +3 -0
- package/src/index.ts +71 -0
- package/src/input/InputManager.ts +171 -0
- package/src/input/index.ts +1 -0
- package/src/loading/CSSPreloader.ts +155 -0
- package/src/loading/LoadingScene.ts +356 -0
- package/src/loading/index.ts +2 -0
- package/src/state/StateMachine.ts +228 -0
- package/src/state/index.ts +1 -0
- package/src/types.ts +218 -0
- package/src/ui/BalanceDisplay.ts +155 -0
- package/src/ui/Button.ts +199 -0
- package/src/ui/Label.ts +111 -0
- package/src/ui/Modal.ts +134 -0
- package/src/ui/Panel.ts +125 -0
- package/src/ui/ProgressBar.ts +121 -0
- package/src/ui/Toast.ts +124 -0
- package/src/ui/WinDisplay.ts +133 -0
- package/src/ui/index.ts +16 -0
- package/src/viewport/ViewportManager.ts +241 -0
- package/src/viewport/index.ts +1 -0
- package/src/vite/index.ts +153 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var pixi_js = require('pixi.js');
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Collection of easing functions for use with Tween and Timeline.
|
|
7
|
+
*
|
|
8
|
+
* All functions take a progress value t (0..1) and return the eased value.
|
|
9
|
+
*/
|
|
10
|
+
const Easing = {
|
|
11
|
+
linear: (t) => t,
|
|
12
|
+
easeInQuad: (t) => t * t,
|
|
13
|
+
easeOutQuad: (t) => t * (2 - t),
|
|
14
|
+
easeInOutQuad: (t) => (t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t),
|
|
15
|
+
easeInCubic: (t) => t * t * t,
|
|
16
|
+
easeOutCubic: (t) => --t * t * t + 1,
|
|
17
|
+
easeInOutCubic: (t) => t < 0.5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1,
|
|
18
|
+
easeInQuart: (t) => t * t * t * t,
|
|
19
|
+
easeOutQuart: (t) => 1 - --t * t * t * t,
|
|
20
|
+
easeInOutQuart: (t) => t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t,
|
|
21
|
+
easeInSine: (t) => 1 - Math.cos((t * Math.PI) / 2),
|
|
22
|
+
easeOutSine: (t) => Math.sin((t * Math.PI) / 2),
|
|
23
|
+
easeInOutSine: (t) => -(Math.cos(Math.PI * t) - 1) / 2,
|
|
24
|
+
easeInExpo: (t) => (t === 0 ? 0 : Math.pow(2, 10 * t - 10)),
|
|
25
|
+
easeOutExpo: (t) => (t === 1 ? 1 : 1 - Math.pow(2, -10 * t)),
|
|
26
|
+
easeInOutExpo: (t) => t === 0
|
|
27
|
+
? 0
|
|
28
|
+
: t === 1
|
|
29
|
+
? 1
|
|
30
|
+
: t < 0.5
|
|
31
|
+
? Math.pow(2, 20 * t - 10) / 2
|
|
32
|
+
: (2 - Math.pow(2, -20 * t + 10)) / 2,
|
|
33
|
+
easeInBack: (t) => {
|
|
34
|
+
const c1 = 1.70158;
|
|
35
|
+
const c3 = c1 + 1;
|
|
36
|
+
return c3 * t * t * t - c1 * t * t;
|
|
37
|
+
},
|
|
38
|
+
easeOutBack: (t) => {
|
|
39
|
+
const c1 = 1.70158;
|
|
40
|
+
const c3 = c1 + 1;
|
|
41
|
+
return 1 + c3 * Math.pow(t - 1, 3) + c1 * Math.pow(t - 1, 2);
|
|
42
|
+
},
|
|
43
|
+
easeInOutBack: (t) => {
|
|
44
|
+
const c1 = 1.70158;
|
|
45
|
+
const c2 = c1 * 1.525;
|
|
46
|
+
return t < 0.5
|
|
47
|
+
? (Math.pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2
|
|
48
|
+
: (Math.pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;
|
|
49
|
+
},
|
|
50
|
+
easeOutBounce: (t) => {
|
|
51
|
+
const n1 = 7.5625;
|
|
52
|
+
const d1 = 2.75;
|
|
53
|
+
if (t < 1 / d1)
|
|
54
|
+
return n1 * t * t;
|
|
55
|
+
if (t < 2 / d1)
|
|
56
|
+
return n1 * (t -= 1.5 / d1) * t + 0.75;
|
|
57
|
+
if (t < 2.5 / d1)
|
|
58
|
+
return n1 * (t -= 2.25 / d1) * t + 0.9375;
|
|
59
|
+
return n1 * (t -= 2.625 / d1) * t + 0.984375;
|
|
60
|
+
},
|
|
61
|
+
easeInBounce: (t) => 1 - Easing.easeOutBounce(1 - t),
|
|
62
|
+
easeInOutBounce: (t) => t < 0.5
|
|
63
|
+
? (1 - Easing.easeOutBounce(1 - 2 * t)) / 2
|
|
64
|
+
: (1 + Easing.easeOutBounce(2 * t - 1)) / 2,
|
|
65
|
+
easeOutElastic: (t) => {
|
|
66
|
+
const c4 = (2 * Math.PI) / 3;
|
|
67
|
+
return t === 0
|
|
68
|
+
? 0
|
|
69
|
+
: t === 1
|
|
70
|
+
? 1
|
|
71
|
+
: Math.pow(2, -10 * t) * Math.sin((t * 10 - 0.75) * c4) + 1;
|
|
72
|
+
},
|
|
73
|
+
easeInElastic: (t) => {
|
|
74
|
+
const c4 = (2 * Math.PI) / 3;
|
|
75
|
+
return t === 0
|
|
76
|
+
? 0
|
|
77
|
+
: t === 1
|
|
78
|
+
? 1
|
|
79
|
+
: -Math.pow(2, 10 * t - 10) * Math.sin((t * 10 - 10.75) * c4);
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Lightweight tween system integrated with PixiJS Ticker.
|
|
85
|
+
* Zero external dependencies — no GSAP required.
|
|
86
|
+
*
|
|
87
|
+
* All tweens return a Promise that resolves on completion.
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* ```ts
|
|
91
|
+
* // Fade in a sprite
|
|
92
|
+
* await Tween.to(sprite, { alpha: 1, y: 100 }, 500, Easing.easeOutBack);
|
|
93
|
+
*
|
|
94
|
+
* // Move and wait
|
|
95
|
+
* await Tween.to(sprite, { x: 500 }, 300);
|
|
96
|
+
*
|
|
97
|
+
* // From a starting value
|
|
98
|
+
* await Tween.from(sprite, { scale: 0, alpha: 0 }, 400);
|
|
99
|
+
* ```
|
|
100
|
+
*/
|
|
101
|
+
class Tween {
|
|
102
|
+
static _tweens = [];
|
|
103
|
+
static _tickerAdded = false;
|
|
104
|
+
/**
|
|
105
|
+
* Animate properties from current values to target values.
|
|
106
|
+
*
|
|
107
|
+
* @param target - Object to animate (Sprite, Container, etc.)
|
|
108
|
+
* @param props - Target property values
|
|
109
|
+
* @param duration - Duration in milliseconds
|
|
110
|
+
* @param easing - Easing function (default: easeOutQuad)
|
|
111
|
+
* @param onUpdate - Progress callback (0..1)
|
|
112
|
+
*/
|
|
113
|
+
static to(target, props, duration, easing, onUpdate) {
|
|
114
|
+
return new Promise((resolve) => {
|
|
115
|
+
// Capture starting values
|
|
116
|
+
const from = {};
|
|
117
|
+
for (const key of Object.keys(props)) {
|
|
118
|
+
from[key] = Tween.getProperty(target, key);
|
|
119
|
+
}
|
|
120
|
+
const tween = {
|
|
121
|
+
target,
|
|
122
|
+
from,
|
|
123
|
+
to: { ...props },
|
|
124
|
+
duration: Math.max(1, duration),
|
|
125
|
+
easing: easing ?? Easing.easeOutQuad,
|
|
126
|
+
elapsed: 0,
|
|
127
|
+
delay: 0,
|
|
128
|
+
resolve,
|
|
129
|
+
onUpdate,
|
|
130
|
+
};
|
|
131
|
+
Tween._tweens.push(tween);
|
|
132
|
+
Tween.ensureTicker();
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Animate properties from given values to current values.
|
|
137
|
+
*/
|
|
138
|
+
static from(target, props, duration, easing, onUpdate) {
|
|
139
|
+
// Capture current values as "to"
|
|
140
|
+
const to = {};
|
|
141
|
+
for (const key of Object.keys(props)) {
|
|
142
|
+
to[key] = Tween.getProperty(target, key);
|
|
143
|
+
Tween.setProperty(target, key, props[key]);
|
|
144
|
+
}
|
|
145
|
+
return Tween.to(target, to, duration, easing, onUpdate);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Animate from one set of values to another.
|
|
149
|
+
*/
|
|
150
|
+
static fromTo(target, fromProps, toProps, duration, easing, onUpdate) {
|
|
151
|
+
// Set starting values
|
|
152
|
+
for (const key of Object.keys(fromProps)) {
|
|
153
|
+
Tween.setProperty(target, key, fromProps[key]);
|
|
154
|
+
}
|
|
155
|
+
return Tween.to(target, toProps, duration, easing, onUpdate);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Wait for a given duration (useful in timelines).
|
|
159
|
+
*/
|
|
160
|
+
static delay(ms) {
|
|
161
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Kill all tweens on a target.
|
|
165
|
+
*/
|
|
166
|
+
static killTweensOf(target) {
|
|
167
|
+
Tween._tweens = Tween._tweens.filter((tw) => {
|
|
168
|
+
if (tw.target === target) {
|
|
169
|
+
tw.resolve();
|
|
170
|
+
return false;
|
|
171
|
+
}
|
|
172
|
+
return true;
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Kill all active tweens.
|
|
177
|
+
*/
|
|
178
|
+
static killAll() {
|
|
179
|
+
for (const tw of Tween._tweens) {
|
|
180
|
+
tw.resolve();
|
|
181
|
+
}
|
|
182
|
+
Tween._tweens.length = 0;
|
|
183
|
+
}
|
|
184
|
+
/** Number of active tweens */
|
|
185
|
+
static get activeTweens() {
|
|
186
|
+
return Tween._tweens.length;
|
|
187
|
+
}
|
|
188
|
+
// ─── Internal ──────────────────────────────────────────
|
|
189
|
+
static ensureTicker() {
|
|
190
|
+
if (Tween._tickerAdded)
|
|
191
|
+
return;
|
|
192
|
+
Tween._tickerAdded = true;
|
|
193
|
+
pixi_js.Ticker.shared.add(Tween.tick);
|
|
194
|
+
}
|
|
195
|
+
static tick = (ticker) => {
|
|
196
|
+
const dt = ticker.deltaMS;
|
|
197
|
+
const completed = [];
|
|
198
|
+
for (const tw of Tween._tweens) {
|
|
199
|
+
tw.elapsed += dt;
|
|
200
|
+
if (tw.elapsed < tw.delay)
|
|
201
|
+
continue;
|
|
202
|
+
const raw = Math.min((tw.elapsed - tw.delay) / tw.duration, 1);
|
|
203
|
+
const t = tw.easing(raw);
|
|
204
|
+
// Interpolate each property
|
|
205
|
+
for (const key of Object.keys(tw.to)) {
|
|
206
|
+
const start = tw.from[key];
|
|
207
|
+
const end = tw.to[key];
|
|
208
|
+
const value = start + (end - start) * t;
|
|
209
|
+
Tween.setProperty(tw.target, key, value);
|
|
210
|
+
}
|
|
211
|
+
tw.onUpdate?.(raw);
|
|
212
|
+
if (raw >= 1) {
|
|
213
|
+
completed.push(tw);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Remove completed tweens
|
|
217
|
+
for (const tw of completed) {
|
|
218
|
+
const idx = Tween._tweens.indexOf(tw);
|
|
219
|
+
if (idx !== -1)
|
|
220
|
+
Tween._tweens.splice(idx, 1);
|
|
221
|
+
tw.resolve();
|
|
222
|
+
}
|
|
223
|
+
// Remove ticker when no active tweens
|
|
224
|
+
if (Tween._tweens.length === 0 && Tween._tickerAdded) {
|
|
225
|
+
pixi_js.Ticker.shared.remove(Tween.tick);
|
|
226
|
+
Tween._tickerAdded = false;
|
|
227
|
+
}
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Get a potentially nested property (supports 'scale.x', 'position.y', etc.)
|
|
231
|
+
*/
|
|
232
|
+
static getProperty(target, key) {
|
|
233
|
+
const parts = key.split('.');
|
|
234
|
+
let obj = target;
|
|
235
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
236
|
+
obj = obj[parts[i]];
|
|
237
|
+
}
|
|
238
|
+
return obj[parts[parts.length - 1]] ?? 0;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Set a potentially nested property.
|
|
242
|
+
*/
|
|
243
|
+
static setProperty(target, key, value) {
|
|
244
|
+
const parts = key.split('.');
|
|
245
|
+
let obj = target;
|
|
246
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
247
|
+
obj = obj[parts[i]];
|
|
248
|
+
}
|
|
249
|
+
obj[parts[parts.length - 1]] = value;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
/**
|
|
254
|
+
* Sequential/parallel animation timeline built on top of Tween.
|
|
255
|
+
*
|
|
256
|
+
* @example
|
|
257
|
+
* ```ts
|
|
258
|
+
* const timeline = new Timeline();
|
|
259
|
+
*
|
|
260
|
+
* // Sequential: one after another
|
|
261
|
+
* timeline
|
|
262
|
+
* .to(sprite1, { alpha: 1 }, 300)
|
|
263
|
+
* .to(sprite2, { x: 200 }, 500)
|
|
264
|
+
* .delay(200)
|
|
265
|
+
* .call(() => console.log('done'));
|
|
266
|
+
*
|
|
267
|
+
* // Parallel: all at once
|
|
268
|
+
* timeline.parallel(
|
|
269
|
+
* () => Tween.to(sprite1, { x: 100 }, 300),
|
|
270
|
+
* () => Tween.to(sprite2, { y: 200 }, 300),
|
|
271
|
+
* );
|
|
272
|
+
*
|
|
273
|
+
* await timeline.play();
|
|
274
|
+
* ```
|
|
275
|
+
*/
|
|
276
|
+
class Timeline {
|
|
277
|
+
_steps = [];
|
|
278
|
+
_playing = false;
|
|
279
|
+
_cancelled = false;
|
|
280
|
+
/**
|
|
281
|
+
* Add a tween step (animate to target values).
|
|
282
|
+
*/
|
|
283
|
+
to(target, props, duration, easing) {
|
|
284
|
+
this._steps.push({
|
|
285
|
+
fn: () => Tween.to(target, props, duration, easing),
|
|
286
|
+
});
|
|
287
|
+
return this;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Add a tween step (animate from given values).
|
|
291
|
+
*/
|
|
292
|
+
from(target, props, duration, easing) {
|
|
293
|
+
this._steps.push({
|
|
294
|
+
fn: () => Tween.from(target, props, duration, easing),
|
|
295
|
+
});
|
|
296
|
+
return this;
|
|
297
|
+
}
|
|
298
|
+
/**
|
|
299
|
+
* Add a delay step.
|
|
300
|
+
*/
|
|
301
|
+
delay(ms) {
|
|
302
|
+
this._steps.push({
|
|
303
|
+
fn: () => Tween.delay(ms),
|
|
304
|
+
});
|
|
305
|
+
return this;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Add a callback step.
|
|
309
|
+
*/
|
|
310
|
+
call(fn) {
|
|
311
|
+
this._steps.push({
|
|
312
|
+
fn: async () => {
|
|
313
|
+
await fn();
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
return this;
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Add a parallel step — all functions run simultaneously,
|
|
320
|
+
* step completes when all are done.
|
|
321
|
+
*/
|
|
322
|
+
parallel(...fns) {
|
|
323
|
+
this._steps.push({
|
|
324
|
+
fn: () => Promise.all(fns.map((f) => f())).then(() => { }),
|
|
325
|
+
});
|
|
326
|
+
return this;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Play the timeline from start.
|
|
330
|
+
* Returns a promise that resolves when all steps complete.
|
|
331
|
+
*/
|
|
332
|
+
async play() {
|
|
333
|
+
if (this._playing)
|
|
334
|
+
return;
|
|
335
|
+
this._playing = true;
|
|
336
|
+
this._cancelled = false;
|
|
337
|
+
for (const step of this._steps) {
|
|
338
|
+
if (this._cancelled)
|
|
339
|
+
break;
|
|
340
|
+
await step.fn();
|
|
341
|
+
}
|
|
342
|
+
this._playing = false;
|
|
343
|
+
}
|
|
344
|
+
/**
|
|
345
|
+
* Cancel the timeline.
|
|
346
|
+
*/
|
|
347
|
+
cancel() {
|
|
348
|
+
this._cancelled = true;
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Clear all steps.
|
|
352
|
+
*/
|
|
353
|
+
clear() {
|
|
354
|
+
this._steps.length = 0;
|
|
355
|
+
this._cancelled = false;
|
|
356
|
+
this._playing = false;
|
|
357
|
+
return this;
|
|
358
|
+
}
|
|
359
|
+
/** Whether the timeline is currently playing */
|
|
360
|
+
get isPlaying() {
|
|
361
|
+
return this._playing;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
|
|
365
|
+
/**
|
|
366
|
+
* Helper for working with Spine animations in PixiJS v8.
|
|
367
|
+
*
|
|
368
|
+
* Optional — only works if @esotericsoftware/spine-pixi-v8 is installed.
|
|
369
|
+
* Provides convenience methods for creating and playing Spine animations.
|
|
370
|
+
*
|
|
371
|
+
* @example
|
|
372
|
+
* ```ts
|
|
373
|
+
* // Load spine assets via AssetManager first
|
|
374
|
+
* const spine = SpineHelper.create('char-data', 'char-atlas');
|
|
375
|
+
* app.stage.addChild(spine);
|
|
376
|
+
* await SpineHelper.playAnimation(spine, 'idle', true);
|
|
377
|
+
* await SpineHelper.playAnimation(spine, 'win');
|
|
378
|
+
* ```
|
|
379
|
+
*/
|
|
380
|
+
class SpineHelper {
|
|
381
|
+
static _SpineClass = null;
|
|
382
|
+
static _loaded = false;
|
|
383
|
+
/**
|
|
384
|
+
* Ensure the Spine module is loaded.
|
|
385
|
+
* Called automatically by create/playAnimation.
|
|
386
|
+
*/
|
|
387
|
+
static async ensureLoaded() {
|
|
388
|
+
if (SpineHelper._loaded)
|
|
389
|
+
return !!SpineHelper._SpineClass;
|
|
390
|
+
try {
|
|
391
|
+
const spineModule = await import('@esotericsoftware/spine-pixi-v8');
|
|
392
|
+
SpineHelper._SpineClass = spineModule.Spine;
|
|
393
|
+
SpineHelper._loaded = true;
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
catch {
|
|
397
|
+
console.warn('[SpineHelper] @esotericsoftware/spine-pixi-v8 not available.');
|
|
398
|
+
SpineHelper._loaded = true;
|
|
399
|
+
return false;
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Create a Spine display object.
|
|
404
|
+
*
|
|
405
|
+
* @param skeletonAlias - Alias of the loaded .skel/.json asset
|
|
406
|
+
* @param atlasAlias - Alias of the loaded .atlas asset
|
|
407
|
+
* @param options - Additional Spine options
|
|
408
|
+
* @returns Spine container (or null if Spine is not available)
|
|
409
|
+
*/
|
|
410
|
+
static async create(skeletonAlias, atlasAlias, options) {
|
|
411
|
+
const available = await SpineHelper.ensureLoaded();
|
|
412
|
+
if (!available || !SpineHelper._SpineClass)
|
|
413
|
+
return null;
|
|
414
|
+
const SpineClass = SpineHelper._SpineClass;
|
|
415
|
+
// Use Spine.from for v4.2, constructor for v4.3+
|
|
416
|
+
if (typeof SpineClass.from === 'function') {
|
|
417
|
+
return SpineClass.from({
|
|
418
|
+
skeleton: skeletonAlias,
|
|
419
|
+
atlas: atlasAlias,
|
|
420
|
+
scale: options?.scale,
|
|
421
|
+
autoUpdate: options?.autoUpdate ?? true,
|
|
422
|
+
});
|
|
423
|
+
}
|
|
424
|
+
return new SpineClass({
|
|
425
|
+
skeleton: skeletonAlias,
|
|
426
|
+
atlas: atlasAlias,
|
|
427
|
+
scale: options?.scale,
|
|
428
|
+
autoUpdate: options?.autoUpdate ?? true,
|
|
429
|
+
});
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Play a named animation on a Spine object.
|
|
433
|
+
* Returns a promise that resolves when the animation completes.
|
|
434
|
+
* For looping animations, the promise never resolves.
|
|
435
|
+
*
|
|
436
|
+
* @param spine - Spine display object
|
|
437
|
+
* @param animationName - Name of the animation
|
|
438
|
+
* @param loop - Whether to loop (default: false)
|
|
439
|
+
* @param track - Animation track (default: 0)
|
|
440
|
+
*/
|
|
441
|
+
static playAnimation(spine, animationName, loop = false, track = 0) {
|
|
442
|
+
return new Promise((resolve) => {
|
|
443
|
+
if (!spine?.state) {
|
|
444
|
+
resolve();
|
|
445
|
+
return;
|
|
446
|
+
}
|
|
447
|
+
const entry = spine.state.setAnimation(track, animationName, loop);
|
|
448
|
+
if (loop) {
|
|
449
|
+
// Looping animations never complete — resolve immediately
|
|
450
|
+
// so callers can fire-and-forget
|
|
451
|
+
resolve();
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
// Wait for the animation to complete
|
|
455
|
+
spine.state.addListener({
|
|
456
|
+
complete: (completedEntry) => {
|
|
457
|
+
if (completedEntry === entry) {
|
|
458
|
+
resolve();
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
});
|
|
462
|
+
});
|
|
463
|
+
}
|
|
464
|
+
/**
|
|
465
|
+
* Queue an animation after the current one finishes.
|
|
466
|
+
*
|
|
467
|
+
* @param spine - Spine display object
|
|
468
|
+
* @param animationName - Animation name
|
|
469
|
+
* @param delay - Mix duration / delay before starting
|
|
470
|
+
* @param loop - Loop the queued animation
|
|
471
|
+
* @param track - Animation track
|
|
472
|
+
*/
|
|
473
|
+
static addAnimation(spine, animationName, delay = 0, loop = false, track = 0) {
|
|
474
|
+
spine?.state?.addAnimation(track, animationName, loop, delay);
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Get all animation names available on a Spine skeleton.
|
|
478
|
+
*/
|
|
479
|
+
static getAnimationNames(spine) {
|
|
480
|
+
if (!spine?.skeleton?.data?.animations)
|
|
481
|
+
return [];
|
|
482
|
+
return spine.skeleton.data.animations.map((a) => a.name);
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* Get all skin names available on a Spine skeleton.
|
|
486
|
+
*/
|
|
487
|
+
static getSkinNames(spine) {
|
|
488
|
+
if (!spine?.skeleton?.data?.skins)
|
|
489
|
+
return [];
|
|
490
|
+
return spine.skeleton.data.skins.map((s) => s.name);
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Set the active skin on a Spine skeleton.
|
|
494
|
+
*/
|
|
495
|
+
static setSkin(spine, skinName) {
|
|
496
|
+
spine?.skeleton?.setSkinByName(skinName);
|
|
497
|
+
spine?.skeleton?.setSlotsToSetupPose();
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
exports.Easing = Easing;
|
|
502
|
+
exports.SpineHelper = SpineHelper;
|
|
503
|
+
exports.Timeline = Timeline;
|
|
504
|
+
exports.Tween = Tween;
|
|
505
|
+
//# sourceMappingURL=animation.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"animation.cjs.js","sources":["../src/animation/Easing.ts","../src/animation/Tween.ts","../src/animation/Timeline.ts","../src/animation/SpineHelper.ts"],"sourcesContent":[null,null,null,null],"names":["Ticker"],"mappings":"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"}
|