@galacean/effects-specification 2.0.0-alpha.8 → 2.0.0-alpha.9

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.
@@ -1,4 +1,4 @@
1
- import type { JSONScene, JSONSceneLegacy } from '../src';
1
+ import type { JSONScene, JSONSceneLegacy, BaseContent } from '../src';
2
2
  /**
3
3
  * 2.1 以下版本数据适配(mars-player@2.4.0 及以上版本支持 2.1 以下数据的适配)
4
4
  */
@@ -11,3 +11,8 @@ export declare function version22Migration(json: JSONSceneLegacy): JSONSceneLega
11
11
  * 3.0 以下版本数据适配(runtime 2.0及以上版本支持)
12
12
  */
13
13
  export declare function version30Migration(json: JSONSceneLegacy): JSONScene;
14
+ /**
15
+ * 2.5 以下版本 赫尔米特数据转换成贝塞尔数据
16
+ */
17
+ export declare function version24Migration(json: JSONScene): JSONScene;
18
+ export declare function convertParam(content: BaseContent | undefined | null): void;
@@ -1,4 +1,4 @@
1
- import type { FixedNumberExpression, RGBAColorValue, ColorExpression, NumberExpression, GradientColor, FixedVec3Expression, vec4, vec3, vec2 } from '../src';
1
+ import type { FixedNumberExpression, RGBAColorValue, ColorExpression, NumberExpression, GradientColor, FixedVec3Expression, vec4, vec3, BezierKeyframeValue, vec2 } from '../src';
2
2
  import { ParticleOrigin } from '../src';
3
3
  export declare function arrAdd<T>(arr: T[], item: T): boolean | undefined;
4
4
  /**
@@ -22,7 +22,7 @@ export declare function ensureGradient(a: any, normalized?: boolean): GradientCo
22
22
  export declare function colorToArr(hex: string | number[], normalized?: boolean): vec4;
23
23
  export declare function normalizeColor(a: number[]): number[] | undefined;
24
24
  export declare function parsePercent(c: string): number;
25
- export declare function getGradientColor(color: string | Array<string | number[]>, normalized?: boolean): GradientColor | undefined;
25
+ export declare function getGradientColor(color: string | Array<string | number[]> | GradientColor, normalized?: boolean): GradientColor | undefined;
26
26
  export declare function ensureFixedVec3(a: any): FixedVec3Expression | undefined;
27
27
  export declare function objectValueToNumber(o: Record<string, any>): object;
28
28
  export declare function deleteEmptyValue(o: Record<string, any>): object;
@@ -34,3 +34,4 @@ export declare function generateGUID(): string;
34
34
  */
35
35
  export declare function convertAnchor(anchor?: vec2, particleOrigin?: ParticleOrigin): vec2;
36
36
  export declare const particleOriginTranslateMap: Record<number, vec2>;
37
+ export declare function getBezierCurveFromHermiteInGE(geHermiteCurves: number[][]): BezierKeyframeValue[];
package/dist/fallback.js CHANGED
@@ -2,7 +2,7 @@
2
2
  * Name: @galacean/effects-specification
3
3
  * Description: Galacean Effects JSON Specification
4
4
  * Author: Ant Group CO., Ltd.
5
- * Version: v2.0.0-alpha.8
5
+ * Version: v2.0.0-alpha.9
6
6
  */
7
7
 
8
8
  'use strict';
@@ -926,15 +926,27 @@ function ensureFixedNumber(a) {
926
926
  return [ValueType.CONSTANT, a];
927
927
  }
