@galacean/engine-core 0.9.13 → 0.9.14

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/main.js CHANGED
@@ -21469,8 +21469,6 @@ var DirtyFlag;
21469
21469
  * @internal
21470
21470
  */ var AnimationCurveOwner = /*#__PURE__*/ function() {
21471
21471
  function AnimationCurveOwner(target, type, property, cureType) {
21472
- this.crossCurveMark = 0;
21473
- this.hasSavedDefaultValue = false;
21474
21472
  this.baseEvaluateData = {
21475
21473
  curKeyframeIndex: 0,
21476
21474
  value: null
@@ -21483,7 +21481,7 @@ var DirtyFlag;
21483
21481
  this.type = type;
21484
21482
  this.property = property;
21485
21483
  this.component = target.getComponent(type);
21486
- this._cureType = cureType;
21484
+ this.cureType = cureType;
21487
21485
  var assemblerType = AnimationCurveOwner.getAssemblerType(type, property);
21488
21486
  this._assembler = new assemblerType();
21489
21487
  this._assembler.initialize(this);
@@ -21492,89 +21490,80 @@ var DirtyFlag;
21492
21490
  }
21493
21491
  }
21494
21492
  var _proto = AnimationCurveOwner.prototype;
21495
- _proto.evaluateAndApplyValue = function evaluateAndApplyValue(curve, time, layerWeight, additive) {
21496
- if (curve.keys.length) {
21497
- if (additive) {
21498
- var value = curve._evaluateAdditive(time, this.baseEvaluateData);
21499
- var cureType = this._cureType;
21500
- if (cureType._isReferenceType) {
21501
- cureType._additiveValue(value, layerWeight, this.referenceTargetValue);
21502
- } else {
21503
- var assembler = this._assembler;
21504
- var originValue = assembler.getTargetValue();
21505
- var additiveValue = cureType._additiveValue(value, layerWeight, originValue);
21506
- assembler.setTargetValue(additiveValue);
21507
- }
21508
- } else {
21509
- var value1 = curve._evaluate(time, this.baseEvaluateData);
21510
- this._applyValue(value1, layerWeight);
21511
- }
21512
- }
21493
+ _proto.evaluateValue = function evaluateValue(curve, time, additive) {
21494
+ return additive ? curve._evaluateAdditive(time, this.baseEvaluateData) : curve._evaluate(time, this.baseEvaluateData);
21513
21495
  };
21514
- _proto.crossFadeAndApplyValue = function crossFadeAndApplyValue(srcCurve, destCurve, srcTime, destTime, crossWeight, layerWeight, additive) {
21515
- var srcValue = srcCurve && srcCurve.keys.length ? additive ? srcCurve._evaluateAdditive(srcTime, this.baseEvaluateData) : srcCurve._evaluate(srcTime, this.baseEvaluateData) : additive ? this._cureType._getZeroValue(this.baseEvaluateData.value) : this.defaultValue;
21516
- var destValue = destCurve && destCurve.keys.length ? additive ? destCurve._evaluateAdditive(destTime, this.crossEvaluateData) : destCurve._evaluate(destTime, this.crossEvaluateData) : additive ? this._cureType._getZeroValue(this.crossEvaluateData.value) : this.defaultValue;
21517
- this._applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive);
21496
+ _proto.evaluateCrossFadeValue = function evaluateCrossFadeValue(srcCurve, destCurve, srcTime, destTime, crossWeight, additive) {
21497
+ var srcValue = srcCurve && srcCurve.keys.length ? additive ? srcCurve._evaluateAdditive(srcTime, this.baseEvaluateData) : srcCurve._evaluate(srcTime, this.baseEvaluateData) : additive ? this.cureType._getZeroValue(this.baseEvaluateData.value) : this.defaultValue;
21498
+ var destValue = destCurve && destCurve.keys.length ? additive ? destCurve._evaluateAdditive(destTime, this.crossEvaluateData) : destCurve._evaluate(destTime, this.crossEvaluateData) : additive ? this.cureType._getZeroValue(this.crossEvaluateData.value) : this.defaultValue;
21499
+ return this._lerpValue(srcValue, destValue, crossWeight);
21518
21500
  };
21519
- _proto.crossFadeFromPoseAndApplyValue = function crossFadeFromPoseAndApplyValue(destCurve, destTime, crossWeight, layerWeight, additive) {
21520
- var srcValue = additive ? this._cureType._subtractValue(this.fixedPoseValue, this.defaultValue, this.baseEvaluateData.value) : this.fixedPoseValue;
21521
- var destValue = destCurve && destCurve.keys.length ? additive ? destCurve._evaluateAdditive(destTime, this.crossEvaluateData) : destCurve._evaluate(destTime, this.crossEvaluateData) : additive ? this._cureType._getZeroValue(this.crossEvaluateData.value) : this.defaultValue;
21522
- this._applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive);
21501
+ _proto.crossFadeFromPoseAndApplyValue = function crossFadeFromPoseAndApplyValue(destCurve, destTime, crossWeight, additive) {
21502
+ var srcValue = additive ? this.cureType._subtractValue(this.fixedPoseValue, this.defaultValue, this.baseEvaluateData.value) : this.fixedPoseValue;
21503
+ var destValue = destCurve && destCurve.keys.length ? additive ? destCurve._evaluateAdditive(destTime, this.crossEvaluateData) : destCurve._evaluate(destTime, this.crossEvaluateData) : additive ? this.cureType._getZeroValue(this.crossEvaluateData.value) : this.defaultValue;
21504
+ return this._lerpValue(srcValue, destValue, crossWeight);
21523
21505
  };
21524
21506
  _proto.revertDefaultValue = function revertDefaultValue() {
21525
21507
  this._assembler.setTargetValue(this.defaultValue);
21526
21508
  };
21509
+ _proto.getEvaluateValue = function getEvaluateValue(out) {
21510
+ if (this.cureType._isReferenceType) {
21511
+ this.cureType._copyValue(this.baseEvaluateData.value, out);
21512
+ return out;
21513
+ } else {
21514
+ return this.baseEvaluateData.value;
21515
+ }
21516
+ };
21527
21517
  _proto.saveDefaultValue = function saveDefaultValue() {
21528
- if (this._cureType._isReferenceType) {
21529
- this._cureType._copyValue(this.referenceTargetValue, this.defaultValue);
21518
+ if (this.cureType._isReferenceType) {
21519
+ this.cureType._copyValue(this.referenceTargetValue, this.defaultValue);
21530
21520
  } else {
21531
21521
  this.defaultValue = this._assembler.getTargetValue();
21532
21522
  }
21533
- this.hasSavedDefaultValue = true;
21534
21523
  };
21535
21524
  _proto.saveFixedPoseValue = function saveFixedPoseValue() {
21536
- if (this._cureType._isReferenceType) {
21537
- this._cureType._copyValue(this.referenceTargetValue, this.fixedPoseValue);
21525
+ if (this.cureType._isReferenceType) {
21526
+ this.cureType._copyValue(this.referenceTargetValue, this.fixedPoseValue);
21538
21527
  } else {
21539
21528
  this.fixedPoseValue = this._assembler.getTargetValue();
21540
21529
  }
21541
21530
  };
21542
- _proto._applyValue = function _applyValue(value, weight) {
21543
- if (weight === 1.0) {
21544
- if (this._cureType._isReferenceType) {
21545
- this._cureType._copyValue(value, this.referenceTargetValue);
21531
+ _proto.applyValue = function applyValue(value, weight, additive) {
21532
+ var cureType = this.cureType;
21533
+ if (additive) {
21534
+ if (cureType._isReferenceType) {
21535
+ cureType._additiveValue(value, weight, this.referenceTargetValue);
21546
21536
  } else {
21547
- this._assembler.setTargetValue(value);
21537
+ var assembler = this._assembler;
21538
+ var originValue = assembler.getTargetValue();
21539
+ var additiveValue = cureType._additiveValue(value, weight, originValue);
21540
+ assembler.setTargetValue(additiveValue);
21548
21541
  }
21549
21542
  } else {
21550
- if (this._cureType._isReferenceType) {
21551
- var targetValue = this.referenceTargetValue;
21552
- this._cureType._lerpValue(targetValue, value, weight, targetValue);
21543
+ if (weight === 1.0) {
21544
+ if (cureType._isReferenceType) {
21545
+ cureType._copyValue(value, this.referenceTargetValue);
21546
+ } else {
21547
+ this._assembler.setTargetValue(value);
21548
+ }
21553
21549
  } else {
21554
- var originValue = this._assembler.getTargetValue();
21555
- var lerpValue = this._cureType._lerpValue(originValue, value, weight);
21556
- this._assembler.setTargetValue(lerpValue);
21550
+ if (cureType._isReferenceType) {
21551
+ var targetValue = this.referenceTargetValue;
21552
+ cureType._lerpValue(targetValue, value, weight, targetValue);
21553
+ } else {
21554
+ var originValue1 = this._assembler.getTargetValue();
21555
+ var lerpValue = cureType._lerpValue(originValue1, value, weight);
21556
+ this._assembler.setTargetValue(lerpValue);
21557
+ }
21557
21558
  }
21558
21559
  }
21559
21560
  };
21560
- _proto._applyCrossValue = function _applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive) {
21561
- var out;
21562
- if (this._cureType._isReferenceType) {
21563
- out = this.baseEvaluateData.value;
21564
- this._cureType._lerpValue(srcValue, destValue, crossWeight, out);
21561
+ _proto._lerpValue = function _lerpValue(srcValue, destValue, crossWeight) {
21562
+ if (this.cureType._isReferenceType) {
21563
+ return this.cureType._lerpValue(srcValue, destValue, crossWeight, this.baseEvaluateData.value);
21565
21564
  } else {
21566
- out = this._cureType._lerpValue(srcValue, destValue, crossWeight);
21567
- }
21568
- if (additive) {
21569
- if (this._cureType._isReferenceType) {
21570
- this._cureType._additiveValue(out, layerWeight, this.referenceTargetValue);
21571
- } else {
21572
- var originValue = this._assembler.getTargetValue();
21573
- var lerpValue = this._cureType._additiveValue(out, layerWeight, originValue);
21574
- this._assembler.setTargetValue(lerpValue);
21575
- }
21576
- } else {
21577
- this._applyValue(out, layerWeight);
21565
+ this.baseEvaluateData.value = this.cureType._lerpValue(srcValue, destValue, crossWeight);
21566
+ return this.baseEvaluateData.value;
21578
21567
  }
21579
21568
  };
21580
21569
  AnimationCurveOwner.registerAssembler = function registerAssembler(componentType, property, assemblerType) {
@@ -21668,6 +21657,27 @@ AnimationCurveOwner.registerAssembler(Transform, "scale", ScaleAnimationCurveOwn
21668
21657
  }();
21669
21658
  AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights", BlendShapeWeightsAnimationCurveOwnerAssembler);
21670
21659
 
21660
+ /**
21661
+ * @internal
21662
+ */ var AnimationCurveLayerOwner = /*#__PURE__*/ function() {
21663
+ function AnimationCurveLayerOwner() {
21664
+ this.crossCurveMark = 0;
21665
+ }
21666
+ var _proto = AnimationCurveLayerOwner.prototype;
21667
+ _proto.initFinalValue = function initFinalValue() {
21668
+ var _this_curveOwner = this.curveOwner, cureType = _this_curveOwner.cureType, defaultValue = _this_curveOwner.defaultValue;
21669
+ if (cureType._isReferenceType) {
21670
+ cureType._copyValue(defaultValue, this.finalValue);
21671
+ } else {
21672
+ this.finalValue = defaultValue;
21673
+ }
21674
+ };
21675
+ _proto.saveFinalValue = function saveFinalValue() {
21676
+ this.finalValue = this.curveOwner.getEvaluateValue(this.finalValue);
21677
+ };
21678
+ return AnimationCurveLayerOwner;
21679
+ }();
21680
+
21671
21681
  /**
21672
21682
  * Associate AnimationCurve and the Entity
21673
21683
  */ var AnimationClipCurveBinding = /*#__PURE__*/ function() {
@@ -21681,10 +21691,22 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
21681
21691
  var curveType = this.curve.constructor;
21682
21692
  var owner = new AnimationCurveOwner(entity, this.type, this.property, curveType);
21683
21693
  curveType._initializeOwner(owner);
21694
+ owner.saveDefaultValue();
21684
21695
  return owner;
21685
21696
  };
21686
21697
  /**
21687
21698
  * @internal
21699
+ */ _proto._createCurveLayerOwner = function _createCurveLayerOwner(owner) {
21700
+ var curveType = this.curve.constructor;
21701
+ var layerOwner = new AnimationCurveLayerOwner();
21702
+ curveType._initializeLayerOwner(layerOwner);
21703
+ layerOwner.curveOwner = owner;
21704
+ // If curve.keys.length is 0, updateFinishedState will assign 0 to the target, causing an error, so initialize by assigning defaultValue to finalValue.
21705
+ layerOwner.initFinalValue();
21706
+ return layerOwner;
21707
+ };
21708
+ /**
21709
+ * @internal
21688
21710
  */ _proto._getTempCurveOwner = function _getTempCurveOwner(entity) {
21689
21711
  var instanceId = entity.instanceId;
21690
21712
  if (!this._tempCurveOwner[instanceId]) {
@@ -21764,7 +21786,8 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
21764
21786
  var targetEntity = entity.findByPath(curveData.relativePath);
21765
21787
  if (targetEntity) {
21766
21788
  var curveOwner = curveData._getTempCurveOwner(targetEntity);
21767
- curveOwner.evaluateAndApplyValue(curveData.curve, time, 1, false);
21789
+ var value = curveOwner.evaluateValue(curveData.curve, time, false);
21790
+ curveOwner.applyValue(value, 1, false);
21768
21791
  }
21769
21792
  }
21770
21793
  };
@@ -21908,6 +21931,7 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
21908
21931
  break;
21909
21932
  }
21910
21933
  }
21934
+ evaluateData.value = value;
21911
21935
  return value;
21912
21936
  };
21913
21937
  /**
@@ -21964,6 +21988,11 @@ exports.AnimationArrayCurve = (_AnimationArrayCurve = /*#__PURE__*/ function(Ani
21964
21988
  };
21965
21989
  /**
21966
21990
  * @internal
21991
+ */ AnimationArrayCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
21992
+ owner.finalValue = [];
21993
+ };
21994
+ /**
21995
+ * @internal
21967
21996
  */ AnimationArrayCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
21968
21997
  for(var i = 0, n = out.length; i < n; ++i){
21969
21998
  var src = srcValue[i];
@@ -22054,6 +22083,11 @@ exports.AnimationBoolCurve = (_AnimationBoolCurve = /*#__PURE__*/ function(Anima
22054
22083
  };
22055
22084
  /**
22056
22085
  * @internal
22086
+ */ AnimationBoolCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22087
+ owner.finalValue = false;
22088
+ };
22089
+ /**
22090
+ * @internal
22057
22091
  */ AnimationBoolCurve._lerpValue = function _lerpValue(srcValue, destValue) {
22058
22092
  return destValue;
22059
22093
  };
@@ -22111,6 +22145,11 @@ exports.AnimationColorCurve = (_AnimationColorCurve = /*#__PURE__*/ function(Ani
22111
22145
  };
22112
22146
  /**
22113
22147
  * @internal
22148
+ */ AnimationColorCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22149
+ owner.finalValue = new engineMath.Color();
22150
+ };
22151
+ /**
22152
+ * @internal
22114
22153
  */ AnimationColorCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22115
22154
  engineMath.Color.lerp(srcValue, destValue, weight, out);
22116
22155
  return out;
@@ -22218,6 +22257,12 @@ exports.AnimationFloatArrayCurve = (_AnimationFloatArrayCurve = /*#__PURE__*/ fu
22218
22257
  };
22219
22258
  /**
22220
22259
  * @internal
22260
+ */ AnimationFloatArrayCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22261
+ var size = owner.curveOwner.referenceTargetValue.length;
22262
+ owner.finalValue = new Float32Array(size);
22263
+ };
22264
+ /**
22265
+ * @internal
22221
22266
  */ AnimationFloatArrayCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22222
22267
  for(var i = 0, n = out.length; i < n; ++i){
22223
22268
  var src = srcValue[i];
@@ -22308,6 +22353,11 @@ exports.AnimationFloatCurve = (_AnimationFloatCurve = /*#__PURE__*/ function(Ani
22308
22353
  };
22309
22354
  /**
22310
22355
  * @internal
22356
+ */ AnimationFloatCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22357
+ owner.finalValue = 0;
22358
+ };
22359
+ /**
22360
+ * @internal
22311
22361
  */ AnimationFloatCurve._lerpValue = function _lerpValue(srcValue, destValue, crossWeight) {
22312
22362
  return srcValue + (destValue - srcValue) * crossWeight;
22313
22363
  };
@@ -22377,6 +22427,11 @@ exports.AnimationQuaternionCurve = (_AnimationQuaternionCurve = /*#__PURE__*/ fu
22377
22427
  };
22378
22428
  /**
22379
22429
  * @internal
22430
+ */ AnimationQuaternionCurve1._initializeLayerOwner = function _initializeLayerOwner(owner) {
22431
+ owner.finalValue = new engineMath.Quaternion();
22432
+ };
22433
+ /**
22434
+ * @internal
22380
22435
  */ AnimationQuaternionCurve1._lerpValue = function _lerpValue(src, dest, weight, out) {
22381
22436
  engineMath.Quaternion.slerp(src, dest, weight, out);
22382
22437
  return out;
@@ -22481,6 +22536,11 @@ exports.AnimationVector2Curve = (_AnimationVector2Curve = /*#__PURE__*/ function
22481
22536
  };
22482
22537
  /**
22483
22538
  * @internal
22539
+ */ AnimationVector2Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22540
+ owner.finalValue = new engineMath.Vector2();
22541
+ };
22542
+ /**
22543
+ * @internal
22484
22544
  */ AnimationVector2Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22485
22545
  engineMath.Vector2.lerp(srcValue, destValue, weight, out);
22486
22546
  return out;
@@ -22566,6 +22626,11 @@ exports.AnimationVector3Curve = (_AnimationVector3Curve = /*#__PURE__*/ function
22566
22626
  };
22567
22627
  /**
22568
22628
  * @internal
22629
+ */ AnimationVector3Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22630
+ owner.finalValue = new engineMath.Vector3();
22631
+ };
22632
+ /**
22633
+ * @internal
22569
22634
  */ AnimationVector3Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22570
22635
  engineMath.Vector3.lerp(srcValue, destValue, weight, out);
22571
22636
  return out;
@@ -22663,6 +22728,11 @@ exports.AnimationVector4Curve = (_AnimationVector4Curve = /*#__PURE__*/ function
22663
22728
  };
22664
22729
  /**
22665
22730
  * @internal
22731
+ */ AnimationVector4Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22732
+ owner.finalValue = new engineMath.Vector4();
22733
+ };
22734
+ /**
22735
+ * @internal
22666
22736
  */ AnimationVector4Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22667
22737
  engineMath.Vector4.lerp(srcValue, destValue, weight, out);
22668
22738
  return out;
@@ -22772,6 +22842,7 @@ exports.AnimatorLayerBlendingMode = void 0;
22772
22842
  LayerState[LayerState[/** Playing state. */ "Playing"] = 1] = "Playing";
22773
22843
  LayerState[LayerState[/** CrossFading state. */ "CrossFading"] = 2] = "CrossFading";
22774
22844
  LayerState[LayerState[/** FixedCrossFading state. */ "FixedCrossFading"] = 3] = "FixedCrossFading";
22845
+ LayerState[LayerState[/** Finished state. */ "Finished"] = 4] = "Finished";
22775
22846
  })(LayerState || (LayerState = {}));
22776
22847
 
22777
22848
  /**
@@ -22843,12 +22914,14 @@ exports.AnimatorLayerBlendingMode = void 0;
22843
22914
  * @internal
22844
22915
  */ var AnimatorLayerData = /*#__PURE__*/ function() {
22845
22916
  function AnimatorLayerData() {
22917
+ this.curveOwnerPool = Object.create(null);
22846
22918
  this.animatorStateDataMap = {};
22847
22919
  this.srcPlayData = new AnimatorStatePlayData();
22848
22920
  this.destPlayData = new AnimatorStatePlayData();
22849
22921
  this.layerState = LayerState.Standby;
22850
22922
  this.crossCurveMark = 0;
22851
22923
  this.manuallyTransition = new AnimatorStateTransition();
22924
+ this.crossLayerOwnerCollection = [];
22852
22925
  }
22853
22926
  var _proto = AnimatorLayerData.prototype;
22854
22927
  _proto.switchPlayData = function switchPlayData() {
@@ -22863,7 +22936,7 @@ exports.AnimatorLayerBlendingMode = void 0;
22863
22936
  /**
22864
22937
  * @internal
22865
22938
  */ var AnimatorStateData = function AnimatorStateData() {
22866
- this.curveOwners = [];
22939
+ this.curveLayerOwner = [];
22867
22940
  this.eventHandlers = [];
22868
22941
  };
22869
22942
 
@@ -22877,8 +22950,8 @@ exports.AnimatorLayerBlendingMode = void 0;
22877
22950
  /** Culling mode of this Animator. */ _this.cullingMode = exports.AnimatorCullingMode.None;
22878
22951
  /** The playback speed of the Animator, 1.0 is normal playback speed. */ _this.speed = 1.0;
22879
22952
  _this._animatorLayersData = [];
22880
- _this._crossOwnerCollection = [];
22881
- _this._animationCurveOwners = [];
22953
+ _this._curveOwnerPool = Object.create(null);
22954
+ _this._needRevertCurveOwners = [];
22882
22955
  _this._animationEventHandlerPool = new ClassPool(AnimationEventHandler);
22883
22956
  _this._tempAnimatorStateInfo = {
22884
22957
  layerIndex: -1,
@@ -22901,7 +22974,7 @@ exports.AnimatorLayerBlendingMode = void 0;
22901
22974
  this._reset();
22902
22975
  }
22903
22976
  var stateInfo = this._getAnimatorStateInfo(stateName, layerIndex);
22904
- var state = stateInfo.state;
22977
+ var state = stateInfo.state, playLayerIndex = stateInfo.layerIndex;
22905
22978
  if (!state) {
22906
22979
  return;
22907
22980
  }
@@ -22910,9 +22983,8 @@ exports.AnimatorLayerBlendingMode = void 0;
22910
22983
  return;
22911
22984
  }
22912
22985
  var animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
22913
- //TODO CM: Not consider same stateName, but different animation
22914
- var animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData);
22915
- this._preparePlay(animatorLayerData, state, animatorStateData);
22986
+ var animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData, playLayerIndex);
22987
+ this._preparePlay(animatorLayerData, state);
22916
22988
  animatorLayerData.layerState = LayerState.Playing;
22917
22989
  animatorLayerData.srcPlayData.reset(state, animatorStateData, state._getDuration() * normalizedTimeOffset);
22918
22990
  };
@@ -22963,6 +23035,7 @@ exports.AnimatorLayerBlendingMode = void 0;
22963
23035
  return;
22964
23036
  }
