@galacean/effects-specification 1.1.0 → 1.2.0-beta.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.
@@ -1,4 +1,5 @@
1
1
  import type { JSONScene } from '../src/scene';
2
+ import type { BaseContent } from '../src';
2
3
  /**
3
4
  * 2.1 以下版本数据适配(mars-player@2.4.0 及以上版本支持 2.1 以下数据的适配)
4
5
  */
@@ -7,3 +8,8 @@ export declare function version21Migration(json: JSONScene): JSONScene;
7
8
  * 2.2 以下版本数据适配(mars-player@2.5.0 及以上版本支持 2.2 以下数据的适配)
8
9
  */
9
10
  export declare function version22Migration(json: JSONScene): JSONScene;
11
+ /**
12
+ * 2.5 以下版本 赫尔米特数据转换成贝塞尔数据
13
+ */
14
+ export declare function version24Migration(json: JSONScene): JSONScene;
15
+ export declare function convertParam(content: BaseContent): void;
@@ -1,4 +1,4 @@
1
- import type { FixedNumberExpression, RGBAColorValue, ColorExpression, NumberExpression, GradientColor, FixedVec3Expression, vec4, vec3 } from '../src';
1
+ import type { FixedNumberExpression, RGBAColorValue, ColorExpression, NumberExpression, GradientColor, FixedVec3Expression, vec4, vec3, BezierKeyframeValue } from '../src';
2
2
  export declare function arrAdd<T>(arr: T[], item: T): boolean | undefined;
3
3
  /**
4
4
  * @deprecated 请直接使用 Array.prototype.forEach 或 for...of
@@ -21,9 +21,10 @@ export declare function ensureGradient(a: any, normalized?: boolean): GradientCo
21
21
  export declare function colorToArr(hex: string | number[], normalized?: boolean): vec4;
22
22
  export declare function normalizeColor(a: number[]): number[] | undefined;
23
23
  export declare function parsePercent(c: string): number;
24
- export declare function getGradientColor(color: string | Array<string | number[]>, normalized?: boolean): GradientColor | undefined;
24
+ export declare function getGradientColor(color: string | Array<string | number[]> | GradientColor, normalized?: boolean): GradientColor | undefined;
25
25
  export declare function ensureFixedVec3(a: any): FixedVec3Expression | undefined;
26
26
  export declare function objectValueToNumber(o: Record<string, any>): object;
27
27
  export declare function deleteEmptyValue(o: Record<string, any>): object;
28
28
  export declare function quatFromXYZRotation(out: vec4 | number[], x: number, y: number, z: number): vec4;
29
29
  export declare function rotationZYXFromQuat(out: vec3 | number[], quat: vec4): vec3;
30
+ 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: v1.1.0
5
+ * Version: v1.2.0-beta.0
6
6
  */
7
7
 
8
8
  'use strict';
@@ -767,15 +767,27 @@ function ensureFixedNumber(a) {
767
767
  return [ValueType.CONSTANT, a];
768
768
  }