928
928
  if (a) {
929
- if (a[0] === 'lines') {
929
+ var valueType = a[0];
930
+ var valueData = a[1];
931
+ if (Array.isArray(valueType)) {
932
+ // 没有数据类型的数据
933
+ return;
934
+ }
935
+ if (valueType === 'static' || valueType === ValueType.CONSTANT) {
936
+ return [ValueType.CONSTANT, a[1]];
937
+ }
938
+ if (valueType === 'lines') {
930
939
  return [ValueType.LINE, a[1]];
931
940
  }
932
- if (a[0] === 'curve') {
933
- return [ValueType.CURVE, a[1]];
941
+ if (valueType === ValueType.LINE) {
942
+ // @ts-expect-error
943
+ var keyframes = valueData.map(function (data) { return [BezierKeyframeType.LINE, data]; });
944
+ return [ValueType.BEZIER_CURVE, keyframes];
934
945
  }
935
- if (a[0] === 'static') {
936
- return [ValueType.CONSTANT, a[1]];
946
+ if (valueType === 'curve' || valueType === ValueType.CURVE) {
947
+ return [ValueType.BEZIER_CURVE, getBezierCurveFromHermiteInGE(valueData)];
937
948
  }
949
+ return a;
938
950
  }
939
951
  }
940
952
  function ensureFixedNumberWithRandom(a, p) {
@@ -960,6 +972,7 @@ function ensureColorExpression(a, normalized) {
960
972
  else if (a[0] === 'color') {
961
973
  return [ValueType.RGBA_COLOR, colorToArr(a[1], normalized)];
962
974
  }
975
+ return a;
963
976
  }
964
977
  }
965
978
  function ensureNumberExpression(a) {
@@ -1027,6 +1040,9 @@ function parsePercent(c) {
1027
1040
  }
1028
1041
  function getGradientColor(color, normalized) {
1029
1042
  if (Array.isArray(color)) {
1043
+ if (color[0] === ValueType.GRADIENT_COLOR) {
1044
+ return color;
1045
+ }
1030
1046
  // @ts-expect-error
1031
1047
  return (color[0] === 'gradient' || color[0] === 'color') && ensureGradient(color[1], normalized);
1032
1048
  }
@@ -1039,12 +1055,36 @@ function ensureFixedVec3(a) {
1039
1055
  if (a.length === 3) {
1040
1056
  return [ValueType.CONSTANT_VEC3, a];
1041
1057
  }
1042
- if (a[0] === 'path') {
1043
- return [ValueType.LINEAR_PATH, a[1]];
1044
- }
1045
- if (a[0] === 'bezier') {
1046
- return [ValueType.BEZIER_PATH, a[1]];
1058
+ var valueType = a[0];
1059
+ if (valueType === 'path' ||
1060
+ valueType === 'bezier' ||
1061
+ valueType === ValueType.BEZIER_PATH ||
1062
+ valueType === ValueType.LINEAR_PATH) {
1063
+ var valueData = a[1];
1064
+ var easing = valueData[0];
1065
+ var points = valueData[1];
1066
+ var controlPoints = valueData[2];
1067
+ var bezierEasing = getBezierCurveFromHermiteInGE(easing);
1068
+ // linear path没有controlPoints
1069
+ if (!controlPoints) {
1070
+ controlPoints = [];
1071
+ for (var keyframeIndex = 0; keyframeIndex < points.length; keyframeIndex++) {
1072
+ var point = points[keyframeIndex].slice();
1073
+ if (keyframeIndex === 0) {
1074
+ controlPoints.push(point);
1075
+ }
1076
+ else if (keyframeIndex < points.length - 1) {
1077
+ controlPoints.push(point);
1078
+ controlPoints.push(point);
1079
+ }
1080
+ else {
1081
+ controlPoints.push(point);
1082
+ }
1083
+ }
1084
+ }
1085
+ return [ValueType.BEZIER_CURVE_PATH, [bezierEasing, points, controlPoints]];
1047
1086
  }
1087
+ return a;
1048
1088
  }
1049
1089
  }
1050
1090
  function objectValueToNumber(o) {
@@ -1162,6 +1202,50 @@ var particleOriginTranslateMap = (_a = {},
1162
1202
  _a[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_BOTTOM] = [0.5, -0.5],
1163
1203
  _a[ParticleOrigin.PARTICLE_ORIGIN_RIGHT_TOP] = [0.5, 0.5],
1164
1204
  _a);
1205
+ function getBezierCurveFromHermite(m0, m1, p0, p3) {
1206
+ var xStart = p0[0];
1207
+ var yStart = p0[1];
1208
+ var xEnd = p3[0];
1209
+ var yEnd = p3[1];
1210
+ var dt = xEnd - xStart;
1211
+ m0 = m0 * dt;
1212
+ m1 = m1 * dt;
1213
+ var bezierControlPoints = [[xStart + (xEnd - xStart) / 3, yStart + m0 / 3], [xEnd - (xEnd - xStart) / 3, yEnd - m1 / 3]];
1214
+ return bezierControlPoints;
1215
+ }
1216
+ function getBezierCurveFromHermiteInGE(geHermiteCurves) {
1217
+ var ymax = -1000000;
1218
+ var ymin = 1000000;
1219
+ for (var i = 0; i < geHermiteCurves.length; i++) {
1220
+ ymax = Math.max(ymax, geHermiteCurves[i][1]);
1221
+ ymin = Math.min(ymin, geHermiteCurves[i][1]);
1222
+ }
1223
+ var geBezierCurves = [[geHermiteCurves[0][0], geHermiteCurves[0][1]]];
1224
+ for (var i = 0; i < geHermiteCurves.length - 1; i++) {
1225
+ var m0 = geHermiteCurves[i][3] * (ymax - ymin);
1226
+ var m1 = geHermiteCurves[i + 1][2] * (ymax - ymin);
1227
+ var p0 = [geHermiteCurves[i][0], geHermiteCurves[i][1]];
1228
+ var p3 = [geHermiteCurves[i + 1][0], geHermiteCurves[i + 1][1]];
1229
+ if (p0[0] != p3[0]) {
1230
+ var bezierControlPoints = getBezierCurveFromHermite(m0, m1, p0, p3);
1231
+ var p1 = bezierControlPoints[0];
1232
+ var p2 = bezierControlPoints[1];
1233
+ geBezierCurves[geBezierCurves.length - 1].push(p1[0]);
1234
+ geBezierCurves[geBezierCurves.length - 1].push(p1[1]);
1235
+ geBezierCurves.push([p2[0], p2[1], p3[0], p3[1]]);
1236
+ }
1237
+ else {
1238
+ geBezierCurves[geBezierCurves.length - 1].push(p3[0]);
1239
+ geBezierCurves[geBezierCurves.length - 1].push(p3[1]);
1240
+ }
1241
+ }
1242
+ // 添加关键帧类型
1243
+ return geBezierCurves.map(function (curve, index) {
1244
+ return index === 0 ? [BezierKeyframeType.EASE_OUT, curve]
1245
+ : index === geBezierCurves.length - 1 ? [BezierKeyframeType.EASE_IN, curve]
1246
+ : [BezierKeyframeType.EASE, curve];
1247
+ });
1248
+ }
1165
1249
 
1166
1250
  function getStandardParticleContent(particle) {
1167
1251
  var _a;
@@ -1787,12 +1871,66 @@ function version30Migration(json) {
1787
1871
  result.version = '3.0';
1788
1872
  return result;
1789
1873
  }
1874
+ /**
1875
+ * 2.5 以下版本 赫尔米特数据转换成贝塞尔数据
1876
+ */
1877
+ function version24Migration(json) {
1878
+ // 曲线转换成贝塞尔
1879
+ json.compositions.map(function (comp) {
1880
+ var e_4, _a;
1881
+ try {
1882
+ for (var _b = __values(comp.items), _c = _b.next(); !_c.done; _c = _b.next()) {
1883
+ var item = _c.value;
1884
+ convertParam(item.content);
1885
+ }
1886
+ }
1887
+ catch (e_4_1) { e_4 = { error: e_4_1 }; }
1888
+ finally {
1889
+ try {
1890
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1891
+ }
1892
+ finally { if (e_4) throw e_4.error; }
1893
+ }
1894
+ });
1895
+ return json;
1896
+ }
1897
+ function convertParam(content) {
1898
+ var e_5, _a;
1899
+ if (!content) {
1900
+ return;
1901
+ }
1902
+ try {
1903
+ for (var _b = __values(Object.keys(content)), _c = _b.next(); !_c.done; _c = _b.next()) {
1904
+ var key = _c.value;
1905
+ var value = content[key];
1906
+ var isArray = Array.isArray(value);
1907
+ if (isArray && value.length === 2 && Array.isArray(value[1])) {
1908
+ if (key === 'path') {
1909
+ content[key] = ensureFixedVec3(value);
1910
+ }
1911
+ else {
1912
+ content[key] = ensureFixedNumber(value);
1913
+ }
1914
+ }
1915
+ else if (!isArray && typeof value === 'object') {
1916
+ convertParam(value);
1917
+ }
1918
+ }
1919
+ }
1920
+ catch (e_5_1) { e_5 = { error: e_5_1 }; }
1921
+ finally {
1922
+ try {
1923
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1924
+ }
1925
+ finally { if (e_5) throw e_5.error; }
1926
+ }
1927
+ }
1790
1928
 
1791
1929
  var v0 = /^(\d+)\.(\d+)\.(\d+)(-(\w+)\.\d+)?$/;
1792
1930
  var standardVersion = /^(\d+)\.(\d+)$/;
1793
1931
  var reverseParticle = false;
1794
1932
  function getStandardJSON(json) {
1795
- var _a, _b;
1933
+ var _a;
1796
1934
  if (!json || typeof json !== 'object') {
1797
1935
  throw Error('expect a json object');
1798
1936
  }
@@ -1802,9 +1940,14 @@ function getStandardJSON(json) {
1802
1940
  reverseParticle = ((_a = (/^(\d+)/).exec(json.version)) === null || _a === void 0 ? void 0 : _a[0]) === '0';
1803
1941
  return version30Migration(version21Migration(getStandardJSONFromV0(json)));
1804
1942
  }
1805
- var mainVersion = (_b = standardVersion.exec(json.version)) === null || _b === void 0 ? void 0 : _b[1];
1943
+ var vs = standardVersion.exec(json.version) || [];
1944
+ var mainVersion = Number(vs[1]);
1945
+ var minorVersion = Number(vs[2]);
1806
1946
  if (mainVersion) {
1807
- if (Number(mainVersion) < 3) {
1947
+ if (mainVersion < 2 || (mainVersion === 2 && minorVersion < 4)) {
1948
+ json = version24Migration(json);
1949
+ }
1950
+ if (mainVersion < 3) {
1808
1951
  return version30Migration(version21Migration(json));
1809
1952
  }
1810
1953
  return json;
@@ -2079,6 +2222,7 @@ exports.ensureRGBAValue = ensureRGBAValue;
2079
2222
  exports.ensureValueGetter = ensureValueGetter;
2080
2223
  exports.forEach = forEach;
2081
2224
  exports.generateGUID = generateGUID;
2225
+ exports.getBezierCurveFromHermiteInGE = getBezierCurveFromHermiteInGE;
2082
2226
  exports.getGradientColor = getGradientColor;
2083
2227
  exports.getStandardComposition = getStandardComposition;
2084
2228
  exports.getStandardImage = getStandardImage;