22965
23037
  deltaTime *= this.speed;
23038
+ this._revertCurveOwners();
22966
23039
  for(var i1 = 0, n1 = animatorController.layers.length; i1 < n1; i1++){
22967
23040
  var animatorLayerData = this._getAnimatorLayerData(i1);
22968
23041
  if (animatorLayerData.layerState === LayerState.Standby) {
@@ -23003,17 +23076,17 @@ exports.AnimatorLayerBlendingMode = void 0;
23003
23076
  /**
23004
23077
  * @internal
23005
23078
  */ _proto._reset = function _reset() {
23006
- var _this = this, animationCurveOwners = _this._animationCurveOwners;
23079
+ var _this = this, animationCurveOwners = _this._curveOwnerPool;
23007
23080
  for(var instanceId in animationCurveOwners){
23008
23081
  var propertyOwners = animationCurveOwners[instanceId];
23009
23082
  for(var property in propertyOwners){
23010
23083
  var owner = propertyOwners[property];
23011
- owner.hasSavedDefaultValue && owner.revertDefaultValue();
23084
+ owner.revertDefaultValue();
23012
23085
  }
23013
23086
  }
23014
23087
  this._animatorLayersData.length = 0;
23015
- this._crossOwnerCollection.length = 0;
23016
- this._animationCurveOwners.length = 0;
23088
+ this._needRevertCurveOwners.length = 0;
23089
+ this._curveOwnerPool = {};
23017
23090
  this._animationEventHandlerPool.resetPool();
23018
23091
  if (this._controllerUpdateFlag) {
23019
23092
  this._controllerUpdateFlag.flag = false;
@@ -23040,38 +23113,51 @@ exports.AnimatorLayerBlendingMode = void 0;
23040
23113
  stateInfo.state = state;
23041
23114
  return stateInfo;
23042
23115
  };
23043
- _proto._saveDefaultValues = function _saveDefaultValues(stateData) {
23044
- var curveOwners = stateData.curveOwners;
23045
- for(var i = curveOwners.length - 1; i >= 0; i--){
23046
- var _curveOwners_i;
23047
- (_curveOwners_i = curveOwners[i]) == null ? void 0 : _curveOwners_i.saveDefaultValue();
23048
- }
23049
- };
23050
- _proto._getAnimatorStateData = function _getAnimatorStateData(stateName, animatorState, animatorLayerData) {
23116
+ _proto._getAnimatorStateData = function _getAnimatorStateData(stateName, animatorState, animatorLayerData, layerIndex) {
23051
23117
  var animatorStateDataMap = animatorLayerData.animatorStateDataMap;
23052
23118
  var animatorStateData = animatorStateDataMap[stateName];
23053
23119
  if (!animatorStateData) {
23054
23120
  animatorStateData = new AnimatorStateData();
23055
23121
  animatorStateDataMap[stateName] = animatorStateData;
23056
- this._saveAnimatorStateData(animatorState, animatorStateData);
23122
+ this._saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData, layerIndex);
23057
23123
  this._saveAnimatorEventHandlers(animatorState, animatorStateData);
23058
23124
  }
23059
23125
  return animatorStateData;
23060
23126
  };
23061
- _proto._saveAnimatorStateData = function _saveAnimatorStateData(animatorState, animatorStateData) {
23062
- var _this = this, entity = _this.entity, animationCureOwners = _this._animationCurveOwners;
23063
- var curveOwners = animatorStateData.curveOwners;
23127
+ _proto._saveAnimatorStateData = function _saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData, layerIndex) {
23128
+ var _this = this, entity = _this.entity, curveOwnerPool = _this._curveOwnerPool;
23129
+ var curveLayerOwner = animatorStateData.curveLayerOwner;
23130
+ var layerCurveOwnerPool = animatorLayerData.curveOwnerPool;
23064
23131
  var _animatorState_clip = animatorState.clip, curves = _animatorState_clip._curveBindings;
23065
23132
  for(var i = curves.length - 1; i >= 0; i--){
23066
23133
  var curve = curves[i];
23067
23134
  var targetEntity = curve.relativePath === "" ? entity : entity.findByPath(curve.relativePath);
23068
23135
  if (targetEntity) {
23136
+ var _curveOwnerPool, _instanceId, _propertyOwners, _property, _layerCurveOwnerPool, _instanceId1, _layerPropertyOwners, _property1;
23069
23137
  var property = curve.property;
23070
23138
  var instanceId = targetEntity.instanceId;
23071
- var propertyOwners = animationCureOwners[instanceId] || (animationCureOwners[instanceId] = {});
23072
- curveOwners[i] = propertyOwners[property] || (propertyOwners[property] = curve._createCurveOwner(targetEntity));
23139
+ var needRevert = false;
23140
+ var baseAnimatorLayerData = this._animatorLayersData[0];
23141
+ var baseLayerCurveOwnerPool = baseAnimatorLayerData.curveOwnerPool;
23142
+ if (this.animatorController.layers[layerIndex].blendingMode === exports.AnimatorLayerBlendingMode.Additive && layerIndex > 0 && !(baseLayerCurveOwnerPool[instanceId] && baseLayerCurveOwnerPool[instanceId][property])) {
23143
+ needRevert = true;
23144
+ }
23145
+ // Get owner
23146
+ var propertyOwners = (_curveOwnerPool = curveOwnerPool)[_instanceId = instanceId] || (_curveOwnerPool[_instanceId] = Object.create(null));
23147
+ var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity));
23148
+ //@todo: There is performance waste here, which will be handled together with organizing AnimatorStateData later. The logic is changing from runtime to initialization.
23149
+ if (needRevert) {
23150
+ this._needRevertCurveOwners.push(owner);
23151
+ } else {
23152
+ var index = this._needRevertCurveOwners.indexOf(owner);
23153
+ index > -1 && this._needRevertCurveOwners.splice(index, 1);
23154
+ }
23155
+ // Get layer owner
23156
+ var layerPropertyOwners = (_layerCurveOwnerPool = layerCurveOwnerPool)[_instanceId1 = instanceId] || (_layerCurveOwnerPool[_instanceId1] = Object.create(null));
23157
+ var layerOwner = (_layerPropertyOwners = layerPropertyOwners)[_property1 = property] || (_layerPropertyOwners[_property1] = curve._createCurveLayerOwner(owner));
23158
+ curveLayerOwner[i] = layerOwner;
23073
23159
  } else {
23074
- curveOwners[i] = null;
23160
+ curveLayerOwner[i] = null;
23075
23161
  console.warn("The entity don't have the child entity which path is " + curve.relativePath + ".");
23076
23162
  }
23077
23163
  }
@@ -23099,65 +23185,60 @@ exports.AnimatorLayerBlendingMode = void 0;
23099
23185
  };
23100
23186
  _proto._clearCrossData = function _clearCrossData(animatorLayerData) {
23101
23187
  animatorLayerData.crossCurveMark++;
23102
- this._crossOwnerCollection.length = 0;
23188
+ animatorLayerData.crossLayerOwnerCollection.length = 0;
23103
23189
  };
23104
- _proto._addCrossCurveData = function _addCrossCurveData(crossCurveData, owner, curCurveIndex, nextCurveIndex) {
23105
- owner.crossSrcCurveIndex = curCurveIndex;
23106
- owner.crossDestCurveIndex = nextCurveIndex;
23107
- crossCurveData.push(owner);
23190
+ _proto._addCrossOwner = function _addCrossOwner(animatorLayerData, layerOwner, curCurveIndex, nextCurveIndex) {
23191
+ layerOwner.crossSrcCurveIndex = curCurveIndex;
23192
+ layerOwner.crossDestCurveIndex = nextCurveIndex;
23193
+ animatorLayerData.crossLayerOwnerCollection.push(layerOwner);
23108
23194
  };
23109
23195
  _proto._prepareCrossFading = function _prepareCrossFading(animatorLayerData) {
23110
- var crossCurveData = this._crossOwnerCollection;
23111
- var crossCurveMark = animatorLayerData.crossCurveMark;
23112
23196
  // Add src cross curve data.
23113
- this._prepareSrcCrossData(crossCurveData, animatorLayerData.srcPlayData, crossCurveMark, false);
23197
+ this._prepareSrcCrossData(animatorLayerData, false);
23114
23198
  // Add dest cross curve data.
23115
- this._prepareDestCrossData(crossCurveData, animatorLayerData.destPlayData, crossCurveMark, false);
23199
+ this._prepareDestCrossData(animatorLayerData, false);
23116
23200
  };
23117
23201
  _proto._prepareStandbyCrossFading = function _prepareStandbyCrossFading(animatorLayerData) {
23118
- var crossOwnerCollection = this._crossOwnerCollection;
23119
- var srcPlayData = animatorLayerData.srcPlayData, crossCurveMark = animatorLayerData.crossCurveMark;
23120
23202
  // Standby have two sub state, one is never play, one is finished, never play srcPlayData.state is null.
23121
- srcPlayData.state && this._prepareSrcCrossData(crossOwnerCollection, srcPlayData, crossCurveMark, true);
23203
+ animatorLayerData.srcPlayData.state && this._prepareSrcCrossData(animatorLayerData, true);
23122
23204
  // Add dest cross curve data.
23123
- this._prepareDestCrossData(crossOwnerCollection, animatorLayerData.destPlayData, crossCurveMark, true);
23205
+ this._prepareDestCrossData(animatorLayerData, true);
23124
23206
  };
23125
23207
  _proto._prepareFixedPoseCrossFading = function _prepareFixedPoseCrossFading(animatorLayerData) {
23126
- var crossOwnerCollection = this._crossOwnerCollection;
23208
+ var crossLayerOwnerCollection = animatorLayerData.crossLayerOwnerCollection;
23127
23209
  // Save current cross curve data owner fixed pose.
23128
- for(var i = crossOwnerCollection.length - 1; i >= 0; i--){
23129
- var item = crossOwnerCollection[i];
23130
- item.saveFixedPoseValue();
23210
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
23211
+ var layerOwner = crossLayerOwnerCollection[i];
23212
+ if (!layerOwner) continue;
23213
+ layerOwner.curveOwner.saveFixedPoseValue();
23131
23214
  // Reset destCurveIndex When fixed pose crossFading again.
23132
- item.crossDestCurveIndex = -1;
23215
+ layerOwner.crossDestCurveIndex = -1;
23133
23216
  }
23134
23217
  // prepare dest AnimatorState cross data.
23135
- this._prepareDestCrossData(crossOwnerCollection, animatorLayerData.destPlayData, animatorLayerData.crossCurveMark, true);
23136
- };
23137
- _proto._prepareSrcCrossData = function _prepareSrcCrossData(crossCurveData, srcPlayData, crossCurveMark, saveFixed) {
23138
- var curveOwners = srcPlayData.stateData.curveOwners;
23139
- for(var i = curveOwners.length - 1; i >= 0; i--){
23140
- var owner = curveOwners[i];
23141
- if (!owner) continue;
23142
- owner.crossCurveMark = crossCurveMark;
23143
- owner.crossCurveDataIndex = crossCurveData.length;
23144
- saveFixed && owner.saveFixedPoseValue();
23145
- this._addCrossCurveData(crossCurveData, owner, i, -1);
23146
- }
23147
- };
23148
- _proto._prepareDestCrossData = function _prepareDestCrossData(crossCurveData, destPlayData, crossCurveMark, saveFixed) {
23149
- var curveOwners = destPlayData.stateData.curveOwners;
23150
- for(var i = curveOwners.length - 1; i >= 0; i--){
23151
- var owner = curveOwners[i];
23152
- if (!owner) continue;
23153
- if (owner.crossCurveMark === crossCurveMark) {
23154
- crossCurveData[owner.crossCurveDataIndex].crossDestCurveIndex = i;
23218
+ this._prepareDestCrossData(animatorLayerData, true);
23219
+ };
23220
+ _proto._prepareSrcCrossData = function _prepareSrcCrossData(animatorLayerData, saveFixed) {
23221
+ var curveLayerOwner = animatorLayerData.srcPlayData.stateData.curveLayerOwner;
23222
+ for(var i = curveLayerOwner.length - 1; i >= 0; i--){
23223
+ var layerOwner = curveLayerOwner[i];
23224
+ if (!layerOwner) continue;
23225
+ layerOwner.crossCurveMark = animatorLayerData.crossCurveMark;
23226
+ saveFixed && layerOwner.curveOwner.saveFixedPoseValue();
23227
+ this._addCrossOwner(animatorLayerData, layerOwner, i, -1);
23228
+ }
23229
+ };
23230
+ _proto._prepareDestCrossData = function _prepareDestCrossData(animatorLayerData, saveFixed) {
23231
+ var curveLayerOwner = animatorLayerData.destPlayData.stateData.curveLayerOwner;
23232
+ for(var i = curveLayerOwner.length - 1; i >= 0; i--){
23233
+ var layerOwner = curveLayerOwner[i];
23234
+ if (!layerOwner) continue;
23235
+ if (layerOwner.crossCurveMark === animatorLayerData.crossCurveMark) {
23236
+ layerOwner.crossDestCurveIndex = i;
23155
23237
  } else {
23156
- owner.saveDefaultValue();
23238
+ var owner = layerOwner.curveOwner;
23157
23239
  saveFixed && owner.saveFixedPoseValue();
23158
- owner.crossCurveMark = crossCurveMark;
23159
- owner.crossCurveDataIndex = crossCurveData.length;
23160
- this._addCrossCurveData(crossCurveData, owner, -1, i);
23240
+ layerOwner.crossCurveMark = animatorLayerData.crossCurveMark;
23241
+ this._addCrossOwner(animatorLayerData, layerOwner, -1, i);
23161
23242
  }
23162
23243
  }
23163
23244
  };
@@ -23172,7 +23253,7 @@ exports.AnimatorLayerBlendingMode = void 0;
23172
23253
  var srcPlayData = layerData.srcPlayData, destPlayData = layerData.destPlayData, crossFadeTransitionInfo = layerData.crossFadeTransition;
23173
23254
  var additive = blendingMode === exports.AnimatorLayerBlendingMode.Additive;
23174
23255
  firstLayer && (weight = 1.0);
23175
- //TODO: 任意情况都应该检查,后面要优化
23256
+ //@todo: All situations should be checked, optimizations will follow later.
23176
23257
  layerData.layerState !== LayerState.FixedCrossFading && this._checkTransition(srcPlayData, crossFadeTransitionInfo, layerIndex);
23177
23258
  switch(layerData.layerState){
23178
23259
  case LayerState.Playing:
@@ -23184,26 +23265,36 @@ exports.AnimatorLayerBlendingMode = void 0;
23184
23265
  case LayerState.CrossFading:
23185
23266
  this._updateCrossFade(srcPlayData, destPlayData, layerData, layerIndex, weight, deltaTime, additive, aniUpdate);
23186
23267
  break;
23268
+ case LayerState.Finished:
23269
+ this._updateFinishedState(srcPlayData, weight, additive, aniUpdate);
23270
+ break;
23187
23271
  }
23188
23272
  };
23189
23273
  _proto._updatePlayingState = function _updatePlayingState(playData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
23190
- var _playData_stateData = playData.stateData, curveOwners = _playData_stateData.curveOwners, eventHandlers = _playData_stateData.eventHandlers;
23274
+ var _playData_stateData = playData.stateData, curveLayerOwner = _playData_stateData.curveLayerOwner, eventHandlers = _playData_stateData.eventHandlers;
23191
23275
  var state = playData.state, lastPlayState = playData.playState, lastClipTime = playData.clipTime;
23192
23276
  var _state_clip = state.clip, curveBindings = _state_clip._curveBindings;
23193
23277
  playData.update(this.speed < 0);
23194
- if (!aniUpdate) {
23195
- return;
23196
- }
23197
23278
  var clipTime = playData.clipTime, playState = playData.playState;
23198
- eventHandlers.length && this._fireAnimationEvents(playData, eventHandlers, lastClipTime, clipTime);
23199
- for(var i = curveBindings.length - 1; i >= 0; i--){
23200
- var owner = curveOwners[i];
23201
- owner == null ? void 0 : owner.evaluateAndApplyValue(curveBindings[i].curve, clipTime, weight, additive);
23279
+ var finished = playState === AnimatorStatePlayState.Finished;
23280
+ if (aniUpdate || finished) {
23281
+ for(var i = curveBindings.length - 1; i >= 0; i--){
23282
+ var layerOwner = curveLayerOwner[i];
23283
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23284
+ if (!owner) continue;
23285
+ var curve = curveBindings[i].curve;
23286
+ if (curve.keys.length) {
23287
+ var value = owner.evaluateValue(curve, clipTime, additive);
23288
+ aniUpdate && owner.applyValue(value, weight, additive);
23289
+ finished && layerOwner.saveFinalValue();
23290
+ }
23291
+ }
23202
23292
  }
23203
23293
  playData.frameTime += state.speed * delta;
23204
23294
  if (playState === AnimatorStatePlayState.Finished) {
23205
- layerData.layerState = LayerState.Standby;
23295
+ layerData.layerState = LayerState.Finished;
23206
23296
  }
23297
+ eventHandlers.length && this._fireAnimationEvents(playData, eventHandlers, lastClipTime, clipTime);
23207
23298
  if (lastPlayState === AnimatorStatePlayState.UnStarted) {
23208
23299
  this._callAnimatorScriptOnEnter(state, layerIndex);
23209
23300
  }
@@ -23214,7 +23305,7 @@ exports.AnimatorLayerBlendingMode = void 0;
23214
23305
  }
23215
23306
  };
23216
23307
  _proto._updateCrossFade = function _updateCrossFade(srcPlayData, destPlayData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
23217
- var _this = this, crossCurveDataCollection = _this._crossOwnerCollection;
23308
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
23218
23309
  var _srcPlayData_state_clip = srcPlayData.state.clip, srcCurves = _srcPlayData_state_clip._curveBindings;
23219
23310
  var srcState = srcPlayData.state, srcStateData = srcPlayData.stateData, lastSrcPlayState = srcPlayData.playState;
23220
23311
  var srcEventHandlers = srcStateData.eventHandlers;
@@ -23223,18 +23314,27 @@ exports.AnimatorLayerBlendingMode = void 0;
23223
23314
  var _destState_clip = destState.clip, destCurves = _destState_clip._curveBindings;
23224
23315
  var lastSrcClipTime = srcPlayData.clipTime;
23225
23316
  var lastDestClipTime = destPlayData.clipTime;
23226
- var crossWeight = Math.abs(destPlayData.frameTime) / (destState._getDuration() * layerData.crossFadeTransition.duration);
23227
- crossWeight >= 1.0 && (crossWeight = 1.0);
23317
+ var duration = destState._getDuration() * layerData.crossFadeTransition.duration;
23318
+ var crossWeight = Math.abs(destPlayData.frameTime) / duration;
23319
+ (crossWeight >= 1.0 || duration === 0) && (crossWeight = 1.0);
23228
23320
  srcPlayData.update(this.speed < 0);
23229
23321
  destPlayData.update(this.speed < 0);
23230
- var srcPlayState = srcPlayData.playState;
23231
- var destPlayState = destPlayData.playState;
23232
- this._updateCrossFadeData(layerData, crossWeight, delta, false);
23233
- if (!aniUpdate) {
23234
- return;
23322
+ var srcClipTime = srcPlayData.clipTime, srcPlayState = srcPlayData.playState;
23323
+ var destClipTime = destPlayData.clipTime, destPlayState = destPlayData.playState;
23324
+ var finished = destPlayData.playState === AnimatorStatePlayState.Finished;
23325
+ if (aniUpdate || finished) {
23326
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
23327
+ var layerOwner = crossLayerOwnerCollection[i];
23328
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23329
+ if (!owner) continue;
23330
+ var srcCurveIndex = layerOwner.crossSrcCurveIndex;
23331
+ var destCurveIndex = layerOwner.crossDestCurveIndex;
23332
+ var value = owner.evaluateCrossFadeValue(srcCurveIndex >= 0 ? srcCurves[srcCurveIndex].curve : null, destCurveIndex >= 0 ? destCurves[destCurveIndex].curve : null, srcClipTime, destClipTime, crossWeight, additive);
23333
+ aniUpdate && owner.applyValue(value, weight, additive);
23334
+ finished && layerOwner.saveFinalValue();
23335
+ }
23235
23336
  }
23236
- var srcClipTime = srcPlayData.clipTime;
23237
- var destClipTime = destPlayData.clipTime;
23337
+ this._updateCrossFadeData(layerData, crossWeight, delta, false);
23238
23338
  srcEventHandlers.length && this._fireAnimationEvents(srcPlayData, srcEventHandlers, lastSrcClipTime, srcClipTime);
23239
23339
  destEventHandlers.length && this._fireAnimationEvents(destPlayData, destEventHandlers, lastDestClipTime, destClipTime);
23240
23340
  if (lastSrcPlayState === AnimatorStatePlayState.UnStarted) {
@@ -23253,28 +23353,34 @@ exports.AnimatorLayerBlendingMode = void 0;
23253
23353
  } else {
23254
23354
  this._callAnimatorScriptOnUpdate(destState, layerIndex);
23255
23355
  }
23256
- for(var i = crossCurveDataCollection.length - 1; i >= 0; i--){
23257
- var crossCurveData = crossCurveDataCollection[i];
23258
- var crossSrcCurveIndex = crossCurveData.crossSrcCurveIndex, crossDestCurveIndex = crossCurveData.crossDestCurveIndex;
23259
- crossCurveData.crossFadeAndApplyValue(crossSrcCurveIndex >= 0 ? srcCurves[crossSrcCurveIndex].curve : null, crossDestCurveIndex >= 0 ? destCurves[crossDestCurveIndex].curve : null, srcClipTime, destClipTime, crossWeight, weight, additive);
23260
- }
23261
23356
  };
23262
- _proto._updateCrossFadeFromPose = function _updateCrossFadeFromPose(destPlayData, layerData, layerIndex, layerWeight, delta, additive, aniUpdate) {
23263
- var crossCurveDataCollection = this._crossOwnerCollection;
23357
+ _proto._updateCrossFadeFromPose = function _updateCrossFadeFromPose(destPlayData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
23358
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
23264
23359
  var state = destPlayData.state, stateData = destPlayData.stateData, lastPlayState = destPlayData.playState;
23265
23360
  var eventHandlers = stateData.eventHandlers;
23266
23361
  var _state_clip = state.clip, curveBindings = _state_clip._curveBindings;
23267
23362
  var lastDestClipTime = destPlayData.clipTime;
23268
- var crossWeight = Math.abs(destPlayData.frameTime) / (state._getDuration() * layerData.crossFadeTransition.duration);
23269
- crossWeight >= 1.0 && (crossWeight = 1.0);
23363
+ var duration = state._getDuration() * layerData.crossFadeTransition.duration;
23364
+ var crossWeight = Math.abs(destPlayData.frameTime) / duration;
23365
+ (crossWeight >= 1.0 || duration === 0) && (crossWeight = 1.0);
23270
23366
  destPlayData.update(this.speed < 0);
23271
23367
  var playState = destPlayData.playState;
23272
23368
  this._updateCrossFadeData(layerData, crossWeight, delta, true);
23273
- if (!aniUpdate) {
23274
- return;
23275
- }
23276
23369
  var destClipTime = destPlayData.clipTime;
23277
- //TODO: srcState 少了最新一段时间的判断
23370
+ var finished = playState === AnimatorStatePlayState.Finished;
23371
+ // When the animator is culled (aniUpdate=false), if the play state has finished, the final value needs to be calculated and saved to be applied directly.
23372
+ if (aniUpdate || finished) {
23373
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
23374
+ var layerOwner = crossLayerOwnerCollection[i];
23375
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23376
+ if (!owner) continue;
23377
+ var curveIndex = layerOwner.crossDestCurveIndex;
23378
+ var value = layerOwner.curveOwner.crossFadeFromPoseAndApplyValue(curveIndex >= 0 ? curveBindings[curveIndex].curve : null, destClipTime, crossWeight, additive);
23379
+ aniUpdate && owner.applyValue(value, weight, additive);
23380
+ finished && layerOwner.saveFinalValue();
23381
+ }
23382
+ }
23383
+ //@todo: srcState is missing the judgment of the most recent period."
23278
23384
  eventHandlers.length && this._fireAnimationEvents(destPlayData, eventHandlers, lastDestClipTime, destClipTime);
23279
23385
  if (lastPlayState === AnimatorStatePlayState.UnStarted) {
23280
23386
  this._callAnimatorScriptOnEnter(state, layerIndex);
@@ -23284,10 +23390,18 @@ exports.AnimatorLayerBlendingMode = void 0;
23284
23390
  } else {
23285
23391
  this._callAnimatorScriptOnUpdate(state, layerIndex);
23286
23392
  }
23287
- for(var i = crossCurveDataCollection.length - 1; i >= 0; i--){
23288
- var crossCurveData = crossCurveDataCollection[i];
23289
- var crossDestCurveIndex = crossCurveData.crossDestCurveIndex;
23290
- crossCurveData.crossFadeFromPoseAndApplyValue(crossDestCurveIndex >= 0 ? curveBindings[crossDestCurveIndex].curve : null, destClipTime, crossWeight, layerWeight, additive);
23393
+ };
23394
+ _proto._updateFinishedState = function _updateFinishedState(playData, weight, additive, aniUpdate) {
23395
+ if (!aniUpdate) {
23396
+ return;
23397
+ }
23398
+ var curveLayerOwner = playData.stateData.curveLayerOwner;
23399
+ var _playData_state_clip = playData.state.clip, curveBindings = _playData_state_clip._curveBindings;
23400
+ for(var i = curveBindings.length - 1; i >= 0; i--){
23401
+ var layerOwner = curveLayerOwner[i];
23402
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23403
+ if (!owner) continue;
23404
+ owner.applyValue(layerOwner.finalValue, weight, additive);
23291
23405
  }
23292
23406
  };
23293
23407
  _proto._updateCrossFadeData = function _updateCrossFadeData(layerData, crossWeight, delta, fixed) {
@@ -23295,7 +23409,7 @@ exports.AnimatorLayerBlendingMode = void 0;
23295
23409
  destPlayData.frameTime += destPlayData.state.speed * delta;
23296
23410
  if (crossWeight === 1.0) {
23297
23411
  if (destPlayData.playState === AnimatorStatePlayState.Finished) {
23298
- layerData.layerState = LayerState.Standby;
23412
+ layerData.layerState = LayerState.Finished;
23299
23413
  } else {
23300
23414
  layerData.layerState = LayerState.Playing;
23301
23415
  }
@@ -23305,25 +23419,24 @@ exports.AnimatorLayerBlendingMode = void 0;
23305
23419
  fixed || (layerData.srcPlayData.frameTime += layerData.srcPlayData.state.speed * delta);
23306
23420
  }
23307
23421
  };
23308
- _proto._preparePlay = function _preparePlay(layerData, playState, playStateData) {
23422
+ _proto._preparePlay = function _preparePlay(layerData, playState) {
23309
23423
  if (layerData.layerState === LayerState.Playing) {
23310
23424
  var srcPlayData = layerData.srcPlayData;
23311
23425
  if (srcPlayData.state !== playState) {
23312
- var curveOwners = srcPlayData.stateData.curveOwners;
23313
- for(var i = curveOwners.length - 1; i >= 0; i--){
23314
- var owner = curveOwners[i];
23315
- (owner == null ? void 0 : owner.hasSavedDefaultValue) && owner.revertDefaultValue();
23426
+ var curveLayerOwner = srcPlayData.stateData.curveLayerOwner;
23427
+ for(var i = curveLayerOwner.length - 1; i >= 0; i--){
23428
+ var _curveLayerOwner_i;
23429
+ var owner = (_curveLayerOwner_i = curveLayerOwner[i]) == null ? void 0 : _curveLayerOwner_i.curveOwner;
23430
+ owner.revertDefaultValue();
23316
23431
  }
23317
- this._saveDefaultValues(playStateData);
23318
23432
  }
23319
23433
  } else {
23320
- // layerState is CrossFading, FixedCrossFading, Standby
23321
- var crossCurveDataCollection = this._crossOwnerCollection;
23322
- for(var i1 = crossCurveDataCollection.length - 1; i1 >= 0; i1--){
23323
- var owner1 = crossCurveDataCollection[i1];
23324
- owner1.hasSavedDefaultValue && owner1.revertDefaultValue();
23434
+ // layerState is CrossFading, FixedCrossFading, Standby, Finished
23435
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
23436
+ for(var i1 = crossLayerOwnerCollection.length - 1; i1 >= 0; i1--){
23437
+ var owner1 = crossLayerOwnerCollection[i1].curveOwner;
23438
+ owner1.revertDefaultValue();
23325
23439
  }
23326
- this._saveDefaultValues(playStateData);
23327
23440
  }
23328
23441
  };
23329
23442
  _proto._checkTransition = function _checkTransition(stateData, crossFadeTransition, layerIndex) {
@@ -23340,7 +23453,7 @@ exports.AnimatorLayerBlendingMode = void 0;
23340
23453
  _proto._crossFadeByTransition = function _crossFadeByTransition(transition, layerIndex) {
23341
23454
  var name = transition.destinationState.name;
23342
23455
  var stateInfo = this._getAnimatorStateInfo(name, layerIndex);
23343
- var crossState = stateInfo.state;
23456
+ var crossState = stateInfo.state, playLayerIndex = stateInfo.layerIndex;
23344
23457
  if (!crossState) {
23345
23458
  return;
23346
23459
  }
@@ -23348,21 +23461,21 @@ exports.AnimatorLayerBlendingMode = void 0;
23348
23461
  console.warn("The state named " + name + " has no AnimationClip data.");
23349
23462
  return;
23350
23463
  }
23351
- var animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
23464
+ var animatorLayerData = this._getAnimatorLayerData(playLayerIndex);
23352
23465
  var layerState = animatorLayerData.layerState;
23353
23466
  var destPlayData = animatorLayerData.destPlayData;
23354
- var animatorStateData = this._getAnimatorStateData(name, crossState, animatorLayerData);
23467
+ var animatorStateData = this._getAnimatorStateData(name, crossState, animatorLayerData, playLayerIndex);
23355
23468
  var duration = crossState._getDuration();
23356
23469
  var offset = duration * transition.offset;
23357
23470
  destPlayData.reset(crossState, animatorStateData, offset);
23358
23471
  switch(layerState){
23359
- // Maybe not play, maybe end.
23360
23472
  case LayerState.Standby:
23361
23473
  animatorLayerData.layerState = LayerState.FixedCrossFading;
23362
23474
  this._clearCrossData(animatorLayerData);
23363
23475
  this._prepareStandbyCrossFading(animatorLayerData);
23364
23476
  break;
23365
23477
  case LayerState.Playing:
23478
+ case LayerState.Finished:
23366
23479
  animatorLayerData.layerState = LayerState.CrossFading;
23367
23480
  this._clearCrossData(animatorLayerData);
23368
23481
  this._prepareCrossFading(animatorLayerData);
@@ -23459,6 +23572,12 @@ exports.AnimatorLayerBlendingMode = void 0;
23459
23572
  }
23460
23573
  }
23461
23574
  };
23575
+ _proto._revertCurveOwners = function _revertCurveOwners() {
23576
+ var curveOwners = this._needRevertCurveOwners;
23577
+ for(var i = 0, n = curveOwners.length; i < n; ++i){
23578
+ curveOwners[i].revertDefaultValue();
23579
+ }
23580
+ };
23462
23581
  _create_class(Animator, [
23463
23582
  {
23464
23583
  key: "animatorController",
@@ -23490,10 +23609,10 @@ __decorate([
23490
23609
  ], Animator.prototype, "_animatorLayersData", void 0);
23491
23610
  __decorate([
23492
23611
  ignoreClone
23493
- ], Animator.prototype, "_crossOwnerCollection", void 0);
23612
+ ], Animator.prototype, "_curveOwnerPool", void 0);
23494
23613
  __decorate([
23495
23614
  ignoreClone
23496
- ], Animator.prototype, "_animationCurveOwners", void 0);
23615
+ ], Animator.prototype, "_needRevertCurveOwners", void 0);
23497
23616
  __decorate([
23498
23617
  ignoreClone
23499
23618
  ], Animator.prototype, "_animationEventHandlerPool", void 0);