769
769
  if (a) {
770
- if (a[0] === 'lines') {
770
+ var valueType = a[0];
771
+ var valueData = a[1];
772
+ if (Array.isArray(valueType)) {
773
+ // 没有数据类型的数据
774
+ return;
775
+ }
776
+ if (valueType === 'static' || valueType === ValueType.CONSTANT) {
777
+ return [ValueType.CONSTANT, a[1]];
778
+ }
779
+ if (valueType === 'lines') {
771
780
  return [ValueType.LINE, a[1]];
772
781
  }
773
- if (a[0] === 'curve') {
774
- return [ValueType.CURVE, a[1]];
782
+ if (valueType === ValueType.LINE) {
783
+ // @ts-expect-error
784
+ var keyframes = valueData.map(function (data) { return [BezierKeyframeType.LINE, data]; });
785
+ return [ValueType.BEZIER_CURVE, keyframes];
775
786
  }
776
- if (a[0] === 'static') {
777
- return [ValueType.CONSTANT, a[1]];
787
+ if (valueType === 'curve' || valueType === ValueType.CURVE) {
788
+ return [ValueType.BEZIER_CURVE, getBezierCurveFromHermiteInGE(valueData)];
778
789
  }
790
+ return a;
779
791
  }
780
792
  }
781
793
  function ensureFixedNumberWithRandom(a, p) {
@@ -801,6 +813,7 @@ function ensureColorExpression(a, normalized) {
801
813
  else if (a[0] === 'color') {
802
814
  return [ValueType.RGBA_COLOR, colorToArr(a[1], normalized)];
803
815
  }
816
+ return a;
804
817
  }
805
818
  }
806
819
  function ensureNumberExpression(a) {
@@ -868,6 +881,9 @@ function parsePercent(c) {
868
881
  }
869
882
  function getGradientColor(color, normalized) {
870
883
  if (Array.isArray(color)) {
884
+ if (color[0] === ValueType.GRADIENT_COLOR) {
885
+ return color;
886
+ }
871
887
  // @ts-expect-error
872
888
  return (color[0] === 'gradient' || color[0] === 'color') && ensureGradient(color[1], normalized);
873
889
  }
@@ -880,12 +896,36 @@ function ensureFixedVec3(a) {
880
896
  if (a.length === 3) {
881
897
  return [ValueType.CONSTANT_VEC3, a];
882
898
  }
883
- if (a[0] === 'path') {
884
- return [ValueType.LINEAR_PATH, a[1]];
885
- }
886
- if (a[0] === 'bezier') {
887
- return [ValueType.BEZIER_PATH, a[1]];
899
+ var valueType = a[0];
900
+ if (valueType === 'path' ||
901
+ valueType === 'bezier' ||
902
+ valueType === ValueType.BEZIER_PATH ||
903
+ valueType === ValueType.LINEAR_PATH) {
904
+ var valueData = a[1];
905
+ var easing = valueData[0];
906
+ var points = valueData[1];
907
+ var controlPoints = valueData[2];
908
+ var bezierEasing = getBezierCurveFromHermiteInGE(easing);
909
+ // linear path没有controlPoints
910
+ if (!controlPoints) {
911
+ controlPoints = [];
912
+ for (var keyframeIndex = 0; keyframeIndex < points.length; keyframeIndex++) {
913
+ var point = points[keyframeIndex].slice();
914
+ if (keyframeIndex === 0) {
915
+ controlPoints.push(point);
916
+ }
917
+ else if (keyframeIndex < points.length - 1) {
918
+ controlPoints.push(point);
919
+ controlPoints.push(point);
920
+ }
921
+ else {
922
+ controlPoints.push(point);
923
+ }
924
+ }
925
+ }
926
+ return [ValueType.BEZIER_CURVE_PATH, [bezierEasing, points, controlPoints]];
888
927
  }
928
+ return a;
889
929
  }
890
930
  }
891
931
  function objectValueToNumber(o) {
@@ -975,6 +1015,50 @@ function rotationZYXFromQuat(out, quat) {
975
1015
  }
976
1016
  return out;
977
1017
  }
1018
+ function getBezierCurveFromHermite(m0, m1, p0, p3) {
1019
+ var xStart = p0[0];
1020
+ var yStart = p0[1];
1021
+ var xEnd = p3[0];
1022
+ var yEnd = p3[1];
1023
+ var dt = xEnd - xStart;
1024
+ m0 = m0 * dt;
1025
+ m1 = m1 * dt;
1026
+ var bezierControlPoints = [[xStart + (xEnd - xStart) / 3, yStart + m0 / 3], [xEnd - (xEnd - xStart) / 3, yEnd - m1 / 3]];
1027
+ return bezierControlPoints;
1028
+ }
1029
+ function getBezierCurveFromHermiteInGE(geHermiteCurves) {
1030
+ var ymax = -1000000;
1031
+ var ymin = 1000000;
1032
+ for (var i = 0; i < geHermiteCurves.length; i++) {
1033
+ ymax = Math.max(ymax, geHermiteCurves[i][1]);
1034
+ ymin = Math.min(ymin, geHermiteCurves[i][1]);
1035
+ }
1036
+ var geBezierCurves = [[geHermiteCurves[0][0], geHermiteCurves[0][1]]];
1037
+ for (var i = 0; i < geHermiteCurves.length - 1; i++) {
1038
+ var m0 = geHermiteCurves[i][3] * (ymax - ymin);
1039
+ var m1 = geHermiteCurves[i + 1][2] * (ymax - ymin);
1040
+ var p0 = [geHermiteCurves[i][0], geHermiteCurves[i][1]];
1041
+ var p3 = [geHermiteCurves[i + 1][0], geHermiteCurves[i + 1][1]];
1042
+ if (p0[0] != p3[0]) {
1043
+ var bezierControlPoints = getBezierCurveFromHermite(m0, m1, p0, p3);
1044
+ var p1 = bezierControlPoints[0];
1045
+ var p2 = bezierControlPoints[1];
1046
+ geBezierCurves[geBezierCurves.length - 1].push(p1[0]);
1047
+ geBezierCurves[geBezierCurves.length - 1].push(p1[1]);
1048
+ geBezierCurves.push([p2[0], p2[1], p3[0], p3[1]]);
1049
+ }
1050
+ else {
1051
+ geBezierCurves[geBezierCurves.length - 1].push(p3[0]);
1052
+ geBezierCurves[geBezierCurves.length - 1].push(p3[1]);
1053
+ }
1054
+ }
1055
+ // 添加关键帧类型
1056
+ return geBezierCurves.map(function (curve, index) {
1057
+ return index === 0 ? [BezierKeyframeType.EASE_OUT, curve]
1058
+ : index === geBezierCurves.length - 1 ? [BezierKeyframeType.EASE_IN, curve]
1059
+ : [BezierKeyframeType.EASE, curve];
1060
+ });
1061
+ }
978
1062
 
979
1063
  function getStandardParticleContent(particle) {
980
1064
  var _a;
@@ -1386,12 +1470,63 @@ function version22Migration(json) {
1386
1470
  });
1387
1471
  return json;
1388
1472
  }
1473
+ /**
1474
+ * 2.5 以下版本 赫尔米特数据转换成贝塞尔数据
1475
+ */
1476
+ function version24Migration(json) {
1477
+ // 曲线转换成贝塞尔
1478
+ json.compositions.map(function (comp) {
1479
+ var e_1, _a;
1480
+ try {
1481
+ for (var _b = __values(comp.items), _c = _b.next(); !_c.done; _c = _b.next()) {
1482
+ var item = _c.value;
1483
+ convertParam(item.content);
1484
+ }
1485
+ }
1486
+ catch (e_1_1) { e_1 = { error: e_1_1 }; }
1487
+ finally {
1488
+ try {
1489
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1490
+ }
1491
+ finally { if (e_1) throw e_1.error; }
1492
+ }
1493
+ });
1494
+ return json;
1495
+ }
1496
+ function convertParam(content) {
1497
+ var e_2, _a;
1498
+ try {
1499
+ for (var _b = __values(Object.keys(content)), _c = _b.next(); !_c.done; _c = _b.next()) {
1500
+ var key = _c.value;
1501
+ var value = content[key];
1502
+ var isArray = Array.isArray(value);
1503
+ if (isArray && value.length === 2 && Array.isArray(value[1])) {
1504
+ if (key === 'path') {
1505
+ content[key] = ensureFixedVec3(value);
1506
+ }
1507
+ else {
1508
+ content[key] = ensureFixedNumber(value);
1509
+ }
1510
+ }
1511
+ else if (!isArray && typeof value === 'object') {
1512
+ convertParam(value);
1513
+ }
1514
+ }
1515
+ }
1516
+ catch (e_2_1) { e_2 = { error: e_2_1 }; }
1517
+ finally {
1518
+ try {
1519
+ if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
1520
+ }
1521
+ finally { if (e_2) throw e_2.error; }
1522
+ }
1523
+ }
1389
1524
 
1390
1525
  var v0 = /^(\d+)\.(\d+)\.(\d+)(-(\w+)\.\d+)?$/;
1391
1526
  var standardVersion = /^(\d+)\.(\d+)$/;
1392
1527
  var reverseParticle = false;
1393
1528
  function getStandardJSON(json) {
1394
- var _a, _b;
1529
+ var _a;
1395
1530
  if (!json || typeof json !== 'object') {
1396
1531
  throw Error('expect a json object');
1397
1532
  }
@@ -1401,9 +1536,14 @@ function getStandardJSON(json) {
1401
1536
  reverseParticle = ((_a = (/^(\d+)/).exec(json.version)) === null || _a === void 0 ? void 0 : _a[0]) === '0';
1402
1537
  return version21Migration(getStandardJSONFromV0(json));
1403
1538
  }
1404
- var mainVersion = (_b = standardVersion.exec(json.version)) === null || _b === void 0 ? void 0 : _b[1];
1539
+ var vs = standardVersion.exec(json.version) || [];
1540
+ var mainVersion = Number(vs[1]);
1541
+ var minorVersion = Number(vs[2]);
1405
1542
  if (mainVersion) {
1406
- if (Number(mainVersion) < 2) {
1543
+ if (mainVersion < 2 || (mainVersion === 2 && minorVersion < 4)) {
1544
+ version24Migration(json);
1545
+ }
1546
+ if (mainVersion < 2) {
1407
1547
  return version21Migration(json);
1408
1548
  }
1409
1549
  return json;
@@ -1684,6 +1824,7 @@ exports.ensureNumberExpression = ensureNumberExpression;
1684
1824
  exports.ensureRGBAValue = ensureRGBAValue;
1685
1825
  exports.ensureValueGetter = ensureValueGetter;
1686
1826
  exports.forEach = forEach;
1827
+ exports.getBezierCurveFromHermiteInGE = getBezierCurveFromHermiteInGE;
1687
1828
  exports.getGradientColor = getGradientColor;
1688
1829
  exports.getStandardComposition = getStandardComposition;
1689
1830
  exports.getStandardImage = getStandardImage;