@flighthq/spritesheet 0.3.0-next.906.07cea63 → 0.3.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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/spritesheetAnimation.d.ts +1 -1
- package/dist/spritesheetAnimation.d.ts.map +1 -1
- package/dist/spritesheetAnimation.js +2 -2
- package/dist/spritesheetAnimation.js.map +1 -1
- package/dist/spritesheetData.js +1 -1
- package/dist/spritesheetData.js.map +1 -1
- package/dist/spritesheetFrom.d.ts +1 -2
- package/dist/spritesheetFrom.d.ts.map +1 -1
- package/dist/spritesheetFrom.js +4 -30
- package/dist/spritesheetFrom.js.map +1 -1
- package/dist/spritesheetPlayer.d.ts.map +1 -1
- package/dist/spritesheetPlayer.js +26 -11
- package/dist/spritesheetPlayer.js.map +1 -1
- package/package.json +7 -6
- package/src/spritesheetAnimation.test.ts +5 -5
- package/src/spritesheetData.test.ts +3 -3
- package/src/spritesheetFrom.test.ts +4 -52
- package/src/spritesheetPlayer.test.ts +138 -29
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { SpritesheetAnimationData, SpritesheetData, SpritesheetFrameData, acquireSpritesheetPlayer, cloneSpritesheet, cloneSpritesheetPlayer, createSpritesheet, createSpritesheetAnimation, createSpritesheetAnimationData, createSpritesheetAnimationFromFrameNames, createSpritesheetData, createSpritesheetFrame, createSpritesheetFrameData, createSpritesheetFromData, createSpritesheetFromGrid,
|
|
1
|
+
export { SpritesheetAnimationData, SpritesheetData, SpritesheetFrameData, acquireSpritesheetPlayer, cloneSpritesheet, cloneSpritesheetPlayer, createSpritesheet, createSpritesheetAnimation, createSpritesheetAnimationData, createSpritesheetAnimationFromFrameNames, createSpritesheetData, createSpritesheetFrame, createSpritesheetFrameData, createSpritesheetFromData, createSpritesheetFromGrid, createSpritesheetPlayer, disposeSpritesheetPlayer, getSpritesheetAnimation, getSpritesheetPlayerFrame, getSpritesheetPlayerFrameAt, pauseSpritesheetPlayer, playSpritesheetAnimation, queueSpritesheetAnimation, releaseSpritesheetPlayer, resumeSpritesheetPlayer, seekSpritesheetPlayerToFrame, seekSpritesheetPlayerToTime, stopSpritesheetPlayer, updateSpritesheetPlayer, validateSpritesheet, validateSpritesheetData, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,wCAAwC,EACxC,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,oBAAoB,EACpB,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,wCAAwC,EACxC,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { acquireSpritesheetPlayer, cloneSpritesheet, cloneSpritesheetPlayer, createSpritesheet, createSpritesheetAnimation, createSpritesheetAnimationData, createSpritesheetAnimationFromFrameNames, createSpritesheetData, createSpritesheetFrame, createSpritesheetFrameData, createSpritesheetFromData, createSpritesheetFromGrid,
|
|
1
|
+
export { acquireSpritesheetPlayer, cloneSpritesheet, cloneSpritesheetPlayer, createSpritesheet, createSpritesheetAnimation, createSpritesheetAnimationData, createSpritesheetAnimationFromFrameNames, createSpritesheetData, createSpritesheetFrame, createSpritesheetFrameData, createSpritesheetFromData, createSpritesheetFromGrid, createSpritesheetPlayer, disposeSpritesheetPlayer, getSpritesheetAnimation, getSpritesheetPlayerFrame, getSpritesheetPlayerFrameAt, pauseSpritesheetPlayer, playSpritesheetAnimation, queueSpritesheetAnimation, releaseSpritesheetPlayer, resumeSpritesheetPlayer, seekSpritesheetPlayerToFrame, seekSpritesheetPlayerToTime, stopSpritesheetPlayer, updateSpritesheetPlayer, validateSpritesheet, validateSpritesheetData, } from './contract';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,wCAAwC,EACxC,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,wBAAwB,EACxB,gBAAgB,EAChB,sBAAsB,EACtB,iBAAiB,EACjB,0BAA0B,EAC1B,8BAA8B,EAC9B,wCAAwC,EACxC,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,yBAAyB,EACzB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,EACzB,2BAA2B,EAC3B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,4BAA4B,EAC5B,2BAA2B,EAC3B,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Spritesheet, SpritesheetAnimation } from '@flighthq/types/contract';
|
|
2
2
|
export declare function createSpritesheetAnimation(obj?: Partial<SpritesheetAnimation>): SpritesheetAnimation;
|
|
3
|
-
export declare function createSpritesheetAnimationFromFrameNames(spritesheet: Readonly<Spritesheet>, pattern: string | RegExp, options?: Partial<Pick<SpritesheetAnimation, 'direction' | 'frameDuration' | 'frameDurations' | '
|
|
3
|
+
export declare function createSpritesheetAnimationFromFrameNames(spritesheet: Readonly<Spritesheet>, pattern: string | RegExp, options?: Partial<Pick<SpritesheetAnimation, 'direction' | 'frameDuration' | 'frameDurations' | 'originX' | 'originY' | 'repeatCount'>>): SpritesheetAnimation | null;
|
|
4
4
|
//# sourceMappingURL=spritesheetAnimation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetAnimation.d.ts","sourceRoot":"","sources":["../src/spritesheetAnimation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAElF,wBAAgB,0BAA0B,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAUpG;AAMD,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAClC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,
|
|
1
|
+
{"version":3,"file":"spritesheetAnimation.d.ts","sourceRoot":"","sources":["../src/spritesheetAnimation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAElF,wBAAgB,0BAA0B,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,oBAAoB,CAUpG;AAMD,wBAAgB,wCAAwC,CACtD,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAClC,OAAO,EAAE,MAAM,GAAG,MAAM,EACxB,OAAO,CAAC,EAAE,OAAO,CACf,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,eAAe,GAAG,gBAAgB,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC,CACrH,GACA,oBAAoB,GAAG,IAAI,CA0B7B"}
|
|
@@ -5,9 +5,9 @@ export function createSpritesheetAnimation(obj) {
|
|
|
5
5
|
frameDuration: obj?.frameDuration ?? 0,
|
|
6
6
|
frameDurations: obj?.frameDurations ?? null,
|
|
7
7
|
frames: obj?.frames ?? [],
|
|
8
|
-
loop: obj?.loop ?? false,
|
|
9
8
|
originX: obj?.originX ?? 0,
|
|
10
9
|
originY: obj?.originY ?? 0,
|
|
10
|
+
repeatCount: obj?.repeatCount ?? 0,
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
13
|
// Builds a `SpritesheetAnimation` by selecting frames from a `Spritesheet` whose atlas region names
|
|
@@ -40,9 +40,9 @@ export function createSpritesheetAnimationFromFrameNames(spritesheet, pattern, o
|
|
|
40
40
|
frameDuration: options?.frameDuration,
|
|
41
41
|
frameDurations: options?.frameDurations,
|
|
42
42
|
frames: matchedIndices,
|
|
43
|
-
loop: options?.loop,
|
|
44
43
|
originX: options?.originX,
|
|
45
44
|
originY: options?.originY,
|
|
45
|
+
repeatCount: options?.repeatCount,
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
//# sourceMappingURL=spritesheetAnimation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetAnimation.js","sourceRoot":"","sources":["../src/spritesheetAnimation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,MAAM,UAAU,0BAA0B,CAAC,GAAmC;IAC5E,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,SAAS;QACtC,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,CAAC;QACtC,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,IAAI;QAC3C,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;QACzB,
|
|
1
|
+
{"version":3,"file":"spritesheetAnimation.js","sourceRoot":"","sources":["../src/spritesheetAnimation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD,MAAM,UAAU,0BAA0B,CAAC,GAAmC;IAC5E,OAAO,YAAY,CAAC;QAClB,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,SAAS;QACtC,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,CAAC;QACtC,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,IAAI;QAC3C,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;QACzB,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC;QAC1B,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC;KACnC,CAAC,CAAC;AACL,CAAC;AAED,oGAAoG;AACpG,kGAAkG;AAClG,kGAAkG;AAClG,kFAAkF;AAClF,MAAM,UAAU,wCAAwC,CACtD,WAAkC,EAClC,OAAwB,EACxB,OAEC;IAED,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,CAAC;IACtC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAChC,uEAAuE;IACvE,MAAM,cAAc,GAAa,EAAE,CAAC;IACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,IAAI,KAAK,IAAI;YAAE,SAAS;QAC5B,MAAM,OAAO,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChH,IAAI,OAAO,EAAE,CAAC;YACZ,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IACD,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,0BAA0B,CAAC;QAChC,SAAS,EAAE,OAAO,EAAE,SAAS;QAC7B,aAAa,EAAE,OAAO,EAAE,aAAa;QACrC,cAAc,EAAE,OAAO,EAAE,cAAc;QACvC,MAAM,EAAE,cAAc;QACtB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,OAAO,EAAE,OAAO,EAAE,OAAO;QACzB,WAAW,EAAE,OAAO,EAAE,WAAW;KAClC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/spritesheetData.js
CHANGED
|
@@ -4,10 +4,10 @@ export function createSpritesheetAnimationData(obj) {
|
|
|
4
4
|
frameDuration: obj?.frameDuration ?? 100,
|
|
5
5
|
frameDurations: obj?.frameDurations ?? null,
|
|
6
6
|
frameNames: obj?.frameNames ?? [],
|
|
7
|
-
loop: obj?.loop ?? true,
|
|
8
7
|
name: obj?.name ?? '',
|
|
9
8
|
originX: obj?.originX ?? 0,
|
|
10
9
|
originY: obj?.originY ?? 0,
|
|
10
|
+
repeatCount: obj?.repeatCount ?? -1,
|
|
11
11
|
};
|
|
12
12
|
}
|
|
13
13
|
export function createSpritesheetData(obj) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetData.js","sourceRoot":"","sources":["../src/spritesheetData.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,8BAA8B,CAAC,GAAuC;IACpF,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,SAAS;QACtC,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,GAAG;QACxC,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,IAAI;QAC3C,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE;QACjC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,
|
|
1
|
+
{"version":3,"file":"spritesheetData.js","sourceRoot":"","sources":["../src/spritesheetData.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,8BAA8B,CAAC,GAAuC;IACpF,OAAO;QACL,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,SAAS;QACtC,aAAa,EAAE,GAAG,EAAE,aAAa,IAAI,GAAG;QACxC,cAAc,EAAE,GAAG,EAAE,cAAc,IAAI,IAAI;QAC3C,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE;QACjC,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC;QAC1B,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC,CAAC;KACpC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,GAA8B;IAClE,OAAO;QACL,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,EAAE;QACjC,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,EAAE;QACzB,SAAS,EAAE,GAAG,EAAE,SAAS,IAAI,EAAE;QAC/B,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC;QAClC,UAAU,EAAE,GAAG,EAAE,UAAU,IAAI,CAAC;QAChC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,GAAmC;IAC5E,OAAO;QACL,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;QACxB,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC;QAC1B,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,IAAI;QAC3B,MAAM,EAAE,GAAG,EAAE,MAAM,IAAI,IAAI;QAC3B,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,KAAK;QAC9B,YAAY,EAAE,GAAG,EAAE,YAAY,IAAI,CAAC;QACpC,WAAW,EAAE,GAAG,EAAE,WAAW,IAAI,CAAC;QAClC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;QACtB,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;QACd,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { GridSliceOptions, Spritesheet, TextureAtlas
|
|
1
|
+
import type { GridSliceOptions, Spritesheet, TextureAtlas } from '@flighthq/types/contract';
|
|
2
2
|
import type { SpritesheetData } from './spritesheetData';
|
|
3
3
|
export declare function createSpritesheetFromData(data: Readonly<SpritesheetData>, atlas: Readonly<TextureAtlas>): Spritesheet;
|
|
4
4
|
export declare function createSpritesheetFromGrid(options: Readonly<GridSliceOptions>): Spritesheet;
|
|
5
|
-
export declare function createSpritesheetFromTileset(tileset: Tileset): Spritesheet;
|
|
6
5
|
//# sourceMappingURL=spritesheetFrom.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetFrom.d.ts","sourceRoot":"","sources":["../src/spritesheetFrom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"spritesheetFrom.d.ts","sourceRoot":"","sources":["../src/spritesheetFrom.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAwB,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOzD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,WAAW,CA8CrH;AAMD,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAAG,WAAW,CAI1F"}
|
package/dist/spritesheetFrom.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createTextureAtlasFromGrid } from '@flighthq/textureatlas/contract';
|
|
2
2
|
import { createSpritesheet } from './spritesheet';
|
|
3
3
|
import { createSpritesheetAnimation } from './spritesheetAnimation';
|
|
4
4
|
import { createSpritesheetFrame } from './spritesheetFrame';
|
|
@@ -45,9 +45,9 @@ export function createSpritesheetFromData(data, atlas) {
|
|
|
45
45
|
frameDuration: ad.frameDuration,
|
|
46
46
|
frameDurations: ad.frameDurations,
|
|
47
47
|
frames: resolvedFrames,
|
|
48
|
-
loop: ad.loop,
|
|
49
48
|
originX: ad.originX,
|
|
50
49
|
originY: ad.originY,
|
|
50
|
+
repeatCount: ad.repeatCount,
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
return createSpritesheet({ animations, atlas, frames });
|
|
@@ -57,34 +57,8 @@ export function createSpritesheetFromData(data, atlas) {
|
|
|
57
57
|
// Frames are generated row-major (left-to-right, top-to-bottom), each backed by an atlas region named
|
|
58
58
|
// `${namePrefix}${id}`.
|
|
59
59
|
export function createSpritesheetFromGrid(options) {
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const frameHeight = options.frameHeight ?? Math.floor((imageHeight - 2 * marginY - spacingY * (rows - 1)) / rows);
|
|
63
|
-
const atlas = createTextureAtlas();
|
|
64
|
-
const frames = [];
|
|
65
|
-
let id = 0;
|
|
66
|
-
for (let row = 0; row < rows; row++) {
|
|
67
|
-
for (let col = 0; col < columns; col++) {
|
|
68
|
-
const x = marginX + col * (frameWidth + spacingX);
|
|
69
|
-
const y = marginY + row * (frameHeight + spacingY);
|
|
70
|
-
const region = createTextureAtlasRegion({
|
|
71
|
-
height: frameHeight,
|
|
72
|
-
id,
|
|
73
|
-
name: `${namePrefix}${id}`,
|
|
74
|
-
width: frameWidth,
|
|
75
|
-
x,
|
|
76
|
-
y,
|
|
77
|
-
});
|
|
78
|
-
atlas.regions.push(region);
|
|
79
|
-
frames.push(createSpritesheetFrame({ id }));
|
|
80
|
-
id++;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
return createSpritesheet({ atlas, frames });
|
|
84
|
-
}
|
|
85
|
-
export function createSpritesheetFromTileset(tileset) {
|
|
86
|
-
const { atlas } = tileset;
|
|
87
|
-
const frames = (atlas?.regions ?? []).map((region) => createSpritesheetFrame({ id: region.id }));
|
|
60
|
+
const atlas = createTextureAtlasFromGrid(options);
|
|
61
|
+
const frames = atlas.regions.map((region) => createSpritesheetFrame({ id: region.id }));
|
|
88
62
|
return createSpritesheet({ atlas, frames });
|
|
89
63
|
}
|
|
90
64
|
//# sourceMappingURL=spritesheetFrom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetFrom.js","sourceRoot":"","sources":["../src/spritesheetFrom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"spritesheetFrom.js","sourceRoot":"","sources":["../src/spritesheetFrom.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetPlayer.d.ts","sourceRoot":"","sources":["../src/spritesheetPlayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEvH,wBAAgB,wBAAwB,IAAI,iBAAiB,CAc5D;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAY7F;AAED,wBAAgB,uBAAuB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAY3F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAMxE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GACjC,gBAAgB,GAAG,IAAI,CAKzB;AAOD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAClC,WAAW,EAAE,MAAM,GAClB,gBAAgB,GAAG,IAAI,CAQzB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEtE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAChD,OAAO,UAAO,GACb,IAAI,CAON;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAEpH;AAKD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAWxE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEvE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"spritesheetPlayer.d.ts","sourceRoot":"","sources":["../src/spritesheetPlayer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEvH,wBAAgB,wBAAwB,IAAI,iBAAiB,CAc5D;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAY7F;AAED,wBAAgB,uBAAuB,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAY3F;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAMxE;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,GACjC,gBAAgB,GAAG,IAAI,CAKzB;AAOD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,EACnC,WAAW,EAAE,QAAQ,CAAC,WAAW,CAAC,EAClC,WAAW,EAAE,MAAM,GAClB,gBAAgB,GAAG,IAAI,CAQzB;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEtE;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,iBAAiB,EACzB,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,IAAI,EAChD,OAAO,UAAO,GACb,IAAI,CAON;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAEpH;AAKD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAWxE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEvE;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAOhG;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAMzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAKrE;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CA6B7F"}
|
|
@@ -108,9 +108,8 @@ export function seekSpritesheetPlayerToFrame(player, frameIndex) {
|
|
|
108
108
|
return;
|
|
109
109
|
const clamped = Math.max(0, Math.min(frameIndex, animation.frames.length - 1));
|
|
110
110
|
player.frameIndex = clamped;
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
player.elapsed = resolveVirtualIndexStartTime(animation, clamped);
|
|
111
|
+
const virtualIndex = resolveDisplayIndexToFirstVirtualIndex(animation, clamped);
|
|
112
|
+
player.elapsed = resolveVirtualIndexStartTime(animation, virtualIndex);
|
|
114
113
|
}
|
|
115
114
|
export function seekSpritesheetPlayerToTime(player, time) {
|
|
116
115
|
const { animation } = player;
|
|
@@ -130,11 +129,12 @@ export function updateSpritesheetPlayer(player, deltaTime) {
|
|
|
130
129
|
const { animation } = player;
|
|
131
130
|
if (animation === null || player.complete || player.paused || animation.frames.length === 0)
|
|
132
131
|
return false;
|
|
133
|
-
const {
|
|
132
|
+
const { repeatCount } = animation;
|
|
134
133
|
const totalTime = resolveAnimationTotalTime(animation);
|
|
135
134
|
const prevLoopCount = Math.floor(player.elapsed / totalTime);
|
|
136
135
|
player.elapsed += deltaTime * player.speed;
|
|
137
|
-
|
|
136
|
+
const playbackTime = repeatCount < 0 ? Infinity : totalTime * (repeatCount + 1);
|
|
137
|
+
if (player.elapsed >= playbackTime) {
|
|
138
138
|
if (player.queue.length > 0) {
|
|
139
139
|
const next = player.queue.shift();
|
|
140
140
|
player.animation = next;
|
|
@@ -142,7 +142,7 @@ export function updateSpritesheetPlayer(player, deltaTime) {
|
|
|
142
142
|
player.frameIndex = 0;
|
|
143
143
|
return true;
|
|
144
144
|
}
|
|
145
|
-
player.elapsed =
|
|
145
|
+
player.elapsed = playbackTime;
|
|
146
146
|
// On completion, show the last virtual frame in the direction sequence.
|
|
147
147
|
const lastVi = resolveVirtualFrameCount(animation) - 1;
|
|
148
148
|
player.frameIndex = resolveVirtualIndexToDisplayIndex(animation, lastVi);
|
|
@@ -157,22 +157,37 @@ export function updateSpritesheetPlayer(player, deltaTime) {
|
|
|
157
157
|
player.frameIndex = resolveVirtualIndexToDisplayIndex(animation, vi);
|
|
158
158
|
return true;
|
|
159
159
|
}
|
|
160
|
+
// Returns the first virtual index whose direction-aware mapping produces `displayIndex`. Forward and
|
|
161
|
+
// pingpong encounter it on the forward leg; reverse and pingpong_reverse encounter it on the reverse
|
|
162
|
+
// leg. Keeping this inverse beside the forward mapping prevents display and virtual indices from being
|
|
163
|
+
// confused at seek call sites.
|
|
164
|
+
function resolveDisplayIndexToFirstVirtualIndex(animation, displayIndex) {
|
|
165
|
+
switch (animation.direction) {
|
|
166
|
+
case 'forward':
|
|
167
|
+
case 'pingpong':
|
|
168
|
+
return displayIndex;
|
|
169
|
+
case 'reverse':
|
|
170
|
+
case 'pingpong_reverse':
|
|
171
|
+
return animation.frames.length - 1 - displayIndex;
|
|
172
|
+
default:
|
|
173
|
+
return displayIndex;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
160
176
|
// Returns a cached cumulative-duration array for variable-timing animations.
|
|
161
177
|
// The array has virtualCount+1 entries: [0, d0, d0+d1, ..., total].
|
|
162
178
|
function getCumulativeDurations(animation) {
|
|
163
179
|
const cached = cumulativeDurationsCache.get(animation);
|
|
164
180
|
if (cached !== undefined)
|
|
165
181
|
return cached;
|
|
166
|
-
const {
|
|
167
|
-
const n = frames.length;
|
|
182
|
+
const { frameDuration, frameDurations } = animation;
|
|
168
183
|
const virtualCount = resolveVirtualFrameCount(animation);
|
|
169
184
|
const arr = new Float64Array(virtualCount + 1);
|
|
170
185
|
let t = 0;
|
|
171
186
|
for (let vi = 0; vi < virtualCount; vi++) {
|
|
172
187
|
arr[vi] = t;
|
|
173
|
-
//
|
|
174
|
-
const
|
|
175
|
-
t += frameDurations[
|
|
188
|
+
// Durations belong to displayed frames, so use the same direction-aware mapping as playback.
|
|
189
|
+
const displayIndex = resolveVirtualIndexToDisplayIndex(animation, vi);
|
|
190
|
+
t += frameDurations[displayIndex] ?? frameDuration;
|
|
176
191
|
}
|
|
177
192
|
arr[virtualCount] = t || 1;
|
|
178
193
|
cumulativeDurationsCache.set(animation, arr);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spritesheetPlayer.js","sourceRoot":"","sources":["../src/spritesheetPlayer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spritesheetPlayer.js","sourceRoot":"","sources":["../src/spritesheetPlayer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/spritesheet",
|
|
3
|
-
"version": "0.3.0
|
|
3
|
+
"version": "0.3.0",
|
|
4
|
+
"author": "Joshua Granick and other contributors",
|
|
5
|
+
"license": "MIT",
|
|
4
6
|
"repository": {
|
|
5
7
|
"type": "git",
|
|
6
8
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -36,11 +38,10 @@
|
|
|
36
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
37
39
|
},
|
|
38
40
|
"dependencies": {
|
|
39
|
-
"@flighthq/entity": "0.3.0
|
|
40
|
-
"@flighthq/signals": "0.3.0
|
|
41
|
-
"@flighthq/textureatlas": "0.3.0
|
|
42
|
-
"@flighthq/
|
|
43
|
-
"@flighthq/types": "0.3.0-next.906.07cea63"
|
|
41
|
+
"@flighthq/entity": "0.3.0",
|
|
42
|
+
"@flighthq/signals": "0.3.0",
|
|
43
|
+
"@flighthq/textureatlas": "0.3.0",
|
|
44
|
+
"@flighthq/types": "0.3.0"
|
|
44
45
|
},
|
|
45
46
|
"devDependencies": {
|
|
46
47
|
"typescript": "^5.3.0"
|
|
@@ -17,19 +17,19 @@ describe('createSpritesheetAnimation', () => {
|
|
|
17
17
|
|
|
18
18
|
expect(anim.frameDuration).toBe(0);
|
|
19
19
|
expect(anim.frames).toEqual([]);
|
|
20
|
-
expect(anim.loop).toBe(false);
|
|
21
20
|
expect(anim.originX).toBe(0);
|
|
22
21
|
expect(anim.originY).toBe(0);
|
|
22
|
+
expect(anim.repeatCount).toBe(0);
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
it('applies partial overrides', () => {
|
|
26
|
-
const anim = createSpritesheetAnimation({ frameDuration: 100,
|
|
26
|
+
const anim = createSpritesheetAnimation({ frameDuration: 100, frames: [0, 1, 2], repeatCount: 2 });
|
|
27
27
|
|
|
28
28
|
expect(anim.frameDuration).toBe(100);
|
|
29
|
-
expect(anim.loop).toBe(true);
|
|
30
29
|
expect(anim.frames).toEqual([0, 1, 2]);
|
|
31
30
|
expect(anim.originX).toBe(0);
|
|
32
31
|
expect(anim.originY).toBe(0);
|
|
32
|
+
expect(anim.repeatCount).toBe(2);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
it('uses a provided frames array directly', () => {
|
|
@@ -82,11 +82,11 @@ describe('createSpritesheetAnimationFromFrameNames', () => {
|
|
|
82
82
|
const anim = createSpritesheetAnimationFromFrameNames(sheet, 'walk_', {
|
|
83
83
|
direction: 'pingpong',
|
|
84
84
|
frameDuration: 80,
|
|
85
|
-
|
|
85
|
+
repeatCount: -1,
|
|
86
86
|
});
|
|
87
87
|
expect(anim!.direction).toBe('pingpong');
|
|
88
88
|
expect(anim!.frameDuration).toBe(80);
|
|
89
|
-
expect(anim!.
|
|
89
|
+
expect(anim!.repeatCount).toBe(-1);
|
|
90
90
|
});
|
|
91
91
|
|
|
92
92
|
it('returns null when no frames match the pattern', () => {
|
|
@@ -7,10 +7,10 @@ describe('createSpritesheetAnimationData', () => {
|
|
|
7
7
|
expect(anim.frameDuration).toBe(100);
|
|
8
8
|
expect(anim.frameDurations).toBeNull();
|
|
9
9
|
expect(anim.frameNames).toEqual([]);
|
|
10
|
-
expect(anim.loop).toBe(true);
|
|
11
10
|
expect(anim.name).toBe('');
|
|
12
11
|
expect(anim.originX).toBe(0);
|
|
13
12
|
expect(anim.originY).toBe(0);
|
|
13
|
+
expect(anim.repeatCount).toBe(-1);
|
|
14
14
|
});
|
|
15
15
|
|
|
16
16
|
it('applies provided partial fields', () => {
|
|
@@ -18,18 +18,18 @@ describe('createSpritesheetAnimationData', () => {
|
|
|
18
18
|
direction: 'pingpong',
|
|
19
19
|
frameDuration: 80,
|
|
20
20
|
frameNames: ['a', 'b', 'c'],
|
|
21
|
-
loop: false,
|
|
22
21
|
name: 'walk',
|
|
23
22
|
originX: 0.5,
|
|
24
23
|
originY: 1,
|
|
24
|
+
repeatCount: 3,
|
|
25
25
|
});
|
|
26
26
|
expect(anim.direction).toBe('pingpong');
|
|
27
27
|
expect(anim.frameDuration).toBe(80);
|
|
28
28
|
expect(anim.frameNames).toEqual(['a', 'b', 'c']);
|
|
29
|
-
expect(anim.loop).toBe(false);
|
|
30
29
|
expect(anim.name).toBe('walk');
|
|
31
30
|
expect(anim.originX).toBe(0.5);
|
|
32
31
|
expect(anim.originY).toBe(1);
|
|
32
|
+
expect(anim.repeatCount).toBe(3);
|
|
33
33
|
});
|
|
34
34
|
|
|
35
35
|
it('stores per-frame durations when provided', () => {
|
|
@@ -1,15 +1,7 @@
|
|
|
1
1
|
import { createTextureAtlas, createTextureAtlasRegion } from '@flighthq/textureatlas/contract';
|
|
2
|
-
import { buildTilesetRegions, createTileset } from '@flighthq/tileset/contract';
|
|
3
2
|
|
|
4
3
|
import { createSpritesheetAnimationData, createSpritesheetData, createSpritesheetFrameData } from './spritesheetData';
|
|
5
|
-
import { createSpritesheetFromData, createSpritesheetFromGrid
|
|
6
|
-
|
|
7
|
-
function makeTileset(columns: number, rows: number) {
|
|
8
|
-
const atlas = createTextureAtlas();
|
|
9
|
-
const tileset = createTileset({ atlas, columns, rows, tileWidth: 32, tileHeight: 32 });
|
|
10
|
-
buildTilesetRegions(tileset);
|
|
11
|
-
return tileset;
|
|
12
|
-
}
|
|
4
|
+
import { createSpritesheetFromData, createSpritesheetFromGrid } from './spritesheetFrom';
|
|
13
5
|
|
|
14
6
|
describe('createSpritesheetFromData', () => {
|
|
15
7
|
it('builds one frame per SpritesheetFrameData entry', () => {
|
|
@@ -72,7 +64,7 @@ describe('createSpritesheetFromData', () => {
|
|
|
72
64
|
frameDuration: 100,
|
|
73
65
|
frameDurations: [80, 120],
|
|
74
66
|
frameNames: ['f0', 'f1'],
|
|
75
|
-
|
|
67
|
+
repeatCount: 3,
|
|
76
68
|
}),
|
|
77
69
|
],
|
|
78
70
|
frames: [createSpritesheetFrameData({ name: 'f0' }), createSpritesheetFrameData({ name: 'f1' })],
|
|
@@ -85,7 +77,7 @@ describe('createSpritesheetFromData', () => {
|
|
|
85
77
|
expect(walk.direction).toBe('pingpong');
|
|
86
78
|
expect(walk.frameDurations).toEqual([80, 120]);
|
|
87
79
|
expect(walk.frames).toEqual([0, 1]);
|
|
88
|
-
expect(walk.
|
|
80
|
+
expect(walk.repeatCount).toBe(3);
|
|
89
81
|
});
|
|
90
82
|
|
|
91
83
|
it('carries pivot and rotated onto runtime frames', () => {
|
|
@@ -214,46 +206,6 @@ describe('createSpritesheetFromGrid', () => {
|
|
|
214
206
|
imageWidth: 32,
|
|
215
207
|
imageHeight: 32,
|
|
216
208
|
});
|
|
217
|
-
expect(sheet.atlas!.
|
|
218
|
-
});
|
|
219
|
-
});
|
|
220
|
-
|
|
221
|
-
describe('createSpritesheetFromTileset', () => {
|
|
222
|
-
it('creates one frame per tile region', () => {
|
|
223
|
-
const tileset = makeTileset(3, 2);
|
|
224
|
-
const sheet = createSpritesheetFromTileset(tileset);
|
|
225
|
-
|
|
226
|
-
expect(sheet.frames).toHaveLength(6);
|
|
227
|
-
});
|
|
228
|
-
|
|
229
|
-
it('assigns region ids to frames in order', () => {
|
|
230
|
-
const tileset = makeTileset(2, 1);
|
|
231
|
-
const sheet = createSpritesheetFromTileset(tileset);
|
|
232
|
-
const regions = tileset.atlas?.regions ?? [];
|
|
233
|
-
|
|
234
|
-
expect(sheet.frames[0].id).toBe(regions[0].id);
|
|
235
|
-
expect(sheet.frames[1].id).toBe(regions[1].id);
|
|
236
|
-
});
|
|
237
|
-
|
|
238
|
-
it('passes the atlas through to the spritesheet', () => {
|
|
239
|
-
const tileset = makeTileset(1, 1);
|
|
240
|
-
const sheet = createSpritesheetFromTileset(tileset);
|
|
241
|
-
|
|
242
|
-
expect(sheet.atlas).toBe(tileset.atlas);
|
|
243
|
-
});
|
|
244
|
-
|
|
245
|
-
it('produces no frames when atlas is null', () => {
|
|
246
|
-
const tileset = createTileset();
|
|
247
|
-
const sheet = createSpritesheetFromTileset(tileset);
|
|
248
|
-
|
|
249
|
-
expect(sheet.frames).toHaveLength(0);
|
|
250
|
-
expect(sheet.atlas).toBeNull();
|
|
251
|
-
});
|
|
252
|
-
|
|
253
|
-
it('starts with no animations', () => {
|
|
254
|
-
const tileset = makeTileset(2, 2);
|
|
255
|
-
const sheet = createSpritesheetFromTileset(tileset);
|
|
256
|
-
|
|
257
|
-
expect(Object.keys(sheet.animations)).toHaveLength(0);
|
|
209
|
+
expect(sheet.atlas!.texture).toBeNull();
|
|
258
210
|
});
|
|
259
211
|
});
|
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
updateSpritesheetPlayer,
|
|
22
22
|
} from './spritesheetPlayer';
|
|
23
23
|
|
|
24
|
-
function makeAnimation(frameIndices: number[], frameDuration: number,
|
|
25
|
-
return createSpritesheetAnimation({ frames: frameIndices, frameDuration,
|
|
24
|
+
function makeAnimation(frameIndices: number[], frameDuration: number, repeatCount = -1) {
|
|
25
|
+
return createSpritesheetAnimation({ frames: frameIndices, frameDuration, repeatCount });
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
function makeSheet(frameCount: number, atlas = null) {
|
|
@@ -362,6 +362,57 @@ describe('seekSpritesheetPlayerToFrame', () => {
|
|
|
362
362
|
expect(player.frameIndex).toBe(2);
|
|
363
363
|
});
|
|
364
364
|
|
|
365
|
+
it('converts a reverse display frame to its virtual start and remains stable on update', () => {
|
|
366
|
+
const player = createSpritesheetPlayer();
|
|
367
|
+
const animation = createSpritesheetAnimation({
|
|
368
|
+
direction: 'reverse',
|
|
369
|
+
frameDuration: 100,
|
|
370
|
+
frames: [0, 1, 2, 3],
|
|
371
|
+
repeatCount: -1,
|
|
372
|
+
});
|
|
373
|
+
playSpritesheetAnimation(player, animation);
|
|
374
|
+
|
|
375
|
+
seekSpritesheetPlayerToFrame(player, 1);
|
|
376
|
+
expect(player.elapsed).toBe(200);
|
|
377
|
+
expect(player.frameIndex).toBe(1);
|
|
378
|
+
updateSpritesheetPlayer(player, 0);
|
|
379
|
+
expect(player.frameIndex).toBe(1);
|
|
380
|
+
});
|
|
381
|
+
|
|
382
|
+
it('uses the first pingpong virtual occurrence and remains stable on update', () => {
|
|
383
|
+
const player = createSpritesheetPlayer();
|
|
384
|
+
const animation = createSpritesheetAnimation({
|
|
385
|
+
direction: 'pingpong',
|
|
386
|
+
frameDuration: 100,
|
|
387
|
+
frames: [0, 1, 2, 3],
|
|
388
|
+
repeatCount: -1,
|
|
389
|
+
});
|
|
390
|
+
playSpritesheetAnimation(player, animation);
|
|
391
|
+
|
|
392
|
+
seekSpritesheetPlayerToFrame(player, 2);
|
|
393
|
+
expect(player.elapsed).toBe(200);
|
|
394
|
+
expect(player.frameIndex).toBe(2);
|
|
395
|
+
updateSpritesheetPlayer(player, 0);
|
|
396
|
+
expect(player.frameIndex).toBe(2);
|
|
397
|
+
});
|
|
398
|
+
|
|
399
|
+
it('converts a pingpong-reverse display frame to its first virtual occurrence', () => {
|
|
400
|
+
const player = createSpritesheetPlayer();
|
|
401
|
+
const animation = createSpritesheetAnimation({
|
|
402
|
+
direction: 'pingpong_reverse',
|
|
403
|
+
frameDuration: 100,
|
|
404
|
+
frames: [0, 1, 2, 3],
|
|
405
|
+
repeatCount: -1,
|
|
406
|
+
});
|
|
407
|
+
playSpritesheetAnimation(player, animation);
|
|
408
|
+
|
|
409
|
+
seekSpritesheetPlayerToFrame(player, 2);
|
|
410
|
+
expect(player.elapsed).toBe(100);
|
|
411
|
+
expect(player.frameIndex).toBe(2);
|
|
412
|
+
updateSpritesheetPlayer(player, 0);
|
|
413
|
+
expect(player.frameIndex).toBe(2);
|
|
414
|
+
});
|
|
415
|
+
|
|
365
416
|
it('clamps negative frame index to 0', () => {
|
|
366
417
|
const player = createSpritesheetPlayer();
|
|
367
418
|
playSpritesheetAnimation(player, makeAnimation([0, 1, 2], 100));
|
|
@@ -465,27 +516,27 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
465
516
|
expect(player.complete).toBe(false);
|
|
466
517
|
});
|
|
467
518
|
|
|
468
|
-
it('clamps to last frame and marks complete
|
|
519
|
+
it('clamps to last frame and marks complete when repeatCount is zero', () => {
|
|
469
520
|
const player = createSpritesheetPlayer();
|
|
470
|
-
const anim = makeAnimation([0, 1, 2, 3], 100,
|
|
521
|
+
const anim = makeAnimation([0, 1, 2, 3], 100, 0);
|
|
471
522
|
playSpritesheetAnimation(player, anim);
|
|
472
523
|
updateSpritesheetPlayer(player, 500);
|
|
473
524
|
expect(player.frameIndex).toBe(3);
|
|
474
525
|
expect(player.complete).toBe(true);
|
|
475
526
|
});
|
|
476
527
|
|
|
477
|
-
it('returns false after
|
|
528
|
+
it('returns false after a zero-repeat animation completes', () => {
|
|
478
529
|
const player = createSpritesheetPlayer();
|
|
479
|
-
const anim = makeAnimation([0, 1], 100,
|
|
530
|
+
const anim = makeAnimation([0, 1], 100, 0);
|
|
480
531
|
playSpritesheetAnimation(player, anim);
|
|
481
532
|
updateSpritesheetPlayer(player, 300);
|
|
482
533
|
expect(updateSpritesheetPlayer(player, 100)).toBe(false);
|
|
483
534
|
});
|
|
484
535
|
|
|
485
|
-
it('advances to queued animation when
|
|
536
|
+
it('advances to queued animation when its repeat budget is exhausted', () => {
|
|
486
537
|
const player = createSpritesheetPlayer();
|
|
487
|
-
const first = makeAnimation([0, 1], 100,
|
|
488
|
-
const second = makeAnimation([2, 3], 100,
|
|
538
|
+
const first = makeAnimation([0, 1], 100, 0);
|
|
539
|
+
const second = makeAnimation([2, 3], 100, 0);
|
|
489
540
|
playSpritesheetAnimation(player, first);
|
|
490
541
|
queueSpritesheetAnimation(player, second);
|
|
491
542
|
updateSpritesheetPlayer(player, 300);
|
|
@@ -497,8 +548,8 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
497
548
|
|
|
498
549
|
it('does not emit onComplete when advancing to a queued animation', () => {
|
|
499
550
|
const player = createSpritesheetPlayer();
|
|
500
|
-
const first = makeAnimation([0], 100,
|
|
501
|
-
const second = makeAnimation([1], 100,
|
|
551
|
+
const first = makeAnimation([0], 100, 0);
|
|
552
|
+
const second = makeAnimation([1], 100, 0);
|
|
502
553
|
let fired = 0;
|
|
503
554
|
connectSignal(player.onComplete, () => fired++);
|
|
504
555
|
playSpritesheetAnimation(player, first);
|
|
@@ -510,9 +561,9 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
510
561
|
|
|
511
562
|
it('plays through multiple queued animations in order', () => {
|
|
512
563
|
const player = createSpritesheetPlayer();
|
|
513
|
-
const first = makeAnimation([0], 100,
|
|
514
|
-
const second = makeAnimation([1], 100,
|
|
515
|
-
const third = makeAnimation([2], 100,
|
|
564
|
+
const first = makeAnimation([0], 100, 0);
|
|
565
|
+
const second = makeAnimation([1], 100, 0);
|
|
566
|
+
const third = makeAnimation([2], 100, 0);
|
|
516
567
|
playSpritesheetAnimation(player, first);
|
|
517
568
|
queueSpritesheetAnimation(player, second);
|
|
518
569
|
queueSpritesheetAnimation(player, third);
|
|
@@ -524,9 +575,9 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
524
575
|
expect(player.complete).toBe(true);
|
|
525
576
|
});
|
|
526
577
|
|
|
527
|
-
it('emits onComplete when
|
|
578
|
+
it('emits onComplete when a zero-repeat animation finishes', () => {
|
|
528
579
|
const player = createSpritesheetPlayer();
|
|
529
|
-
const anim = makeAnimation([0, 1, 2], 100,
|
|
580
|
+
const anim = makeAnimation([0, 1, 2], 100, 0);
|
|
530
581
|
playSpritesheetAnimation(player, anim);
|
|
531
582
|
let fired = 0;
|
|
532
583
|
connectSignal(player.onComplete, () => fired++);
|
|
@@ -536,9 +587,9 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
536
587
|
expect(fired).toBe(1);
|
|
537
588
|
});
|
|
538
589
|
|
|
539
|
-
it('does not emit onComplete for
|
|
590
|
+
it('does not emit onComplete for an infinitely repeating animation', () => {
|
|
540
591
|
const player = createSpritesheetPlayer();
|
|
541
|
-
const anim = makeAnimation([0, 1, 2], 100,
|
|
592
|
+
const anim = makeAnimation([0, 1, 2], 100, -1);
|
|
542
593
|
playSpritesheetAnimation(player, anim);
|
|
543
594
|
let fired = 0;
|
|
544
595
|
connectSignal(player.onComplete, () => fired++);
|
|
@@ -546,9 +597,9 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
546
597
|
expect(fired).toBe(0);
|
|
547
598
|
});
|
|
548
599
|
|
|
549
|
-
it('emits onLoop each time
|
|
600
|
+
it('emits onLoop each time an infinitely repeating animation cycles', () => {
|
|
550
601
|
const player = createSpritesheetPlayer();
|
|
551
|
-
const anim = makeAnimation([0, 1, 2, 3], 100,
|
|
602
|
+
const anim = makeAnimation([0, 1, 2, 3], 100, -1);
|
|
552
603
|
playSpritesheetAnimation(player, anim);
|
|
553
604
|
let loops = 0;
|
|
554
605
|
connectSignal(player.onLoop, () => loops++);
|
|
@@ -558,9 +609,9 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
558
609
|
expect(loops).toBe(2);
|
|
559
610
|
});
|
|
560
611
|
|
|
561
|
-
it('does not emit onLoop
|
|
612
|
+
it('does not emit onLoop when repeatCount is zero', () => {
|
|
562
613
|
const player = createSpritesheetPlayer();
|
|
563
|
-
const anim = makeAnimation([0, 1, 2, 3], 100,
|
|
614
|
+
const anim = makeAnimation([0, 1, 2, 3], 100, 0);
|
|
564
615
|
playSpritesheetAnimation(player, anim);
|
|
565
616
|
let loops = 0;
|
|
566
617
|
connectSignal(player.onLoop, () => loops++);
|
|
@@ -568,10 +619,10 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
568
619
|
expect(loops).toBe(0);
|
|
569
620
|
});
|
|
570
621
|
|
|
571
|
-
it('does not advance queue for
|
|
622
|
+
it('does not advance the queue for an infinitely repeating animation', () => {
|
|
572
623
|
const player = createSpritesheetPlayer();
|
|
573
|
-
const looping = makeAnimation([0, 1], 100,
|
|
574
|
-
const queued = makeAnimation([2, 3], 100,
|
|
624
|
+
const looping = makeAnimation([0, 1], 100, -1);
|
|
625
|
+
const queued = makeAnimation([2, 3], 100, 0);
|
|
575
626
|
playSpritesheetAnimation(player, looping);
|
|
576
627
|
queueSpritesheetAnimation(player, queued);
|
|
577
628
|
updateSpritesheetPlayer(player, 500);
|
|
@@ -579,6 +630,30 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
579
630
|
expect(player.queue).toHaveLength(1);
|
|
580
631
|
});
|
|
581
632
|
|
|
633
|
+
it('plays repeatCount additional cycles before completing', () => {
|
|
634
|
+
const player = createSpritesheetPlayer();
|
|
635
|
+
const animation = makeAnimation([0, 1], 100, 2);
|
|
636
|
+
let completions = 0;
|
|
637
|
+
let loops = 0;
|
|
638
|
+
connectSignal(player.onComplete, () => completions++);
|
|
639
|
+
connectSignal(player.onLoop, () => loops++);
|
|
640
|
+
playSpritesheetAnimation(player, animation);
|
|
641
|
+
|
|
642
|
+
updateSpritesheetPlayer(player, 200);
|
|
643
|
+
expect(player.complete).toBe(false);
|
|
644
|
+
expect(loops).toBe(1);
|
|
645
|
+
updateSpritesheetPlayer(player, 200);
|
|
646
|
+
expect(player.complete).toBe(false);
|
|
647
|
+
expect(loops).toBe(2);
|
|
648
|
+
updateSpritesheetPlayer(player, 200);
|
|
649
|
+
|
|
650
|
+
expect(player.complete).toBe(true);
|
|
651
|
+
expect(player.elapsed).toBe(600);
|
|
652
|
+
expect(player.frameIndex).toBe(1);
|
|
653
|
+
expect(loops).toBe(2);
|
|
654
|
+
expect(completions).toBe(1);
|
|
655
|
+
});
|
|
656
|
+
|
|
582
657
|
it('does not advance elapsed when paused', () => {
|
|
583
658
|
const player = createSpritesheetPlayer();
|
|
584
659
|
const anim = makeAnimation([0, 1, 2], 100);
|
|
@@ -615,7 +690,7 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
615
690
|
direction: 'reverse',
|
|
616
691
|
frameDuration: 100,
|
|
617
692
|
frames: [0, 1, 2, 3],
|
|
618
|
-
|
|
693
|
+
repeatCount: -1,
|
|
619
694
|
});
|
|
620
695
|
playSpritesheetAnimation(player, anim);
|
|
621
696
|
updateSpritesheetPlayer(player, 0);
|
|
@@ -624,16 +699,33 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
624
699
|
expect(player.frameIndex).toBe(2);
|
|
625
700
|
});
|
|
626
701
|
|
|
702
|
+
it('uses the displayed reverse frame duration rather than its mirrored index', () => {
|
|
703
|
+
const player = createSpritesheetPlayer();
|
|
704
|
+
const animation = createSpritesheetAnimation({
|
|
705
|
+
direction: 'reverse',
|
|
706
|
+
frameDuration: 100,
|
|
707
|
+
frameDurations: [50, 100, 200],
|
|
708
|
+
frames: [0, 1, 2],
|
|
709
|
+
repeatCount: -1,
|
|
710
|
+
});
|
|
711
|
+
playSpritesheetAnimation(player, animation);
|
|
712
|
+
|
|
713
|
+
updateSpritesheetPlayer(player, 199);
|
|
714
|
+
expect(player.frameIndex).toBe(2);
|
|
715
|
+
updateSpritesheetPlayer(player, 1);
|
|
716
|
+
expect(player.frameIndex).toBe(1);
|
|
717
|
+
});
|
|
718
|
+
|
|
627
719
|
it('plays pingpong direction forward then backward', () => {
|
|
628
720
|
const player = createSpritesheetPlayer();
|
|
629
721
|
const anim = createSpritesheetAnimation({
|
|
630
722
|
direction: 'pingpong',
|
|
631
723
|
frameDuration: 100,
|
|
632
724
|
frames: [0, 1, 2],
|
|
633
|
-
|
|
725
|
+
repeatCount: -1,
|
|
634
726
|
});
|
|
635
727
|
playSpritesheetAnimation(player, anim);
|
|
636
|
-
//
|
|
728
|
+
// 4 virtual frames (0,1,2,1 then wraps) at 100ms each = 400ms per cycle.
|
|
637
729
|
updateSpritesheetPlayer(player, 0);
|
|
638
730
|
expect(player.frameIndex).toBe(0);
|
|
639
731
|
updateSpritesheetPlayer(player, 100);
|
|
@@ -644,13 +736,30 @@ describe('updateSpritesheetPlayer', () => {
|
|
|
644
736
|
expect(player.frameIndex).toBe(1);
|
|
645
737
|
});
|
|
646
738
|
|
|
739
|
+
it('uses direction-aware durations for pingpong-reverse playback', () => {
|
|
740
|
+
const player = createSpritesheetPlayer();
|
|
741
|
+
const animation = createSpritesheetAnimation({
|
|
742
|
+
direction: 'pingpong_reverse',
|
|
743
|
+
frameDuration: 100,
|
|
744
|
+
frameDurations: [50, 100, 200],
|
|
745
|
+
frames: [0, 1, 2],
|
|
746
|
+
repeatCount: -1,
|
|
747
|
+
});
|
|
748
|
+
playSpritesheetAnimation(player, animation);
|
|
749
|
+
|
|
750
|
+
updateSpritesheetPlayer(player, 199);
|
|
751
|
+
expect(player.frameIndex).toBe(2);
|
|
752
|
+
updateSpritesheetPlayer(player, 1);
|
|
753
|
+
expect(player.frameIndex).toBe(1);
|
|
754
|
+
});
|
|
755
|
+
|
|
647
756
|
it('uses per-frame durations when frameDurations is set', () => {
|
|
648
757
|
const player = createSpritesheetPlayer();
|
|
649
758
|
const anim = createSpritesheetAnimation({
|
|
650
759
|
frameDuration: 100,
|
|
651
760
|
frameDurations: [50, 200, 150],
|
|
652
761
|
frames: [0, 1, 2],
|
|
653
|
-
|
|
762
|
+
repeatCount: -1,
|
|
654
763
|
});
|
|
655
764
|
playSpritesheetAnimation(player, anim);
|
|
656
765
|
updateSpritesheetPlayer(player, 50);
|