@flighthq/particles-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.
Files changed (99) hide show
  1. package/dist/detect.d.ts +18 -0
  2. package/dist/detect.d.ts.map +1 -0
  3. package/dist/detect.js +75 -0
  4. package/dist/detect.js.map +1 -0
  5. package/dist/formatRegistry.d.ts +60 -0
  6. package/dist/formatRegistry.d.ts.map +1 -0
  7. package/dist/formatRegistry.js +75 -0
  8. package/dist/formatRegistry.js.map +1 -0
  9. package/dist/index.d.ts +21 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +21 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/libgdxParse.d.ts +27 -0
  14. package/dist/libgdxParse.d.ts.map +1 -0
  15. package/dist/libgdxParse.js +316 -0
  16. package/dist/libgdxParse.js.map +1 -0
  17. package/dist/libgdxSchema.d.ts +68 -0
  18. package/dist/libgdxSchema.d.ts.map +1 -0
  19. package/dist/libgdxSchema.js +12 -0
  20. package/dist/libgdxSchema.js.map +1 -0
  21. package/dist/libgdxSerialize.d.ts +17 -0
  22. package/dist/libgdxSerialize.d.ts.map +1 -0
  23. package/dist/libgdxSerialize.js +295 -0
  24. package/dist/libgdxSerialize.js.map +1 -0
  25. package/dist/parseParticleConfig.d.ts +34 -0
  26. package/dist/parseParticleConfig.d.ts.map +1 -0
  27. package/dist/parseParticleConfig.js +96 -0
  28. package/dist/parseParticleConfig.js.map +1 -0
  29. package/dist/particleDesignerParse.d.ts +23 -0
  30. package/dist/particleDesignerParse.d.ts.map +1 -0
  31. package/dist/particleDesignerParse.js +214 -0
  32. package/dist/particleDesignerParse.js.map +1 -0
  33. package/dist/particleDesignerSchema.d.ts +51 -0
  34. package/dist/particleDesignerSchema.d.ts.map +1 -0
  35. package/dist/particleDesignerSchema.js +5 -0
  36. package/dist/particleDesignerSchema.js.map +1 -0
  37. package/dist/particleDesignerSerialize.d.ts +22 -0
  38. package/dist/particleDesignerSerialize.d.ts.map +1 -0
  39. package/dist/particleDesignerSerialize.js +209 -0
  40. package/dist/particleDesignerSerialize.js.map +1 -0
  41. package/dist/pixiParse.d.ts +18 -0
  42. package/dist/pixiParse.d.ts.map +1 -0
  43. package/dist/pixiParse.js +173 -0
  44. package/dist/pixiParse.js.map +1 -0
  45. package/dist/serializeResult.d.ts +15 -0
  46. package/dist/serializeResult.d.ts.map +1 -0
  47. package/dist/serializeResult.js +2 -0
  48. package/dist/serializeResult.js.map +1 -0
  49. package/dist/spineParse.d.ts +18 -0
  50. package/dist/spineParse.d.ts.map +1 -0
  51. package/dist/spineParse.js +263 -0
  52. package/dist/spineParse.js.map +1 -0
  53. package/dist/spineSchema.d.ts +41 -0
  54. package/dist/spineSchema.d.ts.map +1 -0
  55. package/dist/spineSchema.js +8 -0
  56. package/dist/spineSchema.js.map +1 -0
  57. package/dist/spineSerialize.d.ts +16 -0
  58. package/dist/spineSerialize.d.ts.map +1 -0
  59. package/dist/spineSerialize.js +108 -0
  60. package/dist/spineSerialize.js.map +1 -0
  61. package/dist/starlingPexParse.d.ts +29 -0
  62. package/dist/starlingPexParse.d.ts.map +1 -0
  63. package/dist/starlingPexParse.js +254 -0
  64. package/dist/starlingPexParse.js.map +1 -0
  65. package/dist/starlingPexSchema.d.ts +49 -0
  66. package/dist/starlingPexSchema.d.ts.map +1 -0
  67. package/dist/starlingPexSchema.js +15 -0
  68. package/dist/starlingPexSchema.js.map +1 -0
  69. package/dist/starlingPexSerialize.d.ts +20 -0
  70. package/dist/starlingPexSerialize.d.ts.map +1 -0
  71. package/dist/starlingPexSerialize.js +184 -0
  72. package/dist/starlingPexSerialize.js.map +1 -0
  73. package/dist/unityParse.d.ts +23 -0
  74. package/dist/unityParse.d.ts.map +1 -0
  75. package/dist/unityParse.js +347 -0
  76. package/dist/unityParse.js.map +1 -0
  77. package/dist/unitySchema.d.ts +109 -0
  78. package/dist/unitySchema.d.ts.map +1 -0
  79. package/dist/unitySchema.js +9 -0
  80. package/dist/unitySchema.js.map +1 -0
  81. package/dist/unitySerialize.d.ts +20 -0
  82. package/dist/unitySerialize.d.ts.map +1 -0
  83. package/dist/unitySerialize.js +148 -0
  84. package/dist/unitySerialize.js.map +1 -0
  85. package/package.json +38 -0
  86. package/src/detect.test.ts +99 -0
  87. package/src/formatRegistry.test.ts +118 -0
  88. package/src/libgdxParse.test.ts +309 -0
  89. package/src/libgdxSerialize.test.ts +279 -0
  90. package/src/parseParticleConfig.test.ts +447 -0
  91. package/src/particleDesignerParse.test.ts +279 -0
  92. package/src/particleDesignerSerialize.test.ts +113 -0
  93. package/src/pixiParse.test.ts +131 -0
  94. package/src/spineParse.test.ts +289 -0
  95. package/src/spineSerialize.test.ts +81 -0
  96. package/src/starlingPexParse.test.ts +154 -0
  97. package/src/starlingPexSerialize.test.ts +115 -0
  98. package/src/unityParse.test.ts +328 -0
  99. package/src/unitySerialize.test.ts +77 -0
