@galacean/engine-core 1.0.0-beta.11 → 1.0.0-beta.13

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/module.js CHANGED
@@ -794,6 +794,14 @@ __decorate([
794
794
  TextureFormat[TextureFormat[/** 32-bit depth + 8-bit stencil format. */ "Depth32Stencil8"] = 31] = "Depth32Stencil8";
795
795
  })(TextureFormat || (TextureFormat = {}));
796
796
 
797
+ /**
798
+ * Texture usage.
799
+ */ var TextureUsage;
800
+ (function(TextureUsage) {
801
+ TextureUsage[TextureUsage[/** The content of the texture is intended to be specified once. */ "Static"] = 0] = "Static";
802
+ TextureUsage[TextureUsage[/** The content of the texture is intended to be updated frequently, with better performance. */ "Dynamic"] = 1] = "Dynamic";
803
+ })(TextureUsage || (TextureUsage = {}));
804
+
797
805
  /**
798
806
  * Wrapping mode of the texture.
799
807
  */ var TextureWrapMode;
@@ -934,6 +942,14 @@ var Logger = {
934
942
  return this._height;
935
943
  }
936
944
  },
945
+ {
946
+ key: "usage",
947
+ get: /**
948
+ * The usage of the texture.
949
+ */ function get() {
950
+ return this._usage;
951
+ }
952
+ },
937
953
  {
938
954
  key: "wrapModeU",
939
955
  get: /**
@@ -1177,14 +1193,16 @@ var Logger = {
1177
1193
  * Two-dimensional texture.
1178
1194
  */ var Texture2D = /*#__PURE__*/ function(Texture) {
1179
1195
  _inherits(Texture2D, Texture);
1180
- function Texture2D(engine, width, height, format, mipmap) {
1196
+ function Texture2D(engine, width, height, format, mipmap, usage) {
1181
1197
  if (format === void 0) format = TextureFormat.R8G8B8A8;
1182
1198
  if (mipmap === void 0) mipmap = true;
1199
+ if (usage === void 0) usage = TextureUsage.Static;
1183
1200
  var _this;
1184
1201
  _this = Texture.call(this, engine) || this;
1185
1202
  _this._mipmap = mipmap;
1186
1203
  _this._width = width;
1187
1204
  _this._height = height;
1205
+ _this._usage = usage;
1188
1206
  _this._format = format;
1189
1207
  _this._mipmapCount = _this._getMipmapCount();
1190
1208
  _this._isDepthTexture = format == TextureFormat.Depth || format == TextureFormat.DepthStencil || format == TextureFormat.Depth16 || format == TextureFormat.Depth24 || format == TextureFormat.Depth32 || format == TextureFormat.Depth24Stencil8 || format == TextureFormat.Depth32Stencil8;
@@ -2284,29 +2302,7 @@ var /** @internal */ PromiseState;
2284
2302
  * @remarks The release principle is that it is not referenced by the components, including direct and indirect reference.
2285
2303
  */ _proto.gc = function gc() {
2286
2304
  this._gc(false);
2287
- var engine = this.engine;
2288
- engine._renderElementPool.garbageCollection();
2289
- engine._meshRenderDataPool.garbageCollection();
2290
- engine._spriteRenderDataPool.garbageCollection();
2291
- engine._spriteMaskRenderDataPool.garbageCollection();
2292
- engine._textRenderDataPool.garbageCollection();
2293
- var _componentsManager = engine._componentsManager, _lightManager = engine._lightManager;
2294
- _componentsManager._renderers.garbageCollection();
2295
- // @ts-ignore
2296
- _componentsManager._onStartScripts.garbageCollection();
2297
- // @ts-ignore
2298
- _componentsManager._onUpdateScripts.garbageCollection();
2299
- // @ts-ignore
2300
- _componentsManager._onLateUpdateScripts.garbageCollection();
2301
- // @ts-ignore
2302
- _componentsManager._onPhysicsUpdateScripts.garbageCollection();
2303
- // @ts-ignore
2304
- _componentsManager._onUpdateAnimations.garbageCollection();
2305
- // @ts-ignore
2306
- _componentsManager._onUpdateRenderers.garbageCollection();
2307
- _lightManager._spotLights.garbageCollection();
2308
- _lightManager._pointLights.garbageCollection();
2309
- _lightManager._directLights.garbageCollection();
2305
+ this.engine._pendingGC();
2310
2306
  };
2311
2307
  /**
2312
2308
  * Add content restorer.
@@ -3232,6 +3228,17 @@ var GLCapabilityType;
3232
3228
  componentContainer.length = 0;
3233
3229
  this._componentsContainerPool.push(componentContainer);
3234
3230
  };
3231
+ /**
3232
+ * @internal
3233
+ */ _proto._gc = function _gc() {
3234
+ this._renderers.garbageCollection();
3235
+ this._onStartScripts.garbageCollection();
3236
+ this._onUpdateScripts.garbageCollection();
3237
+ this._onLateUpdateScripts.garbageCollection();
3238
+ this._onPhysicsUpdateScripts.garbageCollection();
3239
+ this._onUpdateAnimations.garbageCollection();
3240
+ this._onUpdateRenderers.garbageCollection();
3241
+ };
3235
3242
  return ComponentsManager;
3236
3243
  }();
3237
3244
 
@@ -5863,6 +5870,11 @@ var Collision = function Collision() {
5863
5870
  elements[i]._onLateUpdate();
5864
5871
  }
5865
5872
  };
5873
+ /**
5874
+ * @internal
5875
+ */ _proto._gc = function _gc() {
5876
+ this._colliders.garbageCollection();
5877
+ };
5866
5878
  _proto._setGravity = function _setGravity() {
5867
5879
  this._nativePhysicsManager.setGravity(this._gravity);
5868
5880
  };
@@ -8440,6 +8452,13 @@ __decorate([
8440
8452
  shaderData.disableMacro("SCENE_SPOT_LIGHT_COUNT");
8441
8453
  }
8442
8454
  };
8455
+ /**
8456
+ * @internal
8457
+ */ _proto._gc = function _gc() {
8458
+ this._spotLights.garbageCollection();
8459
+ this._pointLights.garbageCollection();
8460
+ this._directLights.garbageCollection();
8461
+ };
8443
8462
  return LightManager;
8444
8463
  }();
8445
8464
 
@@ -16889,6 +16908,7 @@ ShaderPool.init();
16889
16908
  _this._frameInProcess = false;
16890
16909
  _this._waitingDestroy = false;
16891
16910
  _this._isDeviceLost = false;
16911
+ _this._waitingGC = false;
16892
16912
  _this._animate = function() {
16893
16913
  if (_this._vSyncCount) {
16894
16914
  _this._requestId = requestAnimationFrame(_this._animate);
@@ -16992,6 +17012,10 @@ ShaderPool.init();
16992
17012
  if (this._waitingDestroy) {
16993
17013
  this._destroy();
16994
17014
  }
17015
+ if (this._waitingGC) {
17016
+ this._gc();
17017
+ this._waitingGC = false;
17018
+ }
16995
17019
  this._frameInProcess = false;
16996
17020
  };
16997
17021
  /**
@@ -17150,6 +17174,15 @@ ShaderPool.init();
17150
17174
  };
17151
17175
  /**
17152
17176
  * @internal
17177
+ */ _proto._pendingGC = function _pendingGC() {
17178
+ if (this._frameInProcess) {
17179
+ this._waitingGC = true;
17180
+ } else {
17181
+ this._gc();
17182
+ }
17183
+ };
17184
+ /**
17185
+ * @internal
17153
17186
  */ _proto._initialize = function _initialize(configuration) {
17154
17187
  var _this = this;
17155
17188
  var physics = configuration.physics;
@@ -17212,6 +17245,16 @@ ShaderPool.init();
17212
17245
  console.error(error);
17213
17246
  });
17214
17247
  };
