@galacean/engine-core 0.9.13 → 0.9.15

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