@flighthq/spritesheet-formats 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/dist/asepriteParse.d.ts +18 -0
- package/dist/asepriteParse.d.ts.map +1 -0
- package/dist/asepriteParse.js +87 -0
- package/dist/asepriteParse.js.map +1 -0
- package/dist/asepriteSchema.d.ts +64 -0
- package/dist/asepriteSchema.d.ts.map +1 -0
- package/dist/asepriteSchema.js +6 -0
- package/dist/asepriteSchema.js.map +1 -0
- package/dist/asepriteSerialize.d.ts +14 -0
- package/dist/asepriteSerialize.d.ts.map +1 -0
- package/dist/asepriteSerialize.js +86 -0
- package/dist/asepriteSerialize.js.map +1 -0
- package/dist/cocosPlistParse.d.ts +15 -0
- package/dist/cocosPlistParse.d.ts.map +1 -0
- package/dist/cocosPlistParse.js +157 -0
- package/dist/cocosPlistParse.js.map +1 -0
- package/dist/cocosPlistSchema.d.ts +31 -0
- package/dist/cocosPlistSchema.d.ts.map +1 -0
- package/dist/cocosPlistSchema.js +6 -0
- package/dist/cocosPlistSchema.js.map +1 -0
- package/dist/cocosPlistSerialize.d.ts +8 -0
- package/dist/cocosPlistSerialize.d.ts.map +1 -0
- package/dist/cocosPlistSerialize.js +86 -0
- package/dist/cocosPlistSerialize.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/libgdxAtlasParse.d.ts +13 -0
- package/dist/libgdxAtlasParse.d.ts.map +1 -0
- package/dist/libgdxAtlasParse.js +209 -0
- package/dist/libgdxAtlasParse.js.map +1 -0
- package/dist/libgdxAtlasSchema.d.ts +38 -0
- package/dist/libgdxAtlasSchema.d.ts.map +1 -0
- package/dist/libgdxAtlasSchema.js +6 -0
- package/dist/libgdxAtlasSchema.js.map +1 -0
- package/dist/spritesheetDetect.d.ts +41 -0
- package/dist/spritesheetDetect.d.ts.map +1 -0
- package/dist/spritesheetDetect.js +101 -0
- package/dist/spritesheetDetect.js.map +1 -0
- package/dist/starlingParse.d.ts +20 -0
- package/dist/starlingParse.d.ts.map +1 -0
- package/dist/starlingParse.js +138 -0
- package/dist/starlingParse.js.map +1 -0
- package/dist/starlingSchema.d.ts +32 -0
- package/dist/starlingSchema.d.ts.map +1 -0
- package/dist/starlingSchema.js +6 -0
- package/dist/starlingSchema.js.map +1 -0
- package/dist/starlingSerialize.d.ts +8 -0
- package/dist/starlingSerialize.d.ts.map +1 -0
- package/dist/starlingSerialize.js +67 -0
- package/dist/starlingSerialize.js.map +1 -0
- package/dist/texturePackerParse.d.ts +15 -0
- package/dist/texturePackerParse.d.ts.map +1 -0
- package/dist/texturePackerParse.js +70 -0
- package/dist/texturePackerParse.js.map +1 -0
- package/dist/texturePackerSchema.d.ts +52 -0
- package/dist/texturePackerSchema.d.ts.map +1 -0
- package/dist/texturePackerSchema.js +5 -0
- package/dist/texturePackerSchema.js.map +1 -0
- package/dist/texturePackerSerialize.d.ts +14 -0
- package/dist/texturePackerSerialize.d.ts.map +1 -0
- package/dist/texturePackerSerialize.js +74 -0
- package/dist/texturePackerSerialize.js.map +1 -0
- package/package.json +41 -0
- package/src/asepriteParse.test.ts +235 -0
- package/src/asepriteSerialize.test.ts +218 -0
- package/src/cocosPlistParse.test.ts +131 -0
- package/src/cocosPlistSerialize.test.ts +56 -0
- package/src/libgdxAtlasParse.test.ts +100 -0
- package/src/spritesheetDetect.test.ts +217 -0
- package/src/starlingParse.test.ts +176 -0
- package/src/starlingSerialize.test.ts +117 -0
- package/src/texturePackerParse.test.ts +237 -0
- package/src/texturePackerSerialize.test.ts +200 -0
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { createSpritesheetAnimationData, createSpritesheetData, createSpritesheetFrameData, } from '@flighthq/spritesheet';
|
|
2
|
+
import { createTextureAtlas } from '@flighthq/textureatlas';
|
|
3
|
+
import { parseTextureAtlasStarlingXml } from '@flighthq/textureatlas-formats';
|
|
4
|
+
// ─── Minimal XML attribute parser ────────────────────────────────────────────
|
|
5
|
+
function parseAttrs(attrs) {
|
|
6
|
+
const result = {};
|
|
7
|
+
const RE = /(\w+)\s*=\s*"([^"]*)"/g;
|
|
8
|
+
let m;
|
|
9
|
+
while ((m = RE.exec(attrs)) !== null) {
|
|
10
|
+
result[m[1]] = m[2];
|
|
11
|
+
}
|
|
12
|
+
return result;
|
|
13
|
+
}
|
|
14
|
+
function parseStarlingXml(xml) {
|
|
15
|
+
const atlasRE = /<TextureAtlas([^>]*)>/;
|
|
16
|
+
const atlasMatch = atlasRE.exec(xml);
|
|
17
|
+
const atlasAttrs = atlasMatch ? parseAttrs(atlasMatch[1]) : {};
|
|
18
|
+
const imagePath = atlasAttrs['imagePath'] ?? '';
|
|
19
|
+
const subTextures = [];
|
|
20
|
+
const stRE = /<SubTexture([^/]*)\/?>/g;
|
|
21
|
+
let m;
|
|
22
|
+
while ((m = stRE.exec(xml)) !== null) {
|
|
23
|
+
const a = parseAttrs(m[1]);
|
|
24
|
+
if (!a['name'])
|
|
25
|
+
continue;
|
|
26
|
+
const st = {
|
|
27
|
+
height: parseFloat(a['height'] ?? '0'),
|
|
28
|
+
name: a['name'],
|
|
29
|
+
width: parseFloat(a['width'] ?? '0'),
|
|
30
|
+
x: parseFloat(a['x'] ?? '0'),
|
|
31
|
+
y: parseFloat(a['y'] ?? '0'),
|
|
32
|
+
};
|
|
33
|
+
if (a['frameX'] !== undefined)
|
|
34
|
+
st.frameX = parseFloat(a['frameX']);
|
|
35
|
+
if (a['frameY'] !== undefined)
|
|
36
|
+
st.frameY = parseFloat(a['frameY']);
|
|
37
|
+
if (a['frameWidth'] !== undefined)
|
|
38
|
+
st.frameWidth = parseFloat(a['frameWidth']);
|
|
39
|
+
if (a['frameHeight'] !== undefined)
|
|
40
|
+
st.frameHeight = parseFloat(a['frameHeight']);
|
|
41
|
+
if (a['pivotX'] !== undefined)
|
|
42
|
+
st.pivotX = parseFloat(a['pivotX']);
|
|
43
|
+
if (a['pivotY'] !== undefined)
|
|
44
|
+
st.pivotY = parseFloat(a['pivotY']);
|
|
45
|
+
if (a['rotated'] !== undefined)
|
|
46
|
+
st.rotated = a['rotated'] === 'true';
|
|
47
|
+
subTextures.push(st);
|
|
48
|
+
}
|
|
49
|
+
return { imagePath, subTextures };
|
|
50
|
+
}
|
|
51
|
+
// ─── Internal helpers ────────────────────────────────────────────────────────
|
|
52
|
+
// Maps an atlas region (geometry owned by @flighthq/textureatlas-formats — incl. Starling's negated
|
|
53
|
+
// frameX/Y offsets and trim handling) to a spritesheet frame. Starling pivots are authored in source
|
|
54
|
+
// pixels; the spritesheet layer normalizes them to the 0..1 range, so re-divide the atlas's raw pivot
|
|
55
|
+
// by the source size here.
|
|
56
|
+
function frameFromRegion(region) {
|
|
57
|
+
const sourceWidth = region.originalWidth ?? region.width;
|
|
58
|
+
const sourceHeight = region.originalHeight ?? region.height;
|
|
59
|
+
return createSpritesheetFrameData({
|
|
60
|
+
height: region.height,
|
|
61
|
+
name: region.name ?? '',
|
|
62
|
+
offsetX: region.sourceX,
|
|
63
|
+
offsetY: region.sourceY,
|
|
64
|
+
pivotX: region.pivotX !== null && sourceWidth > 0 ? region.pivotX / sourceWidth : null,
|
|
65
|
+
pivotY: region.pivotY !== null && sourceHeight > 0 ? region.pivotY / sourceHeight : null,
|
|
66
|
+
rotated: region.rotated,
|
|
67
|
+
sourceHeight,
|
|
68
|
+
sourceWidth,
|
|
69
|
+
width: region.width,
|
|
70
|
+
x: region.x,
|
|
71
|
+
y: region.y,
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
/** Infer animations from frame names using the `baseName_NNN` convention.
|
|
75
|
+
* Frames whose names do not end in a numeric suffix are left as standalone frames. */
|
|
76
|
+
function inferAnimations(frameNames, frameDuration) {
|
|
77
|
+
const groups = new Map();
|
|
78
|
+
for (const name of frameNames) {
|
|
79
|
+
const noExt = name.replace(/\.\w+$/, '');
|
|
80
|
+
const match = noExt.match(/^(.*?)_?(\d+)$/);
|
|
81
|
+
if (!match)
|
|
82
|
+
continue;
|
|
83
|
+
const [, base, numStr] = match;
|
|
84
|
+
const index = parseInt(numStr, 10);
|
|
85
|
+
const bucket = groups.get(base);
|
|
86
|
+
if (bucket)
|
|
87
|
+
bucket.push({ index, name });
|
|
88
|
+
else
|
|
89
|
+
groups.set(base, [{ index, name }]);
|
|
90
|
+
}
|
|
91
|
+
const animations = [];
|
|
92
|
+
for (const [base, entries] of groups) {
|
|
93
|
+
if (entries.length < 2)
|
|
94
|
+
continue;
|
|
95
|
+
entries.sort((a, b) => a.index - b.index);
|
|
96
|
+
animations.push(createSpritesheetAnimationData({
|
|
97
|
+
frameDuration,
|
|
98
|
+
frameNames: entries.map((e) => e.name),
|
|
99
|
+
loop: true,
|
|
100
|
+
name: base,
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
return animations;
|
|
104
|
+
}
|
|
105
|
+
// Region geometry is delegated to @flighthq/textureatlas-formats; this layer keeps the imagePath and
|
|
106
|
+
// the inferred `baseName_NNN` animations. `regions` come from the atlas parser over the same XML.
|
|
107
|
+
function documentToData(doc, regions, frameDuration) {
|
|
108
|
+
const frames = regions.map(frameFromRegion);
|
|
109
|
+
const frameNames = frames.map((f) => f.name);
|
|
110
|
+
const animations = inferAnimations(frameNames, frameDuration);
|
|
111
|
+
return createSpritesheetData({
|
|
112
|
+
animations,
|
|
113
|
+
frames,
|
|
114
|
+
imageFile: doc.imagePath,
|
|
115
|
+
imageHeight: 0,
|
|
116
|
+
imageWidth: 0,
|
|
117
|
+
scale: 1,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
function regionsFromXml(xml) {
|
|
121
|
+
return parseTextureAtlasStarlingXml(xml, createTextureAtlas()).regions;
|
|
122
|
+
}
|
|
123
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
124
|
+
/** Parse a Starling / Sparrow XML atlas string directly to a SpritesheetData.
|
|
125
|
+
*
|
|
126
|
+
* Single-pass: no intermediate document object is allocated.
|
|
127
|
+
* Animations are inferred from the standard `baseName_NNN` frame-naming convention.
|
|
128
|
+
* Use `parseStarlingSpritesheetDocument` instead when you need round-trip serialisation. */
|
|
129
|
+
export function parseStarlingSpritesheet(xml, options) {
|
|
130
|
+
return documentToData(parseStarlingXml(xml), regionsFromXml(xml), options?.frameDuration ?? 100);
|
|
131
|
+
}
|
|
132
|
+
/** Parse a Starling / Sparrow XML atlas string and preserve the full document
|
|
133
|
+
* for round-trip serialisation via `serializeStarlingSpritesheet`. */
|
|
134
|
+
export function parseStarlingSpritesheetDocument(xml, options) {
|
|
135
|
+
const document = parseStarlingXml(xml);
|
|
136
|
+
return { data: documentToData(document, regionsFromXml(xml), options?.frameDuration ?? 100), document };
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=starlingParse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starlingParse.js","sourceRoot":"","sources":["../src/starlingParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface StarlingSubTexture {
|
|
2
|
+
/** Original untrimmed frame height (present when frame is trimmed). */
|
|
3
|
+
frameHeight?: number;
|
|
4
|
+
/** Original untrimmed frame width (present when frame is trimmed). */
|
|
5
|
+
frameWidth?: number;
|
|
6
|
+
/** Left edge of the visible area within the original frame; typically negative. */
|
|
7
|
+
frameX?: number;
|
|
8
|
+
/** Top edge of the visible area within the original frame; typically negative. */
|
|
9
|
+
frameY?: number;
|
|
10
|
+
/** Height of the atlas rectangle. */
|
|
11
|
+
height: number;
|
|
12
|
+
/** Frame identifier used to look up the sub-texture at runtime. */
|
|
13
|
+
name: string;
|
|
14
|
+
/** Absolute X pivot position in the original frame coordinate space. */
|
|
15
|
+
pivotX?: number;
|
|
16
|
+
/** Absolute Y pivot position in the original frame coordinate space. */
|
|
17
|
+
pivotY?: number;
|
|
18
|
+
/** Whether the frame is rotated 90° CW inside the atlas. */
|
|
19
|
+
rotated?: boolean;
|
|
20
|
+
/** Width of the atlas rectangle. */
|
|
21
|
+
width: number;
|
|
22
|
+
/** Atlas X offset of the rectangle. */
|
|
23
|
+
x: number;
|
|
24
|
+
/** Atlas Y offset of the rectangle. */
|
|
25
|
+
y: number;
|
|
26
|
+
}
|
|
27
|
+
export interface StarlingDocument {
|
|
28
|
+
/** Relative path to the atlas image file, value of the `imagePath` attribute. */
|
|
29
|
+
imagePath: string;
|
|
30
|
+
subTextures: StarlingSubTexture[];
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=starlingSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starlingSchema.d.ts","sourceRoot":"","sources":["../src/starlingSchema.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,kFAAkF;IAClF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;IACV,uCAAuC;IACvC,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,gBAAgB;IAC/B,iFAAiF;IACjF,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// Starling / Sparrow spritesheet XML schema — field names as they appear in the file.
|
|
2
|
+
// Reference: https://doc.starling-framework.org/current/starling/textures/TextureAtlas.html
|
|
3
|
+
// This is the same format used by OpenFL's AssetType.IMAGE texture atlas support and
|
|
4
|
+
// is commonly exported by Texture Packer (Starling / Sparrow XML preset).
|
|
5
|
+
export {};
|
|
6
|
+
//# sourceMappingURL=starlingSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starlingSchema.js","sourceRoot":"","sources":["../src/starlingSchema.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,4FAA4F;AAC5F,qFAAqF;AACrF,0EAA0E"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SpritesheetData } from '@flighthq/spritesheet';
|
|
2
|
+
import type { StarlingDocument } from './starlingSchema';
|
|
3
|
+
/** Serialise a SpritesheetData to a Starling / Sparrow XML atlas string.
|
|
4
|
+
*
|
|
5
|
+
* Pass the `document` returned by `parseStarlingSpritesheetDocument` to preserve any fields that
|
|
6
|
+
* don't round-trip through the data (pivot values stored in the document). */
|
|
7
|
+
export declare function serializeStarlingSpritesheet(data: Readonly<SpritesheetData>, existing?: Partial<StarlingDocument>): string;
|
|
8
|
+
//# sourceMappingURL=starlingSerialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starlingSerialize.d.ts","sourceRoot":"","sources":["../src/starlingSerialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAAE,gBAAgB,EAAsB,MAAM,kBAAkB,CAAC;AAsD7E;;;+EAG+E;AAC/E,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GACnC,MAAM,CAMR"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// ─── Internal helpers ────────────────────────────────────────────────────────
|
|
2
|
+
function frameToSubTexture(frame) {
|
|
3
|
+
const st = {
|
|
4
|
+
height: frame.height,
|
|
5
|
+
name: frame.name,
|
|
6
|
+
width: frame.width,
|
|
7
|
+
x: frame.x,
|
|
8
|
+
y: frame.y,
|
|
9
|
+
};
|
|
10
|
+
if (frame.offsetX !== 0)
|
|
11
|
+
st.frameX = -frame.offsetX;
|
|
12
|
+
if (frame.offsetY !== 0)
|
|
13
|
+
st.frameY = -frame.offsetY;
|
|
14
|
+
if (frame.sourceWidth !== frame.width)
|
|
15
|
+
st.frameWidth = frame.sourceWidth;
|
|
16
|
+
if (frame.sourceHeight !== frame.height)
|
|
17
|
+
st.frameHeight = frame.sourceHeight;
|
|
18
|
+
if (frame.pivotX !== null && frame.sourceWidth > 0) {
|
|
19
|
+
st.pivotX = frame.pivotX * frame.sourceWidth;
|
|
20
|
+
}
|
|
21
|
+
if (frame.pivotY !== null && frame.sourceHeight > 0) {
|
|
22
|
+
st.pivotY = frame.pivotY * frame.sourceHeight;
|
|
23
|
+
}
|
|
24
|
+
if (frame.rotated)
|
|
25
|
+
st.rotated = true;
|
|
26
|
+
return st;
|
|
27
|
+
}
|
|
28
|
+
function subTextureToAttr(st) {
|
|
29
|
+
const parts = [`name="${st.name}"`, `x="${st.x}"`, `y="${st.y}"`];
|
|
30
|
+
parts.push(`width="${st.width}"`, `height="${st.height}"`);
|
|
31
|
+
if (st.frameX !== undefined)
|
|
32
|
+
parts.push(`frameX="${st.frameX}"`);
|
|
33
|
+
if (st.frameY !== undefined)
|
|
34
|
+
parts.push(`frameY="${st.frameY}"`);
|
|
35
|
+
if (st.frameWidth !== undefined)
|
|
36
|
+
parts.push(`frameWidth="${st.frameWidth}"`);
|
|
37
|
+
if (st.frameHeight !== undefined)
|
|
38
|
+
parts.push(`frameHeight="${st.frameHeight}"`);
|
|
39
|
+
if (st.pivotX !== undefined)
|
|
40
|
+
parts.push(`pivotX="${st.pivotX}"`);
|
|
41
|
+
if (st.pivotY !== undefined)
|
|
42
|
+
parts.push(`pivotY="${st.pivotY}"`);
|
|
43
|
+
if (st.rotated)
|
|
44
|
+
parts.push(`rotated="true"`);
|
|
45
|
+
return parts.join(' ');
|
|
46
|
+
}
|
|
47
|
+
function documentToXml(doc) {
|
|
48
|
+
const lines = ['<?xml version="1.0" encoding="UTF-8"?>', `<TextureAtlas imagePath="${doc.imagePath}">`];
|
|
49
|
+
for (const st of doc.subTextures) {
|
|
50
|
+
lines.push(`\t<SubTexture ${subTextureToAttr(st)}/>`);
|
|
51
|
+
}
|
|
52
|
+
lines.push('</TextureAtlas>');
|
|
53
|
+
return lines.join('\n');
|
|
54
|
+
}
|
|
55
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
56
|
+
/** Serialise a SpritesheetData to a Starling / Sparrow XML atlas string.
|
|
57
|
+
*
|
|
58
|
+
* Pass the `document` returned by `parseStarlingSpritesheetDocument` to preserve any fields that
|
|
59
|
+
* don't round-trip through the data (pivot values stored in the document). */
|
|
60
|
+
export function serializeStarlingSpritesheet(data, existing) {
|
|
61
|
+
const doc = {
|
|
62
|
+
imagePath: data.imageFile || existing?.imagePath || '',
|
|
63
|
+
subTextures: data.frames.map(frameToSubTexture),
|
|
64
|
+
};
|
|
65
|
+
return documentToXml(doc);
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=starlingSerialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starlingSerialize.js","sourceRoot":"","sources":["../src/starlingSerialize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SpritesheetData } from '@flighthq/spritesheet';
|
|
2
|
+
import type { TexturePackerDocument } from './texturePackerSchema';
|
|
3
|
+
export interface TexturePackerParsed {
|
|
4
|
+
data: SpritesheetData;
|
|
5
|
+
document: TexturePackerDocument;
|
|
6
|
+
}
|
|
7
|
+
/** Parse a Texture Packer JSON string directly to a SpritesheetData.
|
|
8
|
+
*
|
|
9
|
+
* Single-pass: no intermediate document object is allocated.
|
|
10
|
+
* Use `parseTexturePackerSpritesheetDocument` instead when you need round-trip serialisation. */
|
|
11
|
+
export declare function parseTexturePackerSpritesheet(json: string): SpritesheetData;
|
|
12
|
+
/** Parse a Texture Packer JSON string and preserve the full document for
|
|
13
|
+
* round-trip serialisation via `serializeTexturePackerSpritesheet`. */
|
|
14
|
+
export declare function parseTexturePackerSpritesheetDocument(json: string): TexturePackerParsed;
|
|
15
|
+
//# sourceMappingURL=texturePackerParse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texturePackerParse.d.ts","sourceRoot":"","sources":["../src/texturePackerParse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,eAAe,EAAwB,MAAM,uBAAuB,CAAC;AAU7G,OAAO,KAAK,EAAE,qBAAqB,EAA4C,MAAM,uBAAuB,CAAC;AAE7G,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,eAAe,CAAC;IACtB,QAAQ,EAAE,qBAAqB,CAAC;CACjC;AAgED;;;kGAGkG;AAClG,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAE3E;AAED;wEACwE;AACxE,wBAAgB,qCAAqC,CAAC,IAAI,EAAE,MAAM,GAAG,mBAAmB,CAGvF"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { createSpritesheetAnimationData, createSpritesheetData, createSpritesheetFrameData, } from '@flighthq/spritesheet';
|
|
2
|
+
import { createTextureAtlas } from '@flighthq/textureatlas';
|
|
3
|
+
import { parseTextureAtlasPackerDocument } from '@flighthq/textureatlas-formats';
|
|
4
|
+
// ─── Internal helpers ────────────────────────────────────────────────────────
|
|
5
|
+
// Maps an atlas region (geometry owned by @flighthq/textureatlas-formats — the single source of truth
|
|
6
|
+
// for the region rect, rotation, and trim handling) to a spritesheet frame. This package adds only the
|
|
7
|
+
// animation/frame metadata on top. The untrimmed source size falls back to the region rect, because the
|
|
8
|
+
// atlas parser leaves originalW/H null when a frame is not trimmed (where the source equals the frame).
|
|
9
|
+
function frameFromRegion(region) {
|
|
10
|
+
return createSpritesheetFrameData({
|
|
11
|
+
height: region.height,
|
|
12
|
+
name: region.name ?? '',
|
|
13
|
+
offsetX: region.sourceX,
|
|
14
|
+
offsetY: region.sourceY,
|
|
15
|
+
pivotX: region.pivotX,
|
|
16
|
+
pivotY: region.pivotY,
|
|
17
|
+
rotated: region.rotated,
|
|
18
|
+
sourceHeight: region.originalHeight ?? region.height,
|
|
19
|
+
sourceWidth: region.originalWidth ?? region.width,
|
|
20
|
+
width: region.width,
|
|
21
|
+
x: region.x,
|
|
22
|
+
y: region.y,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function animationsFromFrameTags(tags, frameNames) {
|
|
26
|
+
return tags.map((tag) => createSpritesheetAnimationData({
|
|
27
|
+
direction: tag.direction ?? 'forward',
|
|
28
|
+
frameDuration: 100,
|
|
29
|
+
frameNames: frameNames.slice(tag.from, tag.to + 1),
|
|
30
|
+
loop: true,
|
|
31
|
+
name: tag.name,
|
|
32
|
+
}));
|
|
33
|
+
}
|
|
34
|
+
function metaScale(meta) {
|
|
35
|
+
if (typeof meta.scale === 'string')
|
|
36
|
+
return parseFloat(meta.scale) || 1;
|
|
37
|
+
return meta.scale;
|
|
38
|
+
}
|
|
39
|
+
function documentToData(doc) {
|
|
40
|
+
// Delegate region geometry to the atlas-formats parser (the TexturePacker document shapes are shared),
|
|
41
|
+
// then layer the spritesheet frame/animation metadata on top — no independent re-parse of the frames.
|
|
42
|
+
const regions = parseTextureAtlasPackerDocument(doc, createTextureAtlas()).regions;
|
|
43
|
+
const frames = regions.map(frameFromRegion);
|
|
44
|
+
const frameNames = regions.map((region) => region.name ?? '');
|
|
45
|
+
const { meta } = doc;
|
|
46
|
+
const animations = meta.frameTags ? animationsFromFrameTags(meta.frameTags, frameNames) : [];
|
|
47
|
+
return createSpritesheetData({
|
|
48
|
+
animations,
|
|
49
|
+
frames,
|
|
50
|
+
imageFile: meta.image,
|
|
51
|
+
imageHeight: meta.size.h,
|
|
52
|
+
imageWidth: meta.size.w,
|
|
53
|
+
scale: metaScale(meta),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
57
|
+
/** Parse a Texture Packer JSON string directly to a SpritesheetData.
|
|
58
|
+
*
|
|
59
|
+
* Single-pass: no intermediate document object is allocated.
|
|
60
|
+
* Use `parseTexturePackerSpritesheetDocument` instead when you need round-trip serialisation. */
|
|
61
|
+
export function parseTexturePackerSpritesheet(json) {
|
|
62
|
+
return documentToData(JSON.parse(json));
|
|
63
|
+
}
|
|
64
|
+
/** Parse a Texture Packer JSON string and preserve the full document for
|
|
65
|
+
* round-trip serialisation via `serializeTexturePackerSpritesheet`. */
|
|
66
|
+
export function parseTexturePackerSpritesheetDocument(json) {
|
|
67
|
+
const document = JSON.parse(json);
|
|
68
|
+
return { data: documentToData(document), document };
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=texturePackerParse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texturePackerParse.js","sourceRoot":"","sources":["../src/texturePackerParse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
export interface TexturePackerRect {
|
|
2
|
+
h: number;
|
|
3
|
+
w: number;
|
|
4
|
+
x: number;
|
|
5
|
+
y: number;
|
|
6
|
+
}
|
|
7
|
+
export interface TexturePackerSize {
|
|
8
|
+
h: number;
|
|
9
|
+
w: number;
|
|
10
|
+
}
|
|
11
|
+
export interface TexturePackerPivot {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
}
|
|
15
|
+
export interface TexturePackerFrameTag {
|
|
16
|
+
direction: 'forward' | 'pingpong' | 'pingpong_reverse' | 'reverse';
|
|
17
|
+
from: number;
|
|
18
|
+
name: string;
|
|
19
|
+
to: number;
|
|
20
|
+
}
|
|
21
|
+
export interface TexturePackerHashFrame {
|
|
22
|
+
frame: TexturePackerRect;
|
|
23
|
+
pivot?: TexturePackerPivot;
|
|
24
|
+
rotated: boolean;
|
|
25
|
+
sourceSize: TexturePackerSize;
|
|
26
|
+
spriteSourceSize: TexturePackerRect;
|
|
27
|
+
trimmed: boolean;
|
|
28
|
+
}
|
|
29
|
+
export interface TexturePackerArrayFrame extends TexturePackerHashFrame {
|
|
30
|
+
filename: string;
|
|
31
|
+
}
|
|
32
|
+
export interface TexturePackerMeta {
|
|
33
|
+
app: string;
|
|
34
|
+
format: string;
|
|
35
|
+
frameTags?: TexturePackerFrameTag[];
|
|
36
|
+
image: string;
|
|
37
|
+
scale: number | string;
|
|
38
|
+
size: TexturePackerSize;
|
|
39
|
+
version: string;
|
|
40
|
+
}
|
|
41
|
+
/** Hash-keyed variant: `frames` is a plain object whose keys are frame names. */
|
|
42
|
+
export interface TexturePackerHashDocument {
|
|
43
|
+
frames: Record<string, TexturePackerHashFrame>;
|
|
44
|
+
meta: TexturePackerMeta;
|
|
45
|
+
}
|
|
46
|
+
/** Array variant: `frames` is an array and each entry carries a `filename` field. */
|
|
47
|
+
export interface TexturePackerArrayDocument {
|
|
48
|
+
frames: TexturePackerArrayFrame[];
|
|
49
|
+
meta: TexturePackerMeta;
|
|
50
|
+
}
|
|
51
|
+
export type TexturePackerDocument = TexturePackerArrayDocument | TexturePackerHashDocument;
|
|
52
|
+
//# sourceMappingURL=texturePackerSchema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texturePackerSchema.d.ts","sourceRoot":"","sources":["../src/texturePackerSchema.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,kBAAkB;IACjC,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,SAAS,GAAG,UAAU,GAAG,kBAAkB,GAAG,SAAS,CAAC;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,kBAAkB,CAAC;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,gBAAgB,EAAE,iBAAiB,CAAC;IACpC,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,uBAAwB,SAAQ,sBAAsB;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,iFAAiF;AACjF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IAC/C,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,qFAAqF;AACrF,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,IAAI,EAAE,iBAAiB,CAAC;CACzB;AAED,MAAM,MAAM,qBAAqB,GAAG,0BAA0B,GAAG,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
// Texture Packer JSON schema — field names as they appear in the exported file.
|
|
2
|
+
// Reference: https://www.codeandweb.com/texturepacker/documentation/texture-settings
|
|
3
|
+
// Supports both the Hash (dict-keyed frames) and Array (array of frames with filename) variants.
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=texturePackerSchema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texturePackerSchema.js","sourceRoot":"","sources":["../src/texturePackerSchema.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,qFAAqF;AACrF,iGAAiG"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { SpritesheetData } from '@flighthq/spritesheet';
|
|
2
|
+
import type { TexturePackerDocument } from './texturePackerSchema';
|
|
3
|
+
export interface TexturePackerSerializeOptions {
|
|
4
|
+
/** Override the output format variant. Defaults to the variant of `existing`, or `'hash'`. */
|
|
5
|
+
variant?: 'array' | 'hash';
|
|
6
|
+
}
|
|
7
|
+
/** Serialise a SpritesheetData to a Texture Packer JSON string.
|
|
8
|
+
*
|
|
9
|
+
* Pass the `document` returned by `parseTexturePackerSpritesheetDocument` to preserve any fields
|
|
10
|
+
* that don't round-trip through the data (app name, format string, scale).
|
|
11
|
+
* The output variant (hash vs array) is inferred from the existing document or
|
|
12
|
+
* overridden via `options.variant`. */
|
|
13
|
+
export declare function serializeTexturePackerSpritesheet(data: Readonly<SpritesheetData>, existing?: Partial<TexturePackerDocument>, options?: TexturePackerSerializeOptions): string;
|
|
14
|
+
//# sourceMappingURL=texturePackerSerialize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texturePackerSerialize.d.ts","sourceRoot":"","sources":["../src/texturePackerSerialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAE7D,OAAO,KAAK,EAGV,qBAAqB,EAItB,MAAM,uBAAuB,CAAC;AAE/B,MAAM,WAAW,6BAA6B;IAC5C,8FAA8F;IAC9F,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC5B;AAwED;;;;;wCAKwC;AACxC,wBAAgB,iCAAiC,CAC/C,IAAI,EAAE,QAAQ,CAAC,eAAe,CAAC,EAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,EACzC,OAAO,CAAC,EAAE,6BAA6B,GACtC,MAAM,CAWR"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
// ─── Internal helpers ────────────────────────────────────────────────────────
|
|
2
|
+
function dataToMeta(data, existing) {
|
|
3
|
+
return {
|
|
4
|
+
app: existing.app ?? 'https://www.codeandweb.com/texturepacker',
|
|
5
|
+
format: existing.format ?? 'RGBA8888',
|
|
6
|
+
frameTags: data.animations.length
|
|
7
|
+
? data.animations.map((anim) => {
|
|
8
|
+
const firstIdx = data.frames.findIndex((f) => f.name === anim.frameNames[0]);
|
|
9
|
+
const lastIdx = data.frames.findIndex((f) => f.name === anim.frameNames[anim.frameNames.length - 1]);
|
|
10
|
+
return {
|
|
11
|
+
direction: anim.direction,
|
|
12
|
+
from: firstIdx >= 0 ? firstIdx : 0,
|
|
13
|
+
name: anim.name,
|
|
14
|
+
to: lastIdx >= 0 ? lastIdx : 0,
|
|
15
|
+
};
|
|
16
|
+
})
|
|
17
|
+
: undefined,
|
|
18
|
+
image: data.imageFile || existing.image || '',
|
|
19
|
+
scale: data.scale !== 1 ? data.scale : (existing.scale ?? 1),
|
|
20
|
+
size: { h: data.imageHeight, w: data.imageWidth },
|
|
21
|
+
version: existing.version ?? '1.0',
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
function frameToEntry(frame) {
|
|
25
|
+
const trimmed = frame.offsetX !== 0 ||
|
|
26
|
+
frame.offsetY !== 0 ||
|
|
27
|
+
frame.sourceWidth !== frame.width ||
|
|
28
|
+
frame.sourceHeight !== frame.height;
|
|
29
|
+
return {
|
|
30
|
+
frame: { h: frame.height, w: frame.width, x: frame.x, y: frame.y },
|
|
31
|
+
...(frame.pivotX !== null && frame.pivotY !== null ? { pivot: { x: frame.pivotX, y: frame.pivotY } } : {}),
|
|
32
|
+
rotated: frame.rotated,
|
|
33
|
+
sourceSize: { h: frame.sourceHeight, w: frame.sourceWidth },
|
|
34
|
+
spriteSourceSize: {
|
|
35
|
+
h: frame.height,
|
|
36
|
+
w: frame.width,
|
|
37
|
+
x: frame.offsetX,
|
|
38
|
+
y: frame.offsetY,
|
|
39
|
+
},
|
|
40
|
+
trimmed,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function dataToHashDocument(data, existing) {
|
|
44
|
+
const frames = {};
|
|
45
|
+
for (const frame of data.frames) {
|
|
46
|
+
frames[frame.name] = frameToEntry(frame);
|
|
47
|
+
}
|
|
48
|
+
return { frames, meta: dataToMeta(data, existing.meta ?? {}) };
|
|
49
|
+
}
|
|
50
|
+
function dataToArrayDocument(data, existing) {
|
|
51
|
+
const frames = data.frames.map((frame) => ({
|
|
52
|
+
filename: frame.name,
|
|
53
|
+
...frameToEntry(frame),
|
|
54
|
+
}));
|
|
55
|
+
return { frames, meta: dataToMeta(data, existing.meta ?? {}) };
|
|
56
|
+
}
|
|
57
|
+
// ─── Public API ──────────────────────────────────────────────────────────────
|
|
58
|
+
/** Serialise a SpritesheetData to a Texture Packer JSON string.
|
|
59
|
+
*
|
|
60
|
+
* Pass the `document` returned by `parseTexturePackerSpritesheetDocument` to preserve any fields
|
|
61
|
+
* that don't round-trip through the data (app name, format string, scale).
|
|
62
|
+
* The output variant (hash vs array) is inferred from the existing document or
|
|
63
|
+
* overridden via `options.variant`. */
|
|
64
|
+
export function serializeTexturePackerSpritesheet(data, existing, options) {
|
|
65
|
+
const existingIsArray = existing !== undefined && Array.isArray(existing.frames);
|
|
66
|
+
const variant = options?.variant ?? (existingIsArray ? 'array' : 'hash');
|
|
67
|
+
if (variant === 'array') {
|
|
68
|
+
const doc = dataToArrayDocument(data, existing ?? {});
|
|
69
|
+
return JSON.stringify(doc, null, 2);
|
|
70
|
+
}
|
|
71
|
+
const doc = dataToHashDocument(data, existing ?? {});
|
|
72
|
+
return JSON.stringify(doc, null, 2);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=texturePackerSerialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"texturePackerSerialize.js","sourceRoot":"","sources":["../src/texturePackerSerialize.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@flighthq/spritesheet-formats",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"src/**/*.test.ts",
|
|
16
|
+
"!dist/**/*.test.js",
|
|
17
|
+
"!dist/**/*.test.d.ts",
|
|
18
|
+
"!dist/**/*.test.js.map",
|
|
19
|
+
"!dist/**/*.test.d.ts.map"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "tsc -b",
|
|
23
|
+
"clean": "tsc -b --clean",
|
|
24
|
+
"test": "vitest run --config vitest.config.ts",
|
|
25
|
+
"test:watch": "vitest --watch --config vitest.config.ts",
|
|
26
|
+
"prepack": "npm run clean && npm run clean:dist && npm run build",
|
|
27
|
+
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
28
|
+
},
|
|
29
|
+
"dependencies": {
|
|
30
|
+
"@flighthq/textureatlas": "0.1.0",
|
|
31
|
+
"@flighthq/textureatlas-formats": "0.1.0",
|
|
32
|
+
"@flighthq/spritesheet": "0.1.0",
|
|
33
|
+
"@flighthq/types": "0.1.0",
|
|
34
|
+
"@flighthq/xml": "0.1.0"
|
|
35
|
+
},
|
|
36
|
+
"devDependencies": {
|
|
37
|
+
"typescript": "^5.3.0"
|
|
38
|
+
},
|
|
39
|
+
"description": "Import/export spritesheet atlas configs from industry-standard formats (Texture Packer, Aseprite, Starling)",
|
|
40
|
+
"sideEffects": false
|
|
41
|
+
}
|