17248
+ _proto._gc = function _gc() {
17249
+ this._renderElementPool.garbageCollection();
17250
+ this._meshRenderDataPool.garbageCollection();
17251
+ this._spriteRenderDataPool.garbageCollection();
17252
+ this._spriteMaskRenderDataPool.garbageCollection();
17253
+ this._textRenderDataPool.garbageCollection();
17254
+ this._componentsManager._gc();
17255
+ this._lightManager._gc();
17256
+ this.physicsManager._gc();
17257
+ };
17215
17258
  _create_class(Engine, [
17216
17259
  {
17217
17260
  key: "settings",
@@ -22627,7 +22670,6 @@ var DirtyFlag;
22627
22670
  * @internal
22628
22671
  */ var AnimationCurveOwner = /*#__PURE__*/ function() {
22629
22672
  function AnimationCurveOwner(target, type, property, cureType) {
22630
- this.hasSavedDefaultValue = false;
22631
22673
  this.baseEvaluateData = {
22632
22674
  curKeyframeIndex: 0,
22633
22675
  value: null
@@ -22640,7 +22682,7 @@ var DirtyFlag;
22640
22682
  this.type = type;
22641
22683
  this.property = property;
22642
22684
  this.component = target.getComponent(type);
22643
- this._cureType = cureType;
22685
+ this.cureType = cureType;
22644
22686
  var assemblerType = AnimationCurveOwner.getAssemblerType(type, property);
22645
22687
  this._assembler = new assemblerType();
22646
22688
  this._assembler.initialize(this);
@@ -22649,89 +22691,80 @@ var DirtyFlag;
22649
22691
  }
22650
22692
  }
22651
22693
  var _proto = AnimationCurveOwner.prototype;
22652
- _proto.evaluateAndApplyValue = function evaluateAndApplyValue(curve, time, layerWeight, additive) {
22653
- if (curve.keys.length) {
22654
- if (additive) {
22655
- var value = curve._evaluateAdditive(time, this.baseEvaluateData);
22656
- var cureType = this._cureType;
22657
- if (cureType._isReferenceType) {
22658
- cureType._additiveValue(value, layerWeight, this.referenceTargetValue);
22659
- } else {
22660
- var assembler = this._assembler;
22661
- var originValue = assembler.getTargetValue();
22662
- var additiveValue = cureType._additiveValue(value, layerWeight, originValue);
22663
- assembler.setTargetValue(additiveValue);
22664
- }
22665
- } else {
22666
- var value1 = curve._evaluate(time, this.baseEvaluateData);
22667
- this._applyValue(value1, layerWeight);
22668
- }
22669
- }
22694
+ _proto.evaluateValue = function evaluateValue(curve, time, additive) {
22695
+ return additive ? curve._evaluateAdditive(time, this.baseEvaluateData) : curve._evaluate(time, this.baseEvaluateData);
22670
22696
  };
22671
- _proto.crossFadeAndApplyValue = function crossFadeAndApplyValue(srcCurve, destCurve, srcTime, destTime, crossWeight, layerWeight, additive) {
22672
- 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;
22673
- 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;
22674
- this._applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive);
22697
+ _proto.evaluateCrossFadeValue = function evaluateCrossFadeValue(srcCurve, destCurve, srcTime, destTime, crossWeight, additive) {
22698
+ 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;
22699
+ 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;
22700
+ return this._lerpValue(srcValue, destValue, crossWeight);
22675
22701
  };
22676
- _proto.crossFadeFromPoseAndApplyValue = function crossFadeFromPoseAndApplyValue(destCurve, destTime, crossWeight, layerWeight, additive) {
22677
- var srcValue = additive ? this._cureType._subtractValue(this.fixedPoseValue, this.defaultValue, this.baseEvaluateData.value) : this.fixedPoseValue;
22678
- 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;
22679
- this._applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive);
22702
+ _proto.crossFadeFromPoseAndApplyValue = function crossFadeFromPoseAndApplyValue(destCurve, destTime, crossWeight, additive) {
22703
+ var srcValue = additive ? this.cureType._subtractValue(this.fixedPoseValue, this.defaultValue, this.baseEvaluateData.value) : this.fixedPoseValue;
22704
+ 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;
22705
+ return this._lerpValue(srcValue, destValue, crossWeight);
22680
22706
  };
22681
22707
  _proto.revertDefaultValue = function revertDefaultValue() {
22682
22708
  this._assembler.setTargetValue(this.defaultValue);
22683
22709
  };
22710
+ _proto.getEvaluateValue = function getEvaluateValue(out) {
22711
+ if (this.cureType._isReferenceType) {
22712
+ this.cureType._copyValue(this.baseEvaluateData.value, out);
22713
+ return out;
22714
+ } else {
22715
+ return this.baseEvaluateData.value;
22716
+ }
22717
+ };
22684
22718
  _proto.saveDefaultValue = function saveDefaultValue() {
22685
- if (this._cureType._isReferenceType) {
22686
- this._cureType._copyValue(this.referenceTargetValue, this.defaultValue);
22719
+ if (this.cureType._isReferenceType) {
22720
+ this.cureType._copyValue(this.referenceTargetValue, this.defaultValue);
22687
22721
  } else {
22688
22722
  this.defaultValue = this._assembler.getTargetValue();
22689
22723
  }
22690
- this.hasSavedDefaultValue = true;
22691
22724
  };
22692
22725
  _proto.saveFixedPoseValue = function saveFixedPoseValue() {
22693
- if (this._cureType._isReferenceType) {
22694
- this._cureType._copyValue(this.referenceTargetValue, this.fixedPoseValue);
22726
+ if (this.cureType._isReferenceType) {
22727
+ this.cureType._copyValue(this.referenceTargetValue, this.fixedPoseValue);
22695
22728
  } else {
22696
22729
  this.fixedPoseValue = this._assembler.getTargetValue();
22697
22730
  }
22698
22731
  };
22699
- _proto._applyValue = function _applyValue(value, weight) {
22700
- if (weight === 1.0) {
22701
- if (this._cureType._isReferenceType) {
22702
- this._cureType._copyValue(value, this.referenceTargetValue);
22732
+ _proto.applyValue = function applyValue(value, weight, additive) {
22733
+ var cureType = this.cureType;
22734
+ if (additive) {
22735
+ if (cureType._isReferenceType) {
22736
+ cureType._additiveValue(value, weight, this.referenceTargetValue);
22703
22737
  } else {
22704
- this._assembler.setTargetValue(value);
22738
+ var assembler = this._assembler;
22739
+ var originValue = assembler.getTargetValue();
22740
+ var additiveValue = cureType._additiveValue(value, weight, originValue);
22741
+ assembler.setTargetValue(additiveValue);
22705
22742
  }
22706
22743
  } else {
22707
- if (this._cureType._isReferenceType) {
22708
- var targetValue = this.referenceTargetValue;
22709
- this._cureType._lerpValue(targetValue, value, weight, targetValue);
22744
+ if (weight === 1.0) {
22745
+ if (cureType._isReferenceType) {
22746
+ cureType._copyValue(value, this.referenceTargetValue);
22747
+ } else {
22748
+ this._assembler.setTargetValue(value);
22749
+ }
22710
22750
  } else {
22711
- var originValue = this._assembler.getTargetValue();
22712
- var lerpValue = this._cureType._lerpValue(originValue, value, weight);
22713
- this._assembler.setTargetValue(lerpValue);
22751
+ if (cureType._isReferenceType) {
22752
+ var targetValue = this.referenceTargetValue;
22753
+ cureType._lerpValue(targetValue, value, weight, targetValue);
22754
+ } else {
22755
+ var originValue1 = this._assembler.getTargetValue();
22756
+ var lerpValue = cureType._lerpValue(originValue1, value, weight);
22757
+ this._assembler.setTargetValue(lerpValue);
22758
+ }
22714
22759
  }
22715
22760
  }
22716
22761
  };
22717
- _proto._applyCrossValue = function _applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive) {
22718
- var out;
22719
- if (this._cureType._isReferenceType) {
22720
- out = this.baseEvaluateData.value;
22721
- this._cureType._lerpValue(srcValue, destValue, crossWeight, out);
22722
- } else {
22723
- out = this._cureType._lerpValue(srcValue, destValue, crossWeight);
22724
- }
22725
- if (additive) {
22726
- if (this._cureType._isReferenceType) {
22727
- this._cureType._additiveValue(out, layerWeight, this.referenceTargetValue);
22728
- } else {
22729
- var originValue = this._assembler.getTargetValue();
22730
- var lerpValue = this._cureType._additiveValue(out, layerWeight, originValue);
22731
- this._assembler.setTargetValue(lerpValue);
22732
- }
22762
+ _proto._lerpValue = function _lerpValue(srcValue, destValue, crossWeight) {
22763
+ if (this.cureType._isReferenceType) {
22764
+ return this.cureType._lerpValue(srcValue, destValue, crossWeight, this.baseEvaluateData.value);
22733
22765
  } else {
22734
- this._applyValue(out, layerWeight);
22766
+ this.baseEvaluateData.value = this.cureType._lerpValue(srcValue, destValue, crossWeight);
22767
+ return this.baseEvaluateData.value;
22735
22768
  }
22736
22769
  };
22737
22770
  AnimationCurveOwner.registerAssembler = function registerAssembler(componentType, property, assemblerType) {
@@ -22827,9 +22860,24 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
22827
22860
 
22828
22861
  /**
22829
22862
  * @internal
22830
- */ var AnimationCurveLayerOwner = function AnimationCurveLayerOwner() {
22831
- this.crossCurveMark = 0;
22832
- };
22863
+ */ var AnimationCurveLayerOwner = /*#__PURE__*/ function() {
22864
+ function AnimationCurveLayerOwner() {
22865
+ this.crossCurveMark = 0;
22866
+ }
22867
+ var _proto = AnimationCurveLayerOwner.prototype;
22868
+ _proto.initFinalValue = function initFinalValue() {
22869
+ var _this_curveOwner = this.curveOwner, cureType = _this_curveOwner.cureType, defaultValue = _this_curveOwner.defaultValue;
22870
+ if (cureType._isReferenceType) {
22871
+ cureType._copyValue(defaultValue, this.finalValue);
22872
+ } else {
22873
+ this.finalValue = defaultValue;
22874
+ }
22875
+ };
22876
+ _proto.saveFinalValue = function saveFinalValue() {
22877
+ this.finalValue = this.curveOwner.getEvaluateValue(this.finalValue);
22878
+ };
22879
+ return AnimationCurveLayerOwner;
22880
+ }();
22833
22881
 
22834
22882
  /**
22835
22883
  * Associate AnimationCurve and the Entity
@@ -22844,13 +22892,18 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
22844
22892
  var curveType = this.curve.constructor;
22845
22893
  var owner = new AnimationCurveOwner(entity, this.type, this.property, curveType);
22846
22894
  curveType._initializeOwner(owner);
22895
+ owner.saveDefaultValue();
22847
22896
  return owner;
22848
22897
  };
22849
22898
  /**
22850
22899
  * @internal
22851
22900
  */ _proto._createCurveLayerOwner = function _createCurveLayerOwner(owner) {
22901
+ var curveType = this.curve.constructor;
22852
22902
  var layerOwner = new AnimationCurveLayerOwner();
22853
22903
  layerOwner.curveOwner = owner;
22904
+ curveType._initializeLayerOwner(layerOwner);
22905
+ // If curve.keys.length is 0, updateFinishedState will assign 0 to the target, causing an error, so initialize by assigning defaultValue to finalValue.
22906
+ layerOwner.initFinalValue();
22854
22907
  return layerOwner;
22855
22908
  };
22856
22909
  /**
@@ -22938,7 +22991,8 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
22938
22991
  var targetEntity = entity.findByPath(curveData.relativePath);
22939
22992
  if (targetEntity) {
22940
22993
  var curveOwner = curveData._getTempCurveOwner(targetEntity);
22941
- curveOwner.evaluateAndApplyValue(curveData.curve, time, 1, false);
22994
+ var value = curveOwner.evaluateValue(curveData.curve, time, false);
22995
+ curveOwner.applyValue(value, 1, false);
22942
22996
  }
22943
22997
  }
22944
22998
  };
@@ -23082,6 +23136,7 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
23082
23136
  break;
23083
23137
  }
23084
23138
  }
23139
+ evaluateData.value = value;
23085
23140
  return value;
23086
23141
  };
23087
23142
  /**
@@ -23138,6 +23193,11 @@ var AnimationArrayCurve = (_AnimationArrayCurve = /*#__PURE__*/ function(Animati
23138
23193
  };
23139
23194
  /**
23140
23195
  * @internal
23196
+ */ AnimationArrayCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23197
+ owner.finalValue = [];
23198
+ };
23199
+ /**
23200
+ * @internal
23141
23201
  */ AnimationArrayCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
23142
23202
  for(var i = 0, n = out.length; i < n; ++i){
23143
23203
  var src = srcValue[i];
@@ -23228,6 +23288,11 @@ var AnimationBoolCurve = (_AnimationBoolCurve = /*#__PURE__*/ function(Animation
23228
23288
  };
23229
23289
  /**
23230
23290
  * @internal
23291
+ */ AnimationBoolCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23292
+ owner.finalValue = false;
23293
+ };
23294
+ /**
23295
+ * @internal
23231
23296
  */ AnimationBoolCurve._lerpValue = function _lerpValue(srcValue, destValue) {
23232
23297
  return destValue;
23233
23298
  };
@@ -23285,6 +23350,11 @@ var AnimationColorCurve = (_AnimationColorCurve = /*#__PURE__*/ function(Animati
23285
23350
  };
23286
23351
  /**
23287
23352
  * @internal
23353
+ */ AnimationColorCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23354
+ owner.finalValue = new Color$1();
23355
+ };
23356
+ /**
23357
+ * @internal
23288
23358
  */ AnimationColorCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
23289
23359
  Color$1.lerp(srcValue, destValue, weight, out);
23290
23360
  return out;
@@ -23391,6 +23461,12 @@ var AnimationFloatArrayCurve = (_AnimationFloatArrayCurve = /*#__PURE__*/ functi
23391
23461
  };
23392
23462
  /**
23393
23463
  * @internal
23464
+ */ AnimationFloatArrayCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23465
+ var size = owner.curveOwner.referenceTargetValue.length;
23466
+ owner.finalValue = new Float32Array(size);
23467
+ };
23468
+ /**
23469
+ * @internal
23394
23470
  */ AnimationFloatArrayCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
23395
23471
  for(var i = 0, n = out.length; i < n; ++i){
23396
23472
  var src = srcValue[i];
@@ -23481,6 +23557,11 @@ var AnimationFloatCurve = (_AnimationFloatCurve = /*#__PURE__*/ function(Animati
23481
23557
  };
23482
23558
  /**
23483
23559
  * @internal
23560
+ */ AnimationFloatCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23561
+ owner.finalValue = 0;
23562
+ };
23563
+ /**
23564
+ * @internal
23484
23565
  */ AnimationFloatCurve._lerpValue = function _lerpValue(srcValue, destValue, crossWeight) {
23485
23566
  return srcValue + (destValue - srcValue) * crossWeight;
23486
23567
  };
@@ -23550,6 +23631,11 @@ var AnimationQuaternionCurve = (_AnimationQuaternionCurve = /*#__PURE__*/ functi
23550
23631
  };
23551
23632
  /**
23552
23633
  * @internal
23634
+ */ AnimationQuaternionCurve1._initializeLayerOwner = function _initializeLayerOwner(owner) {
23635
+ owner.finalValue = new Quaternion();
23636
+ };
23637
+ /**
23638
+ * @internal
23553
23639
  */ AnimationQuaternionCurve1._lerpValue = function _lerpValue(src, dest, weight, out) {
23554
23640
  Quaternion.slerp(src, dest, weight, out);
23555
23641
  return out;
@@ -23654,6 +23740,11 @@ var AnimationVector2Curve = (_AnimationVector2Curve = /*#__PURE__*/ function(Ani
23654
23740
  };
23655
23741
  /**
23656
23742
  * @internal
23743
+ */ AnimationVector2Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23744
+ owner.finalValue = new Vector2();
23745
+ };
23746
+ /**
23747
+ * @internal
23657
23748
  */ AnimationVector2Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
23658
23749
  Vector2.lerp(srcValue, destValue, weight, out);
23659
23750
  return out;
@@ -23739,6 +23830,11 @@ var AnimationVector3Curve = (_AnimationVector3Curve = /*#__PURE__*/ function(Ani
23739
23830
  };
23740
23831
  /**
23741
23832
  * @internal
23833
+ */ AnimationVector3Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23834
+ owner.finalValue = new Vector3();
23835
+ };
23836
+ /**
23837
+ * @internal
23742
23838
  */ AnimationVector3Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
23743
23839
  Vector3.lerp(srcValue, destValue, weight, out);
23744
23840
  return out;
@@ -23836,6 +23932,11 @@ var AnimationVector4Curve = (_AnimationVector4Curve = /*#__PURE__*/ function(Ani
23836
23932
  };
23837
23933
  /**
23838
23934
  * @internal
23935
+ */ AnimationVector4Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
23936
+ owner.finalValue = new Vector4();
23937
+ };
23938
+ /**
23939
+ * @internal
23839
23940
  */ AnimationVector4Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
23840
23941
  Vector4.lerp(srcValue, destValue, weight, out);
23841
23942
  return out;
@@ -23945,6 +24046,7 @@ var AnimatorLayerBlendingMode;
23945
24046
  LayerState[LayerState[/** Playing state. */ "Playing"] = 1] = "Playing";
23946
24047
  LayerState[LayerState[/** CrossFading state. */ "CrossFading"] = 2] = "CrossFading";
23947
24048
  LayerState[LayerState[/** FixedCrossFading state. */ "FixedCrossFading"] = 3] = "FixedCrossFading";
24049
+ LayerState[LayerState[/** Finished state. */ "Finished"] = 4] = "Finished";
23948
24050
  })(LayerState || (LayerState = {}));
23949
24051
 
23950
24052
  /**
@@ -24021,7 +24123,7 @@ var AnimatorLayerBlendingMode;
24021
24123
  this.layerState = LayerState.Standby;
24022
24124
  this.crossCurveMark = 0;
24023
24125
  this.manuallyTransition = new AnimatorStateTransition();
24024
- this.crossOwnerLayerDataCollection = [];
24126
+ this.crossLayerOwnerCollection = [];
24025
24127
  }
24026
24128
  var _proto = AnimatorLayerData.prototype;
24027
24129
  _proto.switchPlayData = function switchPlayData() {
@@ -24051,6 +24153,7 @@ var AnimatorLayerBlendingMode;
24051
24153
  /** The playback speed of the Animator, 1.0 is normal playback speed. */ _this.speed = 1.0;
24052
24154
  _this._animatorLayersData = [];
24053
24155
  _this._curveOwnerPool = Object.create(null);
24156
+ _this._needRevertCurveOwners = [];
24054
24157
  _this._animationEventHandlerPool = new ClassPool(AnimationEventHandler);
24055
24158
  _this._tempAnimatorStateInfo = {
24056
24159
  layerIndex: -1,
@@ -24073,7 +24176,7 @@ var AnimatorLayerBlendingMode;
24073
24176
  this._reset();
24074
24177
  }
24075
24178
  var stateInfo = this._getAnimatorStateInfo(stateName, layerIndex);
24076
- var state = stateInfo.state;
24179
+ var state = stateInfo.state, playLayerIndex = stateInfo.layerIndex;
24077
24180
  if (!state) {
24078
24181
  return;
24079
24182
  }
@@ -24082,8 +24185,8 @@ var AnimatorLayerBlendingMode;
24082
24185
  return;
24083
24186
  }
24084
24187
  var animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
24085
- var animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData);
24086
- this._preparePlay(animatorLayerData, state, animatorStateData);
24188
+ var animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData, playLayerIndex);
24189
+ this._preparePlay(animatorLayerData, state);
24087
24190
  animatorLayerData.layerState = LayerState.Playing;
24088
24191
  animatorLayerData.srcPlayData.reset(state, animatorStateData, state._getDuration() * normalizedTimeOffset);
24089
24192
  };
@@ -24134,6 +24237,7 @@ var AnimatorLayerBlendingMode;
24134
24237
  return;
24135
24238
  }
24136
24239
  deltaTime *= this.speed;
24240
+ this._revertCurveOwners();
24137
24241
  for(var i1 = 0, n1 = animatorController.layers.length; i1 < n1; i1++){
24138
24242
  var animatorLayerData = this._getAnimatorLayerData(i1);
24139
24243
  if (animatorLayerData.layerState === LayerState.Standby) {
@@ -24177,10 +24281,11 @@ var AnimatorLayerBlendingMode;
24177
24281
  var propertyOwners = animationCurveOwners[instanceId];
24178
24282
  for(var property in propertyOwners){
24179
24283
  var owner = propertyOwners[property];
24180
- owner.hasSavedDefaultValue && owner.revertDefaultValue();
24284
+ owner.revertDefaultValue();
24181
24285
  }
24182
24286
  }
24183
24287
  this._animatorLayersData.length = 0;
24288
+ this._needRevertCurveOwners.length = 0;
24184
24289
  this._curveOwnerPool = {};
24185
24290
  this._animationEventHandlerPool.resetPool();
24186
24291
  if (this._controllerUpdateFlag) {
@@ -24208,25 +24313,18 @@ var AnimatorLayerBlendingMode;
24208
24313
  stateInfo.state = state;
24209
24314
  return stateInfo;
24210
24315
  };
24211
- _proto._saveDefaultValues = function _saveDefaultValues(stateData) {
24212
- var curveLayerOwner = stateData.curveLayerOwner;
24213
- for(var i = curveLayerOwner.length - 1; i >= 0; i--){
24214
- var _curveLayerOwner_i;
24215
- (_curveLayerOwner_i = curveLayerOwner[i]) == null ? void 0 : _curveLayerOwner_i.curveOwner.saveDefaultValue();
24216
- }
24217
- };
24218
- _proto._getAnimatorStateData = function _getAnimatorStateData(stateName, animatorState, animatorLayerData) {
24316
+ _proto._getAnimatorStateData = function _getAnimatorStateData(stateName, animatorState, animatorLayerData, layerIndex) {
24219
24317
  var animatorStateDataMap = animatorLayerData.animatorStateDataMap;
24220
24318
  var animatorStateData = animatorStateDataMap[stateName];
24221
24319
  if (!animatorStateData) {
24222
24320
  animatorStateData = new AnimatorStateData();
24223
24321
  animatorStateDataMap[stateName] = animatorStateData;
24224
- this._saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData);
24322
+ this._saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData, layerIndex);
24225
24323
  this._saveAnimatorEventHandlers(animatorState, animatorStateData);
24226
24324
  }
24227
24325
  return animatorStateData;
24228
24326
  };
24229
- _proto._saveAnimatorStateData = function _saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData) {
24327
+ _proto._saveAnimatorStateData = function _saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData, layerIndex) {
24230
24328
  var _this = this, entity = _this.entity, curveOwnerPool = _this._curveOwnerPool;
24231
24329
  var curveLayerOwner = animatorStateData.curveLayerOwner;
24232
24330
  var layerCurveOwnerPool = animatorLayerData.curveOwnerPool;
@@ -24238,9 +24336,22 @@ var AnimatorLayerBlendingMode;
24238
24336
  var _curveOwnerPool, _instanceId, _propertyOwners, _property, _layerCurveOwnerPool, _instanceId1, _layerPropertyOwners, _property1;
24239
24337
  var property = curve.property;
24240
24338
  var instanceId = targetEntity.instanceId;
24339
+ var needRevert = false;
24340
+ var baseAnimatorLayerData = this._animatorLayersData[0];
24341
+ var baseLayerCurveOwnerPool = baseAnimatorLayerData.curveOwnerPool;
24342
+ if (this.animatorController.layers[layerIndex].blendingMode === AnimatorLayerBlendingMode.Additive && layerIndex > 0 && !(baseLayerCurveOwnerPool[instanceId] && baseLayerCurveOwnerPool[instanceId][property])) {
24343
+ needRevert = true;
24344
+ }
24241
24345
  // Get owner
24242
24346
  var propertyOwners = (_curveOwnerPool = curveOwnerPool)[_instanceId = instanceId] || (_curveOwnerPool[_instanceId] = Object.create(null));
24243
24347
  var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity));
24348
+ //@todo: There is performance waste here, which will be handled together with organizing AnimatorStateData later. The logic is changing from runtime to initialization.
24349
+ if (needRevert) {
24350
+ this._needRevertCurveOwners.push(owner);
24351
+ } else {
24352
+ var index = this._needRevertCurveOwners.indexOf(owner);
24353
+ index > -1 && this._needRevertCurveOwners.splice(index, 1);
24354
+ }
24244
24355
  // Get layer owner
24245
24356
  var layerPropertyOwners = (_layerCurveOwnerPool = layerCurveOwnerPool)[_instanceId1 = instanceId] || (_layerCurveOwnerPool[_instanceId1] = Object.create(null));
24246
24357
  var layerOwner = (_layerPropertyOwners = layerPropertyOwners)[_property1 = property] || (_layerPropertyOwners[_property1] = curve._createCurveLayerOwner(owner));
@@ -24274,12 +24385,12 @@ var AnimatorLayerBlendingMode;
24274
24385
  };
24275
24386
  _proto._clearCrossData = function _clearCrossData(animatorLayerData) {
24276
24387
  animatorLayerData.crossCurveMark++;
24277
- animatorLayerData.crossOwnerLayerDataCollection.length = 0;
24388
+ animatorLayerData.crossLayerOwnerCollection.length = 0;
24278
24389
  };
24279
24390
  _proto._addCrossOwner = function _addCrossOwner(animatorLayerData, layerOwner, curCurveIndex, nextCurveIndex) {
24280
24391
  layerOwner.crossSrcCurveIndex = curCurveIndex;
24281
24392
  layerOwner.crossDestCurveIndex = nextCurveIndex;
24282
- animatorLayerData.crossOwnerLayerDataCollection.push(layerOwner);
24393
+ animatorLayerData.crossLayerOwnerCollection.push(layerOwner);
24283
24394
  };
24284
24395
  _proto._prepareCrossFading = function _prepareCrossFading(animatorLayerData) {
24285
24396
  // Add src cross curve data.
@@ -24294,10 +24405,10 @@ var AnimatorLayerBlendingMode;
24294
24405
  this._prepareDestCrossData(animatorLayerData, true);
24295
24406
  };
24296
24407
  _proto._prepareFixedPoseCrossFading = function _prepareFixedPoseCrossFading(animatorLayerData) {
24297
- var crossOwnerLayerDataCollection = animatorLayerData.crossOwnerLayerDataCollection;
24408
+ var crossLayerOwnerCollection = animatorLayerData.crossLayerOwnerCollection;
24298
24409
  // Save current cross curve data owner fixed pose.
24299
- for(var i = crossOwnerLayerDataCollection.length - 1; i >= 0; i--){
24300
- var layerOwner = crossOwnerLayerDataCollection[i];
24410
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
24411
+ var layerOwner = crossLayerOwnerCollection[i];
24301
24412
  if (!layerOwner) continue;
24302
24413
  layerOwner.curveOwner.saveFixedPoseValue();
24303
24414
  // Reset destCurveIndex When fixed pose crossFading again.
@@ -24325,7 +24436,6 @@ var AnimatorLayerBlendingMode;
24325
24436
  layerOwner.crossDestCurveIndex = i;
24326
24437
  } else {
24327
24438
  var owner = layerOwner.curveOwner;
24328
- owner.saveDefaultValue();
24329
24439
  saveFixed && owner.saveFixedPoseValue();
24330
24440
  layerOwner.crossCurveMark = animatorLayerData.crossCurveMark;
24331
24441
  this._addCrossOwner(animatorLayerData, layerOwner, -1, i);
@@ -24343,7 +24453,7 @@ var AnimatorLayerBlendingMode;
24343
24453
  var srcPlayData = layerData.srcPlayData, destPlayData = layerData.destPlayData, crossFadeTransitionInfo = layerData.crossFadeTransition;
24344
24454
  var additive = blendingMode === AnimatorLayerBlendingMode.Additive;
24345
24455
  firstLayer && (weight = 1.0);
24346
- //TODO: 任意情况都应该检查,后面要优化
24456
+ //@todo: All situations should be checked, optimizations will follow later.
24347
24457
  layerData.layerState !== LayerState.FixedCrossFading && this._checkTransition(srcPlayData, crossFadeTransitionInfo, layerIndex);
24348
24458
  switch(layerData.layerState){
24349
24459
  case LayerState.Playing:
@@ -24355,6 +24465,9 @@ var AnimatorLayerBlendingMode;
24355
24465
  case LayerState.CrossFading:
24356
24466
  this._updateCrossFade(srcPlayData, destPlayData, layerData, layerIndex, weight, deltaTime, additive, aniUpdate);
24357
24467
  break;
24468
+ case LayerState.Finished:
24469
+ this._updateFinishedState(srcPlayData, weight, additive, aniUpdate);
24470
+ break;
24358
24471
  }
24359
24472
  };
24360
24473
  _proto._updatePlayingState = function _updatePlayingState(playData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
@@ -24362,19 +24475,26 @@ var AnimatorLayerBlendingMode;
24362
24475
  var state = playData.state, lastPlayState = playData.playState, lastClipTime = playData.clipTime;
24363
24476
  var _state_clip = state.clip, curveBindings = _state_clip._curveBindings;
24364
24477
  playData.update(this.speed < 0);
24365
- if (!aniUpdate) {
24366
- return;
24367
- }
24368
24478
  var clipTime = playData.clipTime, playState = playData.playState;
24369
- eventHandlers.length && this._fireAnimationEvents(playData, eventHandlers, lastClipTime, clipTime);
24370
- for(var i = curveBindings.length - 1; i >= 0; i--){
24371
- var _curveLayerOwner_i;
24372
- (_curveLayerOwner_i = curveLayerOwner[i]) == null ? void 0 : _curveLayerOwner_i.curveOwner.evaluateAndApplyValue(curveBindings[i].curve, clipTime, weight, additive);
24479
+ var finished = playState === AnimatorStatePlayState.Finished;
24480
+ if (aniUpdate || finished) {
24481
+ for(var i = curveBindings.length - 1; i >= 0; i--){
24482
+ var layerOwner = curveLayerOwner[i];
24483
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
24484
+ if (!owner) continue;
24485
+ var curve = curveBindings[i].curve;
24486
+ if (curve.keys.length) {
24487
+ var value = owner.evaluateValue(curve, clipTime, additive);
24488
+ aniUpdate && owner.applyValue(value, weight, additive);
24489
+ finished && layerOwner.saveFinalValue();
24490
+ }
24491
+ }
24373
24492
  }
24374
24493
  playData.frameTime += state.speed * delta;
24375
24494
  if (playState === AnimatorStatePlayState.Finished) {
24376
- layerData.layerState = LayerState.Standby;
24495
+ layerData.layerState = LayerState.Finished;
24377
24496
  }
24497
+ eventHandlers.length && this._fireAnimationEvents(playData, eventHandlers, lastClipTime, clipTime);
24378
24498
  if (lastPlayState === AnimatorStatePlayState.UnStarted) {
24379
24499
  this._callAnimatorScriptOnEnter(state, layerIndex);
24380
24500
  }
@@ -24385,7 +24505,7 @@ var AnimatorLayerBlendingMode;
24385
24505
  }
24386
24506
  };
24387
24507
  _proto._updateCrossFade = function _updateCrossFade(srcPlayData, destPlayData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
24388
- var crossOwnerLayerDataCollection = layerData.crossOwnerLayerDataCollection;
24508
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
24389
24509
  var _srcPlayData_state_clip = srcPlayData.state.clip, srcCurves = _srcPlayData_state_clip._curveBindings;
24390
24510
  var srcState = srcPlayData.state, srcStateData = srcPlayData.stateData, lastSrcPlayState = srcPlayData.playState;
24391
24511
  var srcEventHandlers = srcStateData.eventHandlers;
@@ -24394,18 +24514,27 @@ var AnimatorLayerBlendingMode;
24394
24514
  var _destState_clip = destState.clip, destCurves = _destState_clip._curveBindings;
24395
24515
  var lastSrcClipTime = srcPlayData.clipTime;
24396
24516
  var lastDestClipTime = destPlayData.clipTime;
24397
- var crossWeight = Math.abs(destPlayData.frameTime) / (destState._getDuration() * layerData.crossFadeTransition.duration);
24398
- crossWeight >= 1.0 && (crossWeight = 1.0);
24517
+ var duration = destState._getDuration() * layerData.crossFadeTransition.duration;
24518
+ var crossWeight = Math.abs(destPlayData.frameTime) / duration;
24519
+ (crossWeight >= 1.0 || duration === 0) && (crossWeight = 1.0);
24399
24520
  srcPlayData.update(this.speed < 0);
24400
24521
  destPlayData.update(this.speed < 0);
24401
- var srcPlayState = srcPlayData.playState;
24402
- var destPlayState = destPlayData.playState;
24403
- this._updateCrossFadeData(layerData, crossWeight, delta, false);
24404
- if (!aniUpdate) {
24405
- return;
24522
+ var srcClipTime = srcPlayData.clipTime, srcPlayState = srcPlayData.playState;
24523
+ var destClipTime = destPlayData.clipTime, destPlayState = destPlayData.playState;
24524
+ var finished = destPlayData.playState === AnimatorStatePlayState.Finished;
24525
+ if (aniUpdate || finished) {
24526
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
24527
+ var layerOwner = crossLayerOwnerCollection[i];
24528
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
24529
+ if (!owner) continue;
24530
+ var srcCurveIndex = layerOwner.crossSrcCurveIndex;
24531
+ var destCurveIndex = layerOwner.crossDestCurveIndex;
24532
+ var value = owner.evaluateCrossFadeValue(srcCurveIndex >= 0 ? srcCurves[srcCurveIndex].curve : null, destCurveIndex >= 0 ? destCurves[destCurveIndex].curve : null, srcClipTime, destClipTime, crossWeight, additive);
24533
+ aniUpdate && owner.applyValue(value, weight, additive);
24534
+ finished && layerOwner.saveFinalValue();
24535
+ }
24406
24536
  }
24407
- var srcClipTime = srcPlayData.clipTime;
24408
- var destClipTime = destPlayData.clipTime;
24537
+ this._updateCrossFadeData(layerData, crossWeight, delta, false);
24409
24538
  srcEventHandlers.length && this._fireAnimationEvents(srcPlayData, srcEventHandlers, lastSrcClipTime, srcClipTime);
24410
24539
  destEventHandlers.length && this._fireAnimationEvents(destPlayData, destEventHandlers, lastDestClipTime, destClipTime);
24411
24540
  if (lastSrcPlayState === AnimatorStatePlayState.UnStarted) {
@@ -24424,30 +24553,34 @@ var AnimatorLayerBlendingMode;
24424
24553
  } else {
24425
24554
  this._callAnimatorScriptOnUpdate(destState, layerIndex);
24426
24555
  }
24427
- for(var i = crossOwnerLayerDataCollection.length - 1; i >= 0; i--){
24428
- var layerOwner = crossOwnerLayerDataCollection[i];
24429
- if (!layerOwner) continue;
24430
- var srcCurveIndex = layerOwner.crossSrcCurveIndex;
24431
- var destCurveIndex = layerOwner.crossDestCurveIndex;
24432
- layerOwner.curveOwner.crossFadeAndApplyValue(srcCurveIndex >= 0 ? srcCurves[srcCurveIndex].curve : null, destCurveIndex >= 0 ? destCurves[destCurveIndex].curve : null, srcClipTime, destClipTime, crossWeight, weight, additive);
24433
- }
24434
24556
  };
24435
- _proto._updateCrossFadeFromPose = function _updateCrossFadeFromPose(destPlayData, layerData, layerIndex, layerWeight, delta, additive, aniUpdate) {
24436
- var crossOwnerLayerDataCollection = layerData.crossOwnerLayerDataCollection;
24557
+ _proto._updateCrossFadeFromPose = function _updateCrossFadeFromPose(destPlayData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
24558
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
24437
24559
  var state = destPlayData.state, stateData = destPlayData.stateData, lastPlayState = destPlayData.playState;
24438
24560
  var eventHandlers = stateData.eventHandlers;
24439
24561
  var _state_clip = state.clip, curveBindings = _state_clip._curveBindings;
24440
24562
  var lastDestClipTime = destPlayData.clipTime;
24441
- var crossWeight = Math.abs(destPlayData.frameTime) / (state._getDuration() * layerData.crossFadeTransition.duration);
24442
- crossWeight >= 1.0 && (crossWeight = 1.0);
24563
+ var duration = state._getDuration() * layerData.crossFadeTransition.duration;
24564
+ var crossWeight = Math.abs(destPlayData.frameTime) / duration;
24565
+ (crossWeight >= 1.0 || duration === 0) && (crossWeight = 1.0);
24443
24566
  destPlayData.update(this.speed < 0);
24444
24567
  var playState = destPlayData.playState;
24445
24568
  this._updateCrossFadeData(layerData, crossWeight, delta, true);
24446
- if (!aniUpdate) {
24447
- return;
24448
- }
24449
24569
  var destClipTime = destPlayData.clipTime;
24450
- //TODO: srcState 少了最新一段时间的判断
24570
+ var finished = playState === AnimatorStatePlayState.Finished;
24571
+ // 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.
24572
+ if (aniUpdate || finished) {
24573
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
24574
+ var layerOwner = crossLayerOwnerCollection[i];
24575
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
24576
+ if (!owner) continue;
24577
+ var curveIndex = layerOwner.crossDestCurveIndex;
24578
+ var value = layerOwner.curveOwner.crossFadeFromPoseAndApplyValue(curveIndex >= 0 ? curveBindings[curveIndex].curve : null, destClipTime, crossWeight, additive);
24579
+ aniUpdate && owner.applyValue(value, weight, additive);
24580
+ finished && layerOwner.saveFinalValue();
24581
+ }
24582
+ }
24583
+ //@todo: srcState is missing the judgment of the most recent period."
24451
24584
  eventHandlers.length && this._fireAnimationEvents(destPlayData, eventHandlers, lastDestClipTime, destClipTime);
24452
24585
  if (lastPlayState === AnimatorStatePlayState.UnStarted) {
24453
24586
  this._callAnimatorScriptOnEnter(state, layerIndex);
@@ -24457,11 +24590,18 @@ var AnimatorLayerBlendingMode;
24457
24590
  } else {
24458
24591
  this._callAnimatorScriptOnUpdate(state, layerIndex);
24459
24592
  }
24460
- for(var i = crossOwnerLayerDataCollection.length - 1; i >= 0; i--){
24461
- var layerOwner = crossOwnerLayerDataCollection[i];
24462
- if (!layerOwner) continue;
24463
- var curveIndex = layerOwner.crossDestCurveIndex;
24464
- layerOwner.curveOwner.crossFadeFromPoseAndApplyValue(curveIndex >= 0 ? curveBindings[curveIndex].curve : null, destClipTime, crossWeight, layerWeight, additive);
24593
+ };
24594
+ _proto._updateFinishedState = function _updateFinishedState(playData, weight, additive, aniUpdate) {
24595
+ if (!aniUpdate) {
24596
+ return;
24597
+ }
24598
+ var curveLayerOwner = playData.stateData.curveLayerOwner;
24599
+ var _playData_state_clip = playData.state.clip, curveBindings = _playData_state_clip._curveBindings;
24600
+ for(var i = curveBindings.length - 1; i >= 0; i--){
24601
+ var layerOwner = curveLayerOwner[i];
24602
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
24603
+ if (!owner) continue;
24604
+ owner.applyValue(layerOwner.finalValue, weight, additive);
24465
24605
  }
24466
24606
  };
24467
24607
  _proto._updateCrossFadeData = function _updateCrossFadeData(layerData, crossWeight, delta, fixed) {
@@ -24469,7 +24609,7 @@ var AnimatorLayerBlendingMode;
24469
24609
  destPlayData.frameTime += destPlayData.state.speed * delta;
24470
24610
  if (crossWeight === 1.0) {
24471
24611
  if (destPlayData.playState === AnimatorStatePlayState.Finished) {
24472
- layerData.layerState = LayerState.Standby;
24612
+ layerData.layerState = LayerState.Finished;
24473
24613
  } else {
24474
24614
  layerData.layerState = LayerState.Playing;
24475
24615
  }
@@ -24479,7 +24619,7 @@ var AnimatorLayerBlendingMode;
24479
24619
  fixed || (layerData.srcPlayData.frameTime += layerData.srcPlayData.state.speed * delta);
24480
24620
  }
24481
24621
  };
24482
- _proto._preparePlay = function _preparePlay(layerData, playState, playStateData) {
24622
+ _proto._preparePlay = function _preparePlay(layerData, playState) {
24483
24623
  if (layerData.layerState === LayerState.Playing) {
24484
24624
  var srcPlayData = layerData.srcPlayData;
24485
24625
  if (srcPlayData.state !== playState) {
@@ -24487,18 +24627,16 @@ var AnimatorLayerBlendingMode;
24487
24627
  for(var i = curveLayerOwner.length - 1; i >= 0; i--){
24488
24628
  var _curveLayerOwner_i;
24489
24629
  var owner = (_curveLayerOwner_i = curveLayerOwner[i]) == null ? void 0 : _curveLayerOwner_i.curveOwner;
24490
- (owner == null ? void 0 : owner.hasSavedDefaultValue) && owner.revertDefaultValue();
24630
+ owner.revertDefaultValue();
24491
24631
  }
24492
- this._saveDefaultValues(playStateData);
24493
24632
  }
24494
24633
  } else {
24495
- // layerState is CrossFading, FixedCrossFading, Standby
24496
- var crossOwnerLayerDataCollection = layerData.crossOwnerLayerDataCollection;
24497
- for(var i1 = crossOwnerLayerDataCollection.length - 1; i1 >= 0; i1--){
24498
- var owner1 = crossOwnerLayerDataCollection[i1].curveOwner;
24499
- owner1.hasSavedDefaultValue && owner1.revertDefaultValue();
24634
+ // layerState is CrossFading, FixedCrossFading, Standby, Finished
24635
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
24636
+ for(var i1 = crossLayerOwnerCollection.length - 1; i1 >= 0; i1--){
24637
+ var owner1 = crossLayerOwnerCollection[i1].curveOwner;
24638
+ owner1.revertDefaultValue();
24500
24639
  }
24501
- this._saveDefaultValues(playStateData);
24502
24640
  }
24503
24641
  };
24504
24642
  _proto._checkTransition = function _checkTransition(stateData, crossFadeTransition, layerIndex) {
@@ -24515,7 +24653,7 @@ var AnimatorLayerBlendingMode;
24515
24653
  _proto._crossFadeByTransition = function _crossFadeByTransition(transition, layerIndex) {
24516
24654
  var name = transition.destinationState.name;
24517
24655
  var stateInfo = this._getAnimatorStateInfo(name, layerIndex);
24518
- var crossState = stateInfo.state;
24656
+ var crossState = stateInfo.state, playLayerIndex = stateInfo.layerIndex;
24519
24657
  if (!crossState) {
24520
24658
  return;
24521
24659
  }
@@ -24523,21 +24661,21 @@ var AnimatorLayerBlendingMode;
24523
24661
  console.warn("The state named " + name + " has no AnimationClip data.");
24524
24662
  return;
24525
24663
  }
24526
- var animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
24664
+ var animatorLayerData = this._getAnimatorLayerData(playLayerIndex);
24527
24665
  var layerState = animatorLayerData.layerState;
24528
24666
  var destPlayData = animatorLayerData.destPlayData;
24529
- var animatorStateData = this._getAnimatorStateData(name, crossState, animatorLayerData);
24667
+ var animatorStateData = this._getAnimatorStateData(name, crossState, animatorLayerData, playLayerIndex);
24530
24668
  var duration = crossState._getDuration();
24531
24669
  var offset = duration * transition.offset;
24532
24670
  destPlayData.reset(crossState, animatorStateData, offset);
24533
24671
  switch(layerState){
24534
- // Maybe not play, maybe end.
24535
24672
  case LayerState.Standby:
24536
24673
  animatorLayerData.layerState = LayerState.FixedCrossFading;
24537
24674
  this._clearCrossData(animatorLayerData);
24538
24675
  this._prepareStandbyCrossFading(animatorLayerData);
24539
24676
  break;
24540
24677
  case LayerState.Playing:
24678
+ case LayerState.Finished:
24541
24679
  animatorLayerData.layerState = LayerState.CrossFading;
24542
24680
  this._clearCrossData(animatorLayerData);
24543
24681
  this._prepareCrossFading(animatorLayerData);
@@ -24634,6 +24772,12 @@ var AnimatorLayerBlendingMode;
24634
24772
  }
24635
24773
  }
24636
24774
  };
24775
+ _proto._revertCurveOwners = function _revertCurveOwners() {
24776
+ var curveOwners = this._needRevertCurveOwners;
24777
+ for(var i = 0, n = curveOwners.length; i < n; ++i){
24778
+ curveOwners[i].revertDefaultValue();
24779
+ }
24780
+ };
24637
24781
  _create_class(Animator, [
24638
24782
  {
24639
24783
  key: "animatorController",
@@ -24666,6 +24810,9 @@ __decorate([
24666
24810
  __decorate([
24667
24811
  ignoreClone
24668
24812
  ], Animator.prototype, "_curveOwnerPool", void 0);
24813
+ __decorate([
24814
+ ignoreClone
24815
+ ], Animator.prototype, "_needRevertCurveOwners", void 0);
24669
24816
  __decorate([
24670
24817
  ignoreClone
24671
24818
  ], Animator.prototype, "_animationEventHandlerPool", void 0);
@@ -26366,5 +26513,5 @@ var cacheDir = new Vector3();
26366
26513
  return CubeProbe;
26367
26514
  }(Probe);
26368
26515
 
26369
- export { AmbientLight, AnimationArrayCurve, AnimationBoolCurve, AnimationClip, AnimationClipCurveBinding, AnimationColorCurve, AnimationCurve, AnimationEvent, AnimationFloatArrayCurve, AnimationFloatCurve, AnimationQuaternionCurve, AnimationVector2Curve, AnimationVector3Curve, AnimationVector4Curve, Animator, AnimatorConditionMode, AnimatorController, AnimatorControllerLayer, AnimatorCullingMode, AnimatorLayerBlendingMode, AnimatorState, AnimatorStateMachine, AnimatorStateTransition, AssetPromise, AssetType, Background, BackgroundMode, BackgroundTextureFillMode, BaseMaterial, Basic2DBatcher, BasicRenderPipeline, BlendFactor, BlendMode, BlendOperation, BlendShape, BlendShapeFrame, BlendState, BlinnPhongMaterial, BoolUpdateFlag, BoxColliderShape, Buffer, BufferBindFlag, BufferMesh, BufferUsage, BufferUtil, Camera, CameraClearFlags, CapsuleColliderShape, CharacterController, CloneManager, Collider, ColliderShape, ColliderShapeUpAxis, CollisionDetectionMode, ColorSpace, ColorWriteMask, CompareFunction, Component, ContentRestorer, ControllerCollisionFlag, ControllerNonWalkableMode, CubeProbe, CullMode, DataType, DependentMode, DepthState, DiffuseMode, DirectLight, DynamicCollider, DynamicColliderConstraints, Engine, EngineObject, Entity, EventDispatcher, FixedJoint, FogMode, Font, FontStyle, GLCapabilityType, HingeJoint, HitResult, IndexBufferBinding, IndexFormat, InputManager, InterpolationType, Joint, JointLimits, JointMotor, Keyframe, Keys, Layer, Light, Loader, Logger, Material, Mesh, MeshRenderer, MeshTopology, ModelMesh, OverflowMode, PBRBaseMaterial, PBRMaterial, PBRSpecularMaterial, ParticleRenderer, ParticleRendererBlendMode, PhysicsManager, PhysicsMaterial, PhysicsMaterialCombineMode, PipelineStage, PlaneColliderShape, Platform, PointLight, Pointer, PointerButton, PointerPhase, PrimitiveMesh, Probe, RasterState, ReferResource, RenderBufferDepthFormat, RenderFace, RenderPass, RenderQueue, RenderQueueType, RenderState, RenderTarget, RenderTargetBlendState, Renderer, ResourceManager, Scene, SceneManager, Script, SetDataOptions, Shader, ShaderData, ShaderFactory, ShaderMacro, ShaderMacroCollection, ShaderPass, ShaderProperty, ShaderPropertyType, ShaderTagKey, ShadowCascadesMode, ShadowResolution, ShadowType, Skin, SkinnedMeshRenderer, Sky, SkyBoxMaterial, SkyProceduralMaterial, SphereColliderShape, SpotLight, SpringJoint, Sprite, SpriteAtlas, SpriteDrawMode, SpriteMask, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer, SpriteTileMode, StateMachineScript, StaticCollider, StencilOperation, StencilState, SubMesh, SubShader, SunMode, SystemInfo, TextHorizontalAlignment, TextRenderer, TextUtils, TextVerticalAlignment, Texture, Texture2D, Texture2DArray, TextureCoordinate, TextureCube, TextureCubeFace, TextureDepthCompareFunction, TextureFilterMode, TextureFormat, TextureWrapMode, Time, TrailMaterial, TrailRenderer, Transform, UnlitMaterial, Utils, VertexBufferBinding, VertexElement, VertexElementFormat, WrapMode, assignmentClone, deepClone, dependentComponents, ignoreClone, request, resourceLoader, shallowClone };
26516
+ export { AmbientLight, AnimationArrayCurve, AnimationBoolCurve, AnimationClip, AnimationClipCurveBinding, AnimationColorCurve, AnimationCurve, AnimationEvent, AnimationFloatArrayCurve, AnimationFloatCurve, AnimationQuaternionCurve, AnimationVector2Curve, AnimationVector3Curve, AnimationVector4Curve, Animator, AnimatorConditionMode, AnimatorController, AnimatorControllerLayer, AnimatorCullingMode, AnimatorLayerBlendingMode, AnimatorState, AnimatorStateMachine, AnimatorStateTransition, AssetPromise, AssetType, Background, BackgroundMode, BackgroundTextureFillMode, BaseMaterial, Basic2DBatcher, BasicRenderPipeline, BlendFactor, BlendMode, BlendOperation, BlendShape, BlendShapeFrame, BlendState, BlinnPhongMaterial, BoolUpdateFlag, BoxColliderShape, Buffer, BufferBindFlag, BufferMesh, BufferUsage, BufferUtil, Camera, CameraClearFlags, CapsuleColliderShape, CharacterController, CloneManager, Collider, ColliderShape, ColliderShapeUpAxis, CollisionDetectionMode, ColorSpace, ColorWriteMask, CompareFunction, Component, ContentRestorer, ControllerCollisionFlag, ControllerNonWalkableMode, CubeProbe, CullMode, DataType, DependentMode, DepthState, DiffuseMode, DirectLight, DynamicCollider, DynamicColliderConstraints, Engine, EngineObject, Entity, EventDispatcher, FixedJoint, FogMode, Font, FontStyle, GLCapabilityType, HingeJoint, HitResult, IndexBufferBinding, IndexFormat, InputManager, InterpolationType, Joint, JointLimits, JointMotor, Keyframe, Keys, Layer, Light, Loader, Logger, Material, Mesh, MeshRenderer, MeshTopology, ModelMesh, OverflowMode, PBRBaseMaterial, PBRMaterial, PBRSpecularMaterial, ParticleRenderer, ParticleRendererBlendMode, PhysicsManager, PhysicsMaterial, PhysicsMaterialCombineMode, PipelineStage, PlaneColliderShape, Platform, PointLight, Pointer, PointerButton, PointerPhase, PrimitiveMesh, Probe, RasterState, ReferResource, RenderBufferDepthFormat, RenderFace, RenderPass, RenderQueue, RenderQueueType, RenderState, RenderTarget, RenderTargetBlendState, Renderer, ResourceManager, Scene, SceneManager, Script, SetDataOptions, Shader, ShaderData, ShaderFactory, ShaderMacro, ShaderMacroCollection, ShaderPass, ShaderProperty, ShaderPropertyType, ShaderTagKey, ShadowCascadesMode, ShadowResolution, ShadowType, Skin, SkinnedMeshRenderer, Sky, SkyBoxMaterial, SkyProceduralMaterial, SphereColliderShape, SpotLight, SpringJoint, Sprite, SpriteAtlas, SpriteDrawMode, SpriteMask, SpriteMaskInteraction, SpriteMaskLayer, SpriteRenderer, SpriteTileMode, StateMachineScript, StaticCollider, StencilOperation, StencilState, SubMesh, SubShader, SunMode, SystemInfo, TextHorizontalAlignment, TextRenderer, TextUtils, TextVerticalAlignment, Texture, Texture2D, Texture2DArray, TextureCoordinate, TextureCube, TextureCubeFace, TextureDepthCompareFunction, TextureFilterMode, TextureFormat, TextureUsage, TextureWrapMode, Time, TrailMaterial, TrailRenderer, Transform, UnlitMaterial, Utils, VertexBufferBinding, VertexElement, VertexElementFormat, WrapMode, assignmentClone, deepClone, dependentComponents, ignoreClone, request, resourceLoader, shallowClone };
26370
26517
  //# sourceMappingURL=module.js.map