@@ -0,0 +1,214 @@
1
+ import { createParticleEmitterConfig } from '@flighthq/particles';
2
+ const DEG2RAD = Math.PI / 180;
3
+ // ─── Minimal plist XML parser ────────────────────────────────────────────────
4
+ function parsePlistRawDict(xml) {
5
+ const result = {};
6
+ const TAG_RE = /<(\/?)(\w+)([^>]*)>/g;
7
+ let currentKey = null;
8
+ let inTag = null;
9
+ let lastTagEnd = 0;
10
+ let m;
11
+ while ((m = TAG_RE.exec(xml)) !== null) {
12
+ const [full, close, name, attrs] = m;
13
+ const isSelfClose = attrs.trimEnd().endsWith('/') || full.endsWith('/>');
14
+ const text = xml.slice(lastTagEnd, m.index).trim();
15
+ lastTagEnd = m.index + full.length;
16
+ if (!close && !isSelfClose) {
17
+ if (name === 'key')
18
+ inTag = 'key';
19
+ else if (name === 'integer' || name === 'real' || name === 'string')
20
+ inTag = name;
21
+ }
22
+ else if (isSelfClose) {
23
+ if ((name === 'true' || name === 'false') && currentKey !== null) {
24
+ result[currentKey] = name === 'true';
25
+ currentKey = null;
26
+ }
27
+ }
28
+ else {
29
+ if (name === 'key' && inTag === 'key') {
30
+ currentKey = text || null;
31
+ inTag = null;
32
+ }
33
+ else if (currentKey !== null) {
34
+ if (name === 'integer' && inTag === 'integer')
35
+ result[currentKey] = parseInt(text, 10);
36
+ else if (name === 'real' && inTag === 'real')
37
+ result[currentKey] = parseFloat(text);
38
+ else if (name === 'string' && inTag === 'string')
39
+ result[currentKey] = unescapeXml(text);
40
+ if (['integer', 'real', 'string'].includes(name)) {
41
+ currentKey = null;
42
+ inTag = null;
43
+ }
44
+ }
45
+ }
46
+ }
47
+ return result;
48
+ }
49
+ function unescapeXml(s) {
50
+ return s
51
+ .replace(/&lt;/g, '<')
52
+ .replace(/&gt;/g, '>')
53
+ .replace(/&quot;/g, '"')
54
+ .replace(/&apos;/g, "'")
55
+ .replace(/&amp;/g, '&');
56
+ }
57
+ function num(d, key, def = 0) {
58
+ const v = d[key];
59
+ // Reject NaN (e.g. from an empty or malformed <integer>/<real> tag) so a
60
+ // corrupt field falls back to its default instead of poisoning the config.
61
+ return typeof v === 'number' && Number.isFinite(v) ? v : def;
62
+ }
63
+ function str(d, key, def = '') {
64
+ const v = d[key];
65
+ return typeof v === 'string' ? v : def;
66
+ }
67
+ // ─── Shared conversion logic operating directly on the raw dict ──────────────
68
+ function rawDictToConfig(d, textureSize) {
69
+ const angleRad = num(d, 'angle', 90) * DEG2RAD;
70
+ const lifespan = num(d, 'particleLifespan', 1);
71
+ const lifespanVar = num(d, 'particleLifespanVariance', 0);
72
+ const speed = num(d, 'speed', 100);
73
+ const speedVar = num(d, 'speedVariance', 0);
74
+ const vx = num(d, 'sourcePositionVariancex', 0);
75
+ const vy = num(d, 'sourcePositionVariancey', 0);
76
+ const emitterShape = vx === 0 && vy === 0 ? 'point' : vx === vy ? 'circle' : 'rect';
77
+ const startSize = num(d, 'startParticleSize', 32) / textureSize;
78
+ const startVar = num(d, 'startParticleSizeVariance', 0) / textureSize;
79
+ const finishSize = num(d, 'finishParticleSize', 16) / textureSize;
80
+ const rotStart = num(d, 'rotationStart', 0);
81
+ const rotEnd = num(d, 'rotationEnd', 0);
82
+ const rotStartVar = num(d, 'rotationStartVariance', 0);
83
+ const rotEndVar = num(d, 'rotationEndVariance', 0);
84
+ const lifetimeMid = lifespan + lifespanVar * 0.5 || 1;
85
+ const rotSpeedMid = ((rotStart + rotEnd) * 0.5 * DEG2RAD) / lifetimeMid;
86
+ const rotSpeedVar = (Math.max(rotStartVar, rotEndVar) * DEG2RAD) / lifetimeMid;
87
+ // Particle Designer `duration` is in seconds; -1 (or 0) means emit forever.
88
+ const pdDuration = num(d, 'duration', -1);
89
+ return createParticleEmitterConfig({
90
+ maxParticles: num(d, 'maxParticles', 200) | 0,
91
+ loop: pdDuration <= 0,
92
+ duration: pdDuration > 0 ? pdDuration : 0,
93
+ lifetimeMin: Math.max(0, lifespan - lifespanVar),
94
+ lifetimeMax: lifespan + lifespanVar,
95
+ speedMin: Math.max(0, speed - speedVar),
96
+ speedMax: speed + speedVar,
97
+ directionX: Math.cos(angleRad),
98
+ directionY: -Math.sin(angleRad),
99
+ spread: num(d, 'angleVariance', 0) * DEG2RAD,
100
+ gravityX: num(d, 'gravityx', 0),
101
+ gravityY: num(d, 'gravityy', 0),
102
+ emitterShape,
103
+ emitterRadius: emitterShape === 'circle' ? vx : 0,
104
+ emitterWidth: emitterShape === 'rect' ? vx * 2 : 0,
105
+ emitterHeight: emitterShape === 'rect' ? vy * 2 : 0,
106
+ scaleMin: Math.max(0, startSize - startVar),
107
+ scaleMax: startSize + startVar,
108
+ scaleEnd: startSize > 0 ? finishSize / startSize : 1,
109
+ colorStartR: num(d, 'startColorRed', 1),
110
+ colorStartG: num(d, 'startColorGreen', 1),
111
+ colorStartB: num(d, 'startColorBlue', 1),
112
+ colorStartVarianceR: num(d, 'startColorVarianceRed', 0),
113
+ colorStartVarianceG: num(d, 'startColorVarianceGreen', 0),
114
+ colorStartVarianceB: num(d, 'startColorVarianceBlue', 0),
115
+ colorEndR: num(d, 'finishColorRed', 1),
116
+ colorEndG: num(d, 'finishColorGreen', 1),
117
+ colorEndB: num(d, 'finishColorBlue', 1),
118
+ colorEndVarianceR: num(d, 'finishColorVarianceRed', 0),
119
+ colorEndVarianceG: num(d, 'finishColorVarianceGreen', 0),
120
+ colorEndVarianceB: num(d, 'finishColorVarianceBlue', 0),
121
+ alphaStart: num(d, 'startColorAlpha', 1),
122
+ alphaEnd: num(d, 'finishColorAlpha', 0),
123
+ rotationSpeedMin: rotSpeedMid - rotSpeedVar,
124
+ rotationSpeedMax: rotSpeedMid + rotSpeedVar,
125
+ blendMode: pdBlendMode(num(d, 'blendFuncSource', 770), num(d, 'blendFuncDestination', 771)),
126
+ });
127
+ }
128
+ function pdBlendMode(src, dst) {
129
+ // GL_ONE=1, GL_SRC_ALPHA=770, GL_ONE_MINUS_SRC_ALPHA=771
130
+ if ((src === 770 || src === 1) && dst === 1)
131
+ return 'add';
132
+ if (src === 770 && dst === 771)
133
+ return 'normal';
134
+ if (src === 1 && dst === 771)
135
+ return 'normal'; // premultiplied alpha
136
+ return null;
137
+ }
138
+ // ─── Public API ──────────────────────────────────────────────────────────────
139
+ /** Parse a Particle Designer plist XML string directly to a ParticleEmitterConfig.
140
+ *
141
+ * Single-pass: no intermediate document object is allocated.
142
+ * Use `parseParticleDesignerPlistDocument` instead when you need round-trip serialisation. */
143
+ export function parseParticleDesignerPlist(plistXml, options) {
144
+ return rawDictToConfig(parsePlistRawDict(plistXml), options?.textureSize ?? 1);
145
+ }
146
+ function collectParticleDesignerWarnings(d) {
147
+ const warnings = [];
148
+ if (num(d, 'emitterType', 0) === 1) {
149
+ warnings.push('Radial (emitterType=1) emitter was approximated as a gravity emitter; radial motion is not simulated');
150
+ }
151
+ if (num(d, 'radialAcceleration', 0) !== 0 || num(d, 'radialAccelVariance', 0) !== 0) {
152
+ warnings.push('radialAcceleration is not supported and was ignored');
153
+ }
154
+ if (num(d, 'tangentialAcceleration', 0) !== 0 || num(d, 'tangentialAccelVariance', 0) !== 0) {
155
+ warnings.push('tangentialAcceleration is not supported and was ignored');
156
+ }
157
+ return warnings;
158
+ }
159
+ /** Parse a Particle Designer plist XML string and preserve the full document for
160
+ * round-trip serialisation via `serializeParticleDesignerPlist`. */
161
+ export function parseParticleDesignerPlistDocument(plistXml, options) {
162
+ const textureSize = options?.textureSize ?? 1;
163
+ const d = parsePlistRawDict(plistXml);
164
+ const document = {
165
+ maxParticles: num(d, 'maxParticles', 200) | 0,
166
+ emitterType: (num(d, 'emitterType', 0) === 1 ? 1 : 0),
167
+ duration: num(d, 'duration', -1),
168
+ particleLifespan: num(d, 'particleLifespan', 1),
169
+ particleLifespanVariance: num(d, 'particleLifespanVariance', 0),
170
+ speed: num(d, 'speed', 100),
171
+ speedVariance: num(d, 'speedVariance', 0),
172
+ angle: num(d, 'angle', 90),
173
+ angleVariance: num(d, 'angleVariance', 0),
174
+ gravityx: num(d, 'gravityx', 0),
175
+ gravityy: num(d, 'gravityy', 0),
176
+ sourcePositionVariancex: num(d, 'sourcePositionVariancex', 0),
177
+ sourcePositionVariancey: num(d, 'sourcePositionVariancey', 0),
178
+ startParticleSize: num(d, 'startParticleSize', 32),
179
+ startParticleSizeVariance: num(d, 'startParticleSizeVariance', 0),
180
+ finishParticleSize: num(d, 'finishParticleSize', 16),
181
+ finishParticleSizeVariance: num(d, 'finishParticleSizeVariance', 0),
182
+ startColorRed: num(d, 'startColorRed', 1),
183
+ startColorGreen: num(d, 'startColorGreen', 1),
184
+ startColorBlue: num(d, 'startColorBlue', 1),
185
+ startColorAlpha: num(d, 'startColorAlpha', 1),
186
+ startColorVarianceRed: num(d, 'startColorVarianceRed', 0),
187
+ startColorVarianceGreen: num(d, 'startColorVarianceGreen', 0),
188
+ startColorVarianceBlue: num(d, 'startColorVarianceBlue', 0),
189
+ startColorVarianceAlpha: num(d, 'startColorVarianceAlpha', 0),
190
+ finishColorRed: num(d, 'finishColorRed', 1),
191
+ finishColorGreen: num(d, 'finishColorGreen', 1),
192
+ finishColorBlue: num(d, 'finishColorBlue', 1),
193
+ finishColorAlpha: num(d, 'finishColorAlpha', 0),
194
+ finishColorVarianceRed: num(d, 'finishColorVarianceRed', 0),
195
+ finishColorVarianceGreen: num(d, 'finishColorVarianceGreen', 0),
196
+ finishColorVarianceBlue: num(d, 'finishColorVarianceBlue', 0),
197
+ finishColorVarianceAlpha: num(d, 'finishColorVarianceAlpha', 0),
198
+ rotationStart: num(d, 'rotationStart', 0),
199
+ rotationStartVariance: num(d, 'rotationStartVariance', 0),
200
+ rotationEnd: num(d, 'rotationEnd', 0),
201
+ rotationEndVariance: num(d, 'rotationEndVariance', 0),
202
+ maxRadius: num(d, 'maxRadius', 0),
203
+ maxRadiusVariance: num(d, 'maxRadiusVariance', 0),
204
+ minRadius: num(d, 'minRadius', 0),
205
+ minRadiusVariance: num(d, 'minRadiusVariance', 0),
206
+ rotatePerSecond: num(d, 'rotatePerSecond', 0),
207
+ rotatePerSecondVariance: num(d, 'rotatePerSecondVariance', 0),
208
+ blendFuncSource: num(d, 'blendFuncSource', 770),
209
+ blendFuncDestination: num(d, 'blendFuncDestination', 771),
210
+ textureFileName: str(d, 'textureFileName', ''),
211
+ };
212
+ return { config: rawDictToConfig(d, textureSize), document, warnings: collectParticleDesignerWarnings(d) };
213
+ }
214
+ //# sourceMappingURL=particleDesignerParse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particleDesignerParse.js","sourceRoot":"","sources":["../src/particleDesignerParse.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ export type ParticleDesignerEmitterType = 0 | 1;
2
+ export interface ParticleDesignerDocument {
3
+ maxParticles: number;
4
+ emitterType: ParticleDesignerEmitterType;
5
+ duration: number;
6
+ particleLifespan: number;
7
+ particleLifespanVariance: number;
8
+ speed: number;
9
+ speedVariance: number;
10
+ angle: number;
11
+ angleVariance: number;
12
+ gravityx: number;
13
+ gravityy: number;
14
+ sourcePositionVariancex: number;
15
+ sourcePositionVariancey: number;
16
+ startParticleSize: number;
17
+ startParticleSizeVariance: number;
18
+ finishParticleSize: number;
19
+ finishParticleSizeVariance: number;
20
+ startColorRed: number;
21
+ startColorGreen: number;
22
+ startColorBlue: number;
23
+ startColorAlpha: number;
24
+ startColorVarianceRed: number;
25
+ startColorVarianceGreen: number;
26
+ startColorVarianceBlue: number;
27
+ startColorVarianceAlpha: number;
28
+ finishColorRed: number;
29
+ finishColorGreen: number;
30
+ finishColorBlue: number;
31
+ finishColorAlpha: number;
32
+ finishColorVarianceRed: number;
33
+ finishColorVarianceGreen: number;
34
+ finishColorVarianceBlue: number;
35
+ finishColorVarianceAlpha: number;
36
+ rotationStart: number;
37
+ rotationStartVariance: number;
38
+ rotationEnd: number;
39
+ rotationEndVariance: number;
40
+ maxRadius: number;
41
+ maxRadiusVariance: number;
42
+ minRadius: number;
43
+ minRadiusVariance: number;
44
+ rotatePerSecond: number;
45
+ rotatePerSecondVariance: number;
46
+ blendFuncSource: number;
47
+ blendFuncDestination: number;
48
+ textureFileName: string;
49
+ }
50
+ export type ParticleDesignerRawDict = Record<string, string | number | boolean>;
51
+ //# sourceMappingURL=particleDesignerSchema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particleDesignerSchema.d.ts","sourceRoot":"","sources":["../src/particleDesignerSchema.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,2BAA2B,GAAG,CAAC,GAAG,CAAC,CAAC;AAEhD,MAAM,WAAW,wBAAwB;IAEvC,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,2BAA2B,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IAGjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IAGjC,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IAGtB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IAGtB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IAGjB,uBAAuB,EAAE,MAAM,CAAC;IAChC,uBAAuB,EAAE,MAAM,CAAC;IAGhC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yBAAyB,EAAE,MAAM,CAAC;IAClC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,MAAM,CAAC;IAGnC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,uBAAuB,EAAE,MAAM,CAAC;IAGhC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,wBAAwB,EAAE,MAAM,CAAC;IACjC,uBAAuB,EAAE,MAAM,CAAC;IAChC,wBAAwB,EAAE,MAAM,CAAC;IAGjC,aAAa,EAAE,MAAM,CAAC;IACtB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,MAAM,CAAC;IAG5B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAGhC,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAG7B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ // Particle Designer plist schema — field names as they appear in the XML file.
2
+ // Reference: https://www.71squared.com/particledesigner (format documented in the tool's export)
3
+ // Targets Particle Designer 3.x and cocos2d-compatible plist files.
4
+ export {};
5
+ //# sourceMappingURL=particleDesignerSchema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particleDesignerSchema.js","sourceRoot":"","sources":["../src/particleDesignerSchema.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,iGAAiG;AACjG,oEAAoE"}
@@ -0,0 +1,22 @@
1
+ import type { ParticleEmitterConfig } from '@flighthq/types';
2
+ import type { ParticleDesignerDocument } from './particleDesignerSchema';
3
+ import type { ParticleSerializeResult } from './serializeResult';
4
+ export interface ParticleDesignerSerializeOptions {
5
+ /** Side length of the particle texture in pixels — reverses the normalisation
6
+ * applied during parsing. Defaults to 1. */
7
+ textureSize?: number;
8
+ }
9
+ /** Serialise a ParticleEmitterConfig to a Particle Designer plist XML string.
10
+ *
11
+ * Pass the `document` returned by `parseParticleDesignerPlist` to preserve
12
+ * any fields that don't round-trip through the config (texture name, blend
13
+ * function, emitter type, duration, color variances). */
14
+ export declare function serializeParticleDesignerPlist(config: Readonly<ParticleEmitterConfig>, existing?: Partial<ParticleDesignerDocument>, options?: ParticleDesignerSerializeOptions): string;
15
+ /** Serialise a ParticleEmitterConfig to a Particle Designer plist XML string,
16
+ * returning both the serialized text and any warnings for features the format
17
+ * cannot represent.
18
+ *
19
+ * Pass the `document` returned by `parseParticleDesignerPlistDocument` to
20
+ * preserve any fields that don't round-trip through the config. */
21
+ export declare function serializeParticleDesignerPlistDocument(config: Readonly<ParticleEmitterConfig>, existing?: Partial<ParticleDesignerDocument>, options?: ParticleDesignerSerializeOptions): ParticleSerializeResult;
22
+ //# sourceMappingURL=particleDesignerSerialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particleDesignerSerialize.d.ts","sourceRoot":"","sources":["../src/particleDesignerSerialize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAE7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACzE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,MAAM,WAAW,gCAAgC;IAC/C;kDAC8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAmLD;;;;0DAI0D;AAC1D,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACvC,QAAQ,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,EAC5C,OAAO,CAAC,EAAE,gCAAgC,GACzC,MAAM,CAIR;AAED;;;;;oEAKoE;AACpE,wBAAgB,sCAAsC,CACpD,MAAM,EAAE,QAAQ,CAAC,qBAAqB,CAAC,EACvC,QAAQ,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,EAC5C,OAAO,CAAC,EAAE,gCAAgC,GACzC,uBAAuB,CAIzB"}
@@ -0,0 +1,209 @@
1
+ const RAD2DEG = 180 / Math.PI;
2
+ function configToDocument(config, existing, textureSize) {
3
+ // Direction vector → degrees (0°=right, 90°=up-screen)
4
+ const angleDeg = Math.atan2(-config.directionY, config.directionX) * RAD2DEG;
5
+ // Scale multipliers → absolute pixel sizes
6
+ const startSize = (config.scaleMin + config.scaleMax) * 0.5 * textureSize;
7
+ const startVar = (config.scaleMax - config.scaleMin) * 0.5 * textureSize;
8
+ const finishSize = startSize * config.scaleEnd;
9
+ // Rotation speed → Particle Designer rotation range
10
+ const rotSpeedMid = (config.rotationSpeedMin + config.rotationSpeedMax) * 0.5;
11
+ const rotSpeedVar = (config.rotationSpeedMax - config.rotationSpeedMin) * 0.5;
12
+ const lifetimeMid = (config.lifetimeMin + config.lifetimeMax) * 0.5;
13
+ const rotStart = rotSpeedMid * lifetimeMid * RAD2DEG;
14
+ const rotVar = rotSpeedVar * lifetimeMid * RAD2DEG;
15
+ // Emitter shape → sourcePositionVariance
16
+ let vx = 0;
17
+ let vy = 0;
18
+ if (config.emitterShape === 'circle') {
19
+ vx = config.emitterRadius;
20
+ vy = config.emitterRadius;
21
+ }
22
+ else if (config.emitterShape === 'rect') {
23
+ vx = config.emitterWidth * 0.5;
24
+ vy = config.emitterHeight * 0.5;
25
+ }
26
+ return {
27
+ maxParticles: config.maxParticles,
28
+ emitterType: existing.emitterType ?? 0,
29
+ duration: config.duration > 0 && !config.loop ? config.duration : (existing.duration ?? -1),
30
+ particleLifespan: (config.lifetimeMin + config.lifetimeMax) * 0.5,
31
+ particleLifespanVariance: (config.lifetimeMax - config.lifetimeMin) * 0.5,
32
+ speed: (config.speedMin + config.speedMax) * 0.5,
33
+ speedVariance: (config.speedMax - config.speedMin) * 0.5,
34
+ angle: angleDeg,
35
+ angleVariance: config.spread * RAD2DEG,
36
+ gravityx: config.gravityX,
37
+ gravityy: config.gravityY,
38
+ sourcePositionVariancex: vx,
39
+ sourcePositionVariancey: vy,
40
+ startParticleSize: startSize,
41
+ startParticleSizeVariance: startVar,
42
+ finishParticleSize: finishSize,
43
+ finishParticleSizeVariance: existing.finishParticleSizeVariance ?? 0,
44
+ startColorRed: config.colorStartR,
45
+ startColorGreen: config.colorStartG,
46
+ startColorBlue: config.colorStartB,
47
+ startColorAlpha: config.alphaStart,
48
+ startColorVarianceRed: config.colorStartVarianceR !== 0 ? config.colorStartVarianceR : (existing.startColorVarianceRed ?? 0),
49
+ startColorVarianceGreen: config.colorStartVarianceG !== 0 ? config.colorStartVarianceG : (existing.startColorVarianceGreen ?? 0),
50
+ startColorVarianceBlue: config.colorStartVarianceB !== 0 ? config.colorStartVarianceB : (existing.startColorVarianceBlue ?? 0),
51
+ startColorVarianceAlpha: existing.startColorVarianceAlpha ?? 0,
52
+ finishColorRed: config.colorEndR,
53
+ finishColorGreen: config.colorEndG,
54
+ finishColorBlue: config.colorEndB,
55
+ finishColorAlpha: config.alphaEnd,
56
+ finishColorVarianceRed: config.colorEndVarianceR !== 0 ? config.colorEndVarianceR : (existing.finishColorVarianceRed ?? 0),
57
+ finishColorVarianceGreen: config.colorEndVarianceG !== 0 ? config.colorEndVarianceG : (existing.finishColorVarianceGreen ?? 0),
58
+ finishColorVarianceBlue: config.colorEndVarianceB !== 0 ? config.colorEndVarianceB : (existing.finishColorVarianceBlue ?? 0),
59
+ finishColorVarianceAlpha: existing.finishColorVarianceAlpha ?? 0,
60
+ rotationStart: rotStart,
61
+ rotationStartVariance: rotVar,
62
+ rotationEnd: rotStart,
63
+ rotationEndVariance: rotVar,
64
+ maxRadius: existing.maxRadius ?? 0,
65
+ maxRadiusVariance: existing.maxRadiusVariance ?? 0,
66
+ minRadius: existing.minRadius ?? 0,
67
+ minRadiusVariance: existing.minRadiusVariance ?? 0,
68
+ rotatePerSecond: existing.rotatePerSecond ?? 0,
69
+ rotatePerSecondVariance: existing.rotatePerSecondVariance ?? 0,
70
+ blendFuncSource: blendModeToSrc(config.blendMode, existing.blendFuncSource ?? 770),
71
+ blendFuncDestination: blendModeToDst(config.blendMode, existing.blendFuncDestination ?? 771),
72
+ textureFileName: existing.textureFileName ?? '',
73
+ };
74
+ }
75
+ function documentToPlist(doc) {
76
+ const lines = [
77
+ '<?xml version="1.0" encoding="utf-8"?>',
78
+ '<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">',
79
+ '<plist version="1.0">',
80
+ '<dict>',
81
+ ];
82
+ function kv(key, value) {
83
+ lines.push(`\t<key>${key}</key>`);
84
+ if (typeof value === 'boolean') {
85
+ lines.push(`\t<${value ? 'true' : 'false'}/>`);
86
+ }
87
+ else if (typeof value === 'number') {
88
+ if (Number.isInteger(value))
89
+ lines.push(`\t<integer>${value}</integer>`);
90
+ else
91
+ lines.push(`\t<real>${value}</real>`);
92
+ }
93
+ else {
94
+ lines.push(`\t<string>${escapeXml(value)}</string>`);
95
+ }
96
+ }
97
+ kv('maxParticles', doc.maxParticles);
98
+ kv('emitterType', doc.emitterType);
99
+ kv('duration', doc.duration);
100
+ kv('particleLifespan', doc.particleLifespan);
101
+ kv('particleLifespanVariance', doc.particleLifespanVariance);
102
+ kv('speed', doc.speed);
103
+ kv('speedVariance', doc.speedVariance);
104
+ kv('angle', doc.angle);
105
+ kv('angleVariance', doc.angleVariance);
106
+ kv('gravityx', doc.gravityx);
107
+ kv('gravityy', doc.gravityy);
108
+ kv('sourcePositionVariancex', doc.sourcePositionVariancex);
109
+ kv('sourcePositionVariancey', doc.sourcePositionVariancey);
110
+ kv('startParticleSize', doc.startParticleSize);
111
+ kv('startParticleSizeVariance', doc.startParticleSizeVariance);
112
+ kv('finishParticleSize', doc.finishParticleSize);
113
+ kv('finishParticleSizeVariance', doc.finishParticleSizeVariance);
114
+ kv('startColorRed', doc.startColorRed);
115
+ kv('startColorGreen', doc.startColorGreen);
116
+ kv('startColorBlue', doc.startColorBlue);
117
+ kv('startColorAlpha', doc.startColorAlpha);
118
+ kv('startColorVarianceRed', doc.startColorVarianceRed);
119
+ kv('startColorVarianceGreen', doc.startColorVarianceGreen);
120
+ kv('startColorVarianceBlue', doc.startColorVarianceBlue);
121
+ kv('startColorVarianceAlpha', doc.startColorVarianceAlpha);
122
+ kv('finishColorRed', doc.finishColorRed);
123
+ kv('finishColorGreen', doc.finishColorGreen);
124
+ kv('finishColorBlue', doc.finishColorBlue);
125
+ kv('finishColorAlpha', doc.finishColorAlpha);
126
+ kv('finishColorVarianceRed', doc.finishColorVarianceRed);
127
+ kv('finishColorVarianceGreen', doc.finishColorVarianceGreen);
128
+ kv('finishColorVarianceBlue', doc.finishColorVarianceBlue);
129
+ kv('finishColorVarianceAlpha', doc.finishColorVarianceAlpha);
130
+ kv('rotationStart', doc.rotationStart);
131
+ kv('rotationStartVariance', doc.rotationStartVariance);
132
+ kv('rotationEnd', doc.rotationEnd);
133
+ kv('rotationEndVariance', doc.rotationEndVariance);
134
+ kv('maxRadius', doc.maxRadius);
135
+ kv('maxRadiusVariance', doc.maxRadiusVariance);
136
+ kv('minRadius', doc.minRadius);
137
+ kv('minRadiusVariance', doc.minRadiusVariance);
138
+ kv('rotatePerSecond', doc.rotatePerSecond);
139
+ kv('rotatePerSecondVariance', doc.rotatePerSecondVariance);
140
+ kv('blendFuncSource', doc.blendFuncSource);
141
+ kv('blendFuncDestination', doc.blendFuncDestination);
142
+ kv('textureFileName', doc.textureFileName);
143
+ lines.push('</dict>');
144
+ lines.push('</plist>');
145
+ return lines.join('\n');
146
+ }
147
+ function escapeXml(s) {
148
+ return s.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
149
+ }
150
+ function blendModeToSrc(mode, fallback) {
151
+ if (mode === 'add')
152
+ return 770; // GL_SRC_ALPHA
153
+ if (mode === 'normal')
154
+ return 770;
155
+ return fallback;
156
+ }
157
+ function blendModeToDst(mode, fallback) {
158
+ if (mode === 'add')
159
+ return 1; // GL_ONE
160
+ if (mode === 'normal')
161
+ return 771; // GL_ONE_MINUS_SRC_ALPHA
162
+ return fallback;
163
+ }
164
+ /** Serialise a ParticleEmitterConfig to a Particle Designer plist XML string.
165
+ *
166
+ * Pass the `document` returned by `parseParticleDesignerPlist` to preserve
167
+ * any fields that don't round-trip through the config (texture name, blend
168
+ * function, emitter type, duration, color variances). */
169
+ export function serializeParticleDesignerPlist(config, existing, options) {
170
+ const textureSize = options?.textureSize ?? 1;
171
+ const doc = configToDocument(config, existing ?? {}, textureSize);
172
+ return documentToPlist(doc);
173
+ }
174
+ /** Serialise a ParticleEmitterConfig to a Particle Designer plist XML string,
175
+ * returning both the serialized text and any warnings for features the format
176
+ * cannot represent.
177
+ *
178
+ * Pass the `document` returned by `parseParticleDesignerPlistDocument` to
179
+ * preserve any fields that don't round-trip through the config. */
180
+ export function serializeParticleDesignerPlistDocument(config, existing, options) {
181
+ const text = serializeParticleDesignerPlist(config, existing, options);
182
+ const warnings = collectParticleDesignerSerializeWarnings(config);
183
+ return { text, warnings };
184
+ }
185
+ /** Collect serialize-side warnings for features in `config` that the Particle
186
+ * Designer plist format cannot represent. */
187
+ function collectParticleDesignerSerializeWarnings(config) {
188
+ const warnings = [];
189
+ if (config.blendMode !== null && config.blendMode !== 'add' && config.blendMode !== 'normal') {
190
+ warnings.push(`Blend mode '${config.blendMode}' has no Particle Designer equivalent and was approximated as 'normal'`);
191
+ }
192
+ if (config.colorCurve !== null) {
193
+ warnings.push('Color curve has more than two stops; Particle Designer stores only start and end colors');
194
+ }
195
+ if (config.alphaCurve !== null) {
196
+ warnings.push('Alpha curve has more than two stops; Particle Designer stores only start and end alpha');
197
+ }
198
+ if (config.scaleCurve !== null) {
199
+ warnings.push('Scale curve has more than two stops; Particle Designer stores only start and end size');
200
+ }
201
+ if (config.burstCount > 0) {
202
+ warnings.push('Emission bursts are not supported by the Particle Designer format and were ignored');
203
+ }
204
+ if (config.velocityInheritance !== 0) {
205
+ warnings.push('velocityInheritance is not supported by the Particle Designer format and was ignored');
206
+ }
207
+ return warnings;
208
+ }
209
+ //# sourceMappingURL=particleDesignerSerialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"particleDesignerSerialize.js","sourceRoot":"","sources":["../src/particleDesignerSerialize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ParticleEmitterConfig } from '@flighthq/types';
2
+ export interface PixiParseResult {
3
+ config: ParticleEmitterConfig;
4
+ /** Features present in the source that the common-subset importer cannot
5
+ * represent and silently dropped — surface these in your asset pipeline. */
6
+ warnings: string[];
7
+ }
8
+ /** @deprecated Use `PixiParseResult`. */
9
+ export type PixiParsed = PixiParseResult;
10
+ /** Parse a Pixi.js / pixi-particle-emitter JSON config string directly to a ParticleEmitterConfig.
11
+ *
12
+ * Supports the pixi-particle-emitter v3/v4/v5 config shape.
13
+ * Throws a clear, format-tagged error when the input is not valid JSON or not an object. */
14
+ export declare function parsePixiParticle(json: string): ParticleEmitterConfig;
15
+ /** Parse a Pixi.js / pixi-particle-emitter JSON config string, returning the config
16
+ * and any import warnings for features that could not be represented. */
17
+ export declare function parsePixiParticleDocument(json: string): PixiParseResult;
18
+ //# sourceMappingURL=pixiParse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pixiParse.d.ts","sourceRoot":"","sources":["../src/pixiParse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,qBAAqB,CAAC;IAC9B;iFAC6E;IAC7E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,yCAAyC;AACzC,MAAM,MAAM,UAAU,GAAG,eAAe,CAAC;AAEzC;;;6FAG6F;AAC7F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAErE;AAED;0EAC0E;AAC1E,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAMvE"}