@galacean/engine-core 0.9.12 → 0.9.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/module.js CHANGED
@@ -2238,6 +2238,28 @@ var /** @internal */ PromiseState;
2238
2238
  * @remarks The release principle is that it is not referenced by the components, including direct and indirect reference.
2239
2239
  */ _proto.gc = function gc() {
2240
2240
  this._gc(false);
2241
+ var engine = this.engine;
2242
+ engine._renderElementPool.garbageCollection();
2243
+ engine._spriteElementPool.garbageCollection();
2244
+ engine._spriteMaskElementPool.garbageCollection();
2245
+ engine._textElementPool.garbageCollection();
2246
+ var _componentsManager = engine._componentsManager, _lightManager = engine._lightManager;
2247
+ _componentsManager._renderers.garbageCollection();
2248
+ // @ts-ignore
2249
+ _componentsManager._onStartScripts.garbageCollection();
2250
+ // @ts-ignore
2251
+ _componentsManager._onUpdateScripts.garbageCollection();
2252
+ // @ts-ignore
2253
+ _componentsManager._onLateUpdateScripts.garbageCollection();
2254
+ // @ts-ignore
2255
+ _componentsManager._onPhysicsUpdateScripts.garbageCollection();
2256
+ // @ts-ignore
2257
+ _componentsManager._onUpdateAnimations.garbageCollection();
2258
+ // @ts-ignore
2259
+ _componentsManager._onUpdateRenderers.garbageCollection();
2260
+ _lightManager._spotLights.garbageCollection();
2261
+ _lightManager._pointLights.garbageCollection();
2262
+ _lightManager._directLights.garbageCollection();
2241
2263
  };
2242
2264
  /**
2243
2265
  * @internal
@@ -4080,6 +4102,11 @@ var TransformModifyFlags;
4080
4102
  * @returns Cloned entity
4081
4103
  */ _proto.clone = function clone() {
4082
4104
  var cloneEntity = new Entity(this._engine, this.name);
4105
+ var _this = this, hookResource = _this._hookResource;
4106
+ if (hookResource) {
4107
+ cloneEntity._hookResource = hookResource;
4108
+ hookResource._addRefCount(1);
4109
+ }
4083
4110
  cloneEntity._isActive = this._isActive;
4084
4111
  cloneEntity.transform.localMatrix = this.transform.localMatrix;
4085
4112
  var children = this._children;
@@ -4104,6 +4131,10 @@ var TransformModifyFlags;
4104
4131
  return;
4105
4132
  }
4106
4133
  EngineObject.prototype.destroy.call(this);
4134
+ if (this._hookResource) {
4135
+ this._hookResource._addRefCount(-1);
4136
+ this._hookResource = null;
4137
+ }
4107
4138
  var components = this._components;
4108
4139
  for(var i = components.length - 1; i >= 0; i--){
4109
4140
  components[i].destroy();
@@ -9780,9 +9811,9 @@ __decorate([
9780
9811
  function Material(engine, shader) {
9781
9812
  var _this;
9782
9813
  _this = RefObject.call(this, engine) || this;
9783
- /** Shader data. */ _this.shaderData = new ShaderData(ShaderDataGroup.Material);
9784
9814
  /** @internal */ _this._renderStates = [] // todo: later will as a part of shaderData when shader effect frame is OK, that is more powerful and flexible.
9785
9815
  ;
9816
+ _this._shaderData = new ShaderData(ShaderDataGroup.Material);
9786
9817
  _this.shader = shader;
9787
9818
  return _this;
9788
9819
  }
@@ -9814,8 +9845,21 @@ __decorate([
9814
9845
  */ _proto._preRender = function _preRender(renderElement) {};
9815
9846
  /**
9816
9847
  * @override
9817
- */ _proto._onDestroy = function _onDestroy() {};
9848
+ */ _proto._onDestroy = function _onDestroy() {
9849
+ this._shader = null;
9850
+ this._shaderData = null;
9851
+ this._renderStates.length = 0;
9852
+ this._renderStates = null;
9853
+ };
9818
9854
  _create_class(Material, [
9855
+ {
9856
+ key: "shaderData",
9857
+ get: /**
9858
+ * Shader data.
9859
+ */ function get() {
9860
+ return this._shaderData;
9861
+ }
9862
+ },
9819
9863
  {
9820
9864
  key: "shader",
9821
9865
  get: /**
@@ -9884,6 +9928,12 @@ __decorate([
9884
9928
  */ _proto.resetPool = function resetPool() {
9885
9929
  this._elementPoolIndex = 0;
9886
9930
  };
9931
+ _proto.garbageCollection = function garbageCollection() {
9932
+ var _this = this, pool = _this._elementPool;
9933
+ for(var i = pool.length - 1; i >= 0; i--){
9934
+ pool[i].dispose && pool[i].dispose();
9935
+ }
9936
+ };
9887
9937
  return ClassPool;
9888
9938
  }();
9889
9939
 
@@ -9906,6 +9956,9 @@ var RenderElement = function RenderElement() {
9906
9956
  this.renderState = renderState;
9907
9957
  this.shaderPass = shaderPass;
9908
9958
  };
9959
+ _proto.dispose = function dispose() {
9960
+ this.component = this.mesh = this.subMesh = this.material = this.renderState = this.shaderPass = null;
9961
+ };
9909
9962
  return MeshRenderElement;
9910
9963
  }(RenderElement);
9911
9964
 
@@ -9951,6 +10004,9 @@ var SpriteElement = /*#__PURE__*/ function(RenderElement) {
9951
10004
  this.renderState = renderState;
9952
10005
  this.shaderPass = shaderPass;
9953
10006
  };
10007
+ _proto.dispose = function dispose() {
10008
+ this.component = this.renderData = this.material = this.texture = this.renderState = this.shaderPass = null;
10009
+ };
9954
10010
  return SpriteElement;
9955
10011
  }(RenderElement);
9956
10012
 
@@ -9969,6 +10025,9 @@ var SpriteMaskElement = /*#__PURE__*/ function(RenderElement) {
9969
10025
  this.renderData = renderData;
9970
10026
  this.material = material;
9971
10027
  };
10028
+ _proto.dispose = function dispose() {
10029
+ this.component = this.renderData = this.material = null;
10030
+ };
9972
10031
  return SpriteMaskElement;
9973
10032
  }(RenderElement);
9974
10033
 
@@ -9987,7 +10046,6 @@ var Renderer = (_Renderer = /*#__PURE__*/ function(Component) {
9987
10046
  function Renderer1(entity) {
9988
10047
  var _this;
9989
10048
  _this = Component.call(this, entity) || this;
9990
- /** ShaderData related to renderer. */ _this.shaderData = new ShaderData(ShaderDataGroup.Renderer);
9991
10049
  /** @internal */ _this._onUpdateIndex = -1;
9992
10050
  /** @internal */ _this._rendererIndex = -1;
9993
10051
  /** @internal */ _this._globalShaderMacro = new ShaderMacroCollection();
@@ -9995,6 +10053,7 @@ var Renderer = (_Renderer = /*#__PURE__*/ function(Component) {
9995
10053
  _this._overrideUpdate = false;
9996
10054
  _this._materials = [];
9997
10055
  _this._dirtyUpdateFlag = 0;
10056
+ _this._shaderData = new ShaderData(ShaderDataGroup.Renderer);
9998
10057
  _this._mvMatrix = new Matrix();
9999
10058
  _this._mvpMatrix = new Matrix();
10000
10059
  _this._mvInvMatrix = new Matrix();
@@ -10141,6 +10200,17 @@ var Renderer = (_Renderer = /*#__PURE__*/ function(Component) {
10141
10200
  var _materials_i;
10142
10201
  (_materials_i = materials[i]) == null ? void 0 : _materials_i._addRefCount(-1);
10143
10202
  }
10203
+ this._entity = null;
10204
+ this._globalShaderMacro = null;
10205
+ this._bounds = null;
10206
+ this._materials = null;
10207
+ this._shaderData = null;
10208
+ this._mvMatrix = null;
10209
+ this._mvpMatrix = null;
10210
+ this._mvInvMatrix = null;
10211
+ this._normalMatrix = null;
10212
+ this._materialsInstanced = null;
10213
+ this._rendererLayer = null;
10144
10214
  };
10145
10215
  _proto._updateShaderData = function _updateShaderData(context) {
10146
10216
  var entity = this.entity;
@@ -10202,6 +10272,14 @@ var Renderer = (_Renderer = /*#__PURE__*/ function(Component) {
10202
10272
  this._dirtyUpdateFlag |= 0x1;
10203
10273
  };
10204
10274
  _create_class(Renderer1, [
10275
+ {
10276
+ key: "shaderData",
10277
+ get: /**
10278
+ * ShaderData related to renderer.
10279
+ */ function get() {
10280
+ return this._shaderData;
10281
+ }
10282
+ },
10205
10283
  {
10206
10284
  key: "isCulled",
10207
10285
  get: /**
@@ -10286,9 +10364,6 @@ var Renderer = (_Renderer = /*#__PURE__*/ function(Component) {
10286
10364
  }(), function() {
10287
10365
  _Renderer._rendererLayerProperty = Shader.getPropertyByName("oasis_RendererLayer");
10288
10366
  }(), _Renderer);
10289
- __decorate([
10290
- deepClone
10291
- ], Renderer.prototype, "shaderData", void 0);
10292
10367
  __decorate([
10293
10368
  ignoreClone
10294
10369
  ], Renderer.prototype, "_distanceForSort", void 0);
@@ -10316,6 +10391,9 @@ __decorate([
10316
10391
  __decorate([
10317
10392
  ignoreClone
10318
10393
  ], Renderer.prototype, "_dirtyUpdateFlag", void 0);
10394
+ __decorate([
10395
+ deepClone
10396
+ ], Renderer.prototype, "_shaderData", void 0);
10319
10397
  __decorate([
10320
10398
  ignoreClone
10321
10399
  ], Renderer.prototype, "_mvMatrix", void 0);
@@ -10570,6 +10648,7 @@ SimpleSpriteAssembler = __decorate([
10570
10648
  sprite._addRefCount(-1);
10571
10649
  sprite._updateFlagManager.removeListener(this._onSpriteChange);
10572
10650
  }
10651
+ this._entity = null;
10573
10652
  this._sprite = null;
10574
10653
  this._renderData = null;
10575
10654
  };
@@ -11175,14 +11254,19 @@ var BufferUtil = /*#__PURE__*/ function() {
11175
11254
 
11176
11255
  /**
11177
11256
  * Sub-mesh, mainly contains drawing information.
11178
- */ var SubMesh = function SubMesh(start, count, topology) {
11179
- if (start === void 0) start = 0;
11180
- if (count === void 0) count = 0;
11181
- if (topology === void 0) topology = MeshTopology.Triangles;
11182
- this.start = start;
11183
- this.count = count;
11184
- this.topology = topology;
11185
- };
11257
+ */ var SubMesh = /*#__PURE__*/ function() {
11258
+ function SubMesh(start, count, topology) {
11259
+ if (start === void 0) start = 0;
11260
+ if (count === void 0) count = 0;
11261
+ if (topology === void 0) topology = MeshTopology.Triangles;
11262
+ this.start = start;
11263
+ this.count = count;
11264
+ this.topology = topology;
11265
+ }
11266
+ var _proto = SubMesh.prototype;
11267
+ _proto.dispose = function dispose() {};
11268
+ return SubMesh;
11269
+ }();
11186
11270
 
11187
11271
  /**
11188
11272
  * Mesh.
@@ -11298,6 +11382,7 @@ var BufferUtil = /*#__PURE__*/ function() {
11298
11382
  this._indexBufferBinding = null;
11299
11383
  this._vertexElements = null;
11300
11384
  this._vertexElementMap = null;
11385
+ this._updateFlagManager = null;
11301
11386
  this._platformPrimitive.destroy();
11302
11387
  };
11303
11388
  _proto._setVertexElements = function _setVertexElements(elements) {
@@ -12983,8 +13068,8 @@ var VertexChangedFlags;
12983
13068
  */ _proto._onDestroy = function _onDestroy() {
12984
13069
  Renderer.prototype._onDestroy.call(this);
12985
13070
  var mesh = this._mesh;
12986
- if (mesh && !mesh.destroyed) {
12987
- mesh._addRefCount(-1);
13071
+ if (mesh) {
13072
+ mesh.destroyed || mesh._addRefCount(-1);
12988
13073
  mesh._updateFlagManager.removeListener(this._onMeshChanged);
12989
13074
  this._mesh = null;
12990
13075
  }
@@ -13321,10 +13406,21 @@ var rePropName = RegExp(// Match anything that isn't a dot or bracket.
13321
13406
  * @internal
13322
13407
  * @override
13323
13408
  */ _proto._onDestroy = function _onDestroy() {
13324
- var _this_rootBone, _this__jointTexture;
13409
+ var _this__rootBone, _this__jointTexture;
13325
13410
  MeshRenderer.prototype._onDestroy.call(this);
13326
- (_this_rootBone = this.rootBone) == null ? void 0 : _this_rootBone.transform._updateFlagManager.removeListener(this._onTransformChanged);
13411
+ (_this__rootBone = this._rootBone) == null ? void 0 : _this__rootBone.transform._updateFlagManager.removeListener(this._onTransformChanged);
13412
+ this._rootBone = null;
13413
+ this._jointDataCreateCache = null;
13414
+ this._skin = null;
13415
+ this._blendShapeWeights = null;
13416
+ this._localBounds = null;
13417
+ this._jointMatrices = null;
13327
13418
  (_this__jointTexture = this._jointTexture) == null ? void 0 : _this__jointTexture.destroy();
13419
+ this._jointTexture = null;
13420
+ if (this._jointEntities) {
13421
+ this._jointEntities.length = 0;
13422
+ this._jointEntities = null;
13423
+ }
13328
13424
  };
13329
13425
  /**
13330
13426
  * @internal
@@ -14712,6 +14808,11 @@ var TextRenderElement = /*#__PURE__*/ function(RenderElement) {
14712
14808
  _this.multiRenderData = true;
14713
14809
  return _this;
14714
14810
  }
14811
+ var _proto = TextRenderElement.prototype;
14812
+ _proto.dispose = function dispose() {
14813
+ this.component = this.material = this.renderState = this.shaderPass = null;
14814
+ this.charElements.length = 0;
14815
+ };
14715
14816
  return TextRenderElement;
14716
14817
  }(RenderElement);
14717
14818
 
@@ -14859,7 +14960,6 @@ var TextRenderElement = /*#__PURE__*/ function(RenderElement) {
14859
14960
  this.texture = null;
14860
14961
  this.solidColor = null;
14861
14962
  this.sky.destroy();
14862
- this._engine = null;
14863
14963
  };
14864
14964
  /**
14865
14965
  * @internal
@@ -15244,8 +15344,6 @@ var TextRenderElement = /*#__PURE__*/ function(RenderElement) {
15244
15344
  function Scene(engine, name) {
15245
15345
  var _this;
15246
15346
  _this = EngineObject.call(this, engine) || this;
15247
- /** The background of the scene. */ _this.background = new Background(_this._engine);
15248
- /** Scene-related shader data. */ _this.shaderData = new ShaderData(ShaderDataGroup.Scene);
15249
15347
  /** If cast shadows. */ _this.castShadows = true;
15250
15348
  /** The resolution of the shadow maps. */ _this.shadowResolution = ShadowResolution.Medium;
15251
15349
  /** The splits of two cascade distribution. */ _this.shadowTwoCascadeSplits = 1.0 / 3.0;
@@ -15255,6 +15353,8 @@ var TextRenderElement = /*#__PURE__*/ function(RenderElement) {
15255
15353
  /** @internal */ _this._isActiveInEngine = false;
15256
15354
  /** @internal */ _this._globalShaderMacro = new ShaderMacroCollection();
15257
15355
  /** @internal */ _this._rootEntities = [];
15356
+ _this._background = new Background(_this._engine);
15357
+ _this._shaderData = new ShaderData(ShaderDataGroup.Scene);
15258
15358
  _this._shadowCascades = ShadowCascadesMode.NoCascades;
15259
15359
  _this._fogMode = FogMode.None;
15260
15360
  _this._fogColor = new Color$1(0.5, 0.5, 0.5, 1.0);
@@ -15416,6 +15516,8 @@ var TextRenderElement = /*#__PURE__*/ function(RenderElement) {
15416
15516
  var sunLightIndex = lightManager._getSunLightIndex();
15417
15517
  if (sunLightIndex !== -1) {
15418
15518
  this._sunLight = lightManager._directLights.get(sunLightIndex);
15519
+ } else {
15520
+ this._sunLight = null;
15419
15521
  }
15420
15522
  if (this.castShadows && this._sunLight && this._sunLight.shadowType !== ShadowType.None) {
15421
15523
  shaderData.enableMacro("SHADOW_TYPE", this._sunLight.shadowType.toString());
@@ -15475,6 +15577,22 @@ var TextRenderElement = /*#__PURE__*/ function(RenderElement) {
15475
15577
  this._fogParams.w = density / Math.sqrt(Math.LN2);
15476
15578
  };
15477
15579
  _create_class(Scene, [
15580
+ {
15581
+ key: "shaderData",
15582
+ get: /**
15583
+ * Scene-related shader data.
15584
+ */ function get() {
15585
+ return this._shaderData;
15586
+ }
15587
+ },
15588
+ {
15589
+ key: "background",
15590
+ get: /**
15591
+ * The background of the scene.
15592
+ */ function get() {
15593
+ return this._background;
15594
+ }
15595
+ },
15478
15596
  {
15479
15597
  key: "shadowCascades",
15480
15598
  get: /**
@@ -17766,7 +17884,6 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component) {
17766
17884
  function Camera1(entity) {
17767
17885
  var _this;
17768
17886
  _this = Component.call(this, entity) || this;
17769
- /** Shader data. */ _this.shaderData = new ShaderData(ShaderDataGroup.Camera);
17770
17887
  /** Rendering priority - A Camera with higher priority will be rendered on top of a camera with lower priority. */ _this.priority = 0;
17771
17888
  /** Whether to enable frustum culling, it is enabled by default. */ _this.enableFrustumCulling = true;
17772
17889
  /**
@@ -17780,6 +17897,7 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component) {
17780
17897
  /** @internal */ _this._globalShaderMacro = new ShaderMacroCollection();
17781
17898
  /** @internal */ _this._frustum = new BoundingFrustum();
17782
17899
  /** @internal */ _this._virtualCamera = new VirtualCamera();
17900
+ _this._shaderData = new ShaderData(ShaderDataGroup.Camera);
17783
17901
  _this._isProjMatSetting = false;
17784
17902
  _this._nearClipPlane = 0.1;
17785
17903
  _this._farClipPlane = 100;
@@ -17978,6 +18096,20 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component) {
17978
18096
  this._isInvViewProjDirty.destroy();
17979
18097
  this._isViewMatrixDirty.destroy();
17980
18098
  this.shaderData._addRefCount(-1);
18099
+ this._entity = null;
18100
+ this._globalShaderMacro = null;
18101
+ this._frustum = null;
18102
+ this._renderPipeline = null;
18103
+ this._virtualCamera = null;
18104
+ this._shaderData = null;
18105
+ this._frustumViewChangeFlag = null;
18106
+ this._transform = null;
18107
+ this._isViewMatrixDirty = null;
18108
+ this._isInvViewProjDirty = null;
18109
+ this._viewport = null;
18110
+ this._inverseProjectionMatrix = null;
18111
+ this._lastAspectSize = null;
18112
+ this._invViewProjMat = null;
17981
18113
  };
17982
18114
  _proto._projMatChange = function _projMatChange() {
17983
18115
  this._isFrustumProjectDirty = true;
@@ -18017,6 +18149,14 @@ var Camera = (_Camera = /*#__PURE__*/ function(Component) {
18017
18149
  return this._inverseProjectionMatrix;
18018
18150
  };
18019
18151
  _create_class(Camera1, [
18152
+ {
18153
+ key: "shaderData",
18154
+ get: /**
18155
+ * Shader data.
18156
+ */ function get() {
18157
+ return this._shaderData;
18158
+ }
18159
+ },
18020
18160
  {
18021
18161
  key: "nearClipPlane",
18022
18162
  get: /**
@@ -20085,6 +20225,7 @@ SlicedSpriteAssembler = __decorate([
20085
20225
  sprite._addRefCount(-1);
20086
20226
  sprite._updateFlagManager.removeListener(this._onSpriteChange);
20087
20227
  }
20228
+ this._entity = null;
20088
20229
  this._color = null;
20089
20230
  this._sprite = null;
20090
20231
  this._assembler = null;
@@ -21324,8 +21465,6 @@ var DirtyFlag;
21324
21465
  * @internal
21325
21466
  */ var AnimationCurveOwner = /*#__PURE__*/ function() {
21326
21467
  function AnimationCurveOwner(target, type, property, cureType) {
21327
- this.crossCurveMark = 0;
21328
- this.hasSavedDefaultValue = false;
21329
21468
  this.baseEvaluateData = {
21330
21469
  curKeyframeIndex: 0,
21331
21470
  value: null
@@ -21338,7 +21477,7 @@ var DirtyFlag;
21338
21477
  this.type = type;
21339
21478
  this.property = property;
21340
21479
  this.component = target.getComponent(type);
21341
- this._cureType = cureType;
21480
+ this.cureType = cureType;
21342
21481
  var assemblerType = AnimationCurveOwner.getAssemblerType(type, property);
21343
21482
  this._assembler = new assemblerType();
21344
21483
  this._assembler.initialize(this);
@@ -21347,89 +21486,80 @@ var DirtyFlag;
21347
21486
  }
21348
21487
  }
21349
21488
  var _proto = AnimationCurveOwner.prototype;
21350
- _proto.evaluateAndApplyValue = function evaluateAndApplyValue(curve, time, layerWeight, additive) {
21351
- if (curve.keys.length) {
21352
- if (additive) {
21353
- var value = curve._evaluateAdditive(time, this.baseEvaluateData);
21354
- var cureType = this._cureType;
21355
- if (cureType._isReferenceType) {
21356
- cureType._additiveValue(value, layerWeight, this.referenceTargetValue);
21357
- } else {
21358
- var assembler = this._assembler;
21359
- var originValue = assembler.getTargetValue();
21360
- var additiveValue = cureType._additiveValue(value, layerWeight, originValue);
21361
- assembler.setTargetValue(additiveValue);
21362
- }
21363
- } else {
21364
- var value1 = curve._evaluate(time, this.baseEvaluateData);
21365
- this._applyValue(value1, layerWeight);
21366
- }
21367
- }
21489
+ _proto.evaluateValue = function evaluateValue(curve, time, additive) {
21490
+ return additive ? curve._evaluateAdditive(time, this.baseEvaluateData) : curve._evaluate(time, this.baseEvaluateData);
21368
21491
  };
21369
- _proto.crossFadeAndApplyValue = function crossFadeAndApplyValue(srcCurve, destCurve, srcTime, destTime, crossWeight, layerWeight, additive) {
21370
- 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;
21371
- 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;
21372
- this._applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive);
21492
+ _proto.evaluateCrossFadeValue = function evaluateCrossFadeValue(srcCurve, destCurve, srcTime, destTime, crossWeight, additive) {
21493
+ 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;
21494
+ 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;
21495
+ return this._lerpValue(srcValue, destValue, crossWeight);
21373
21496
  };
21374
- _proto.crossFadeFromPoseAndApplyValue = function crossFadeFromPoseAndApplyValue(destCurve, destTime, crossWeight, layerWeight, additive) {
21375
- var srcValue = additive ? this._cureType._subtractValue(this.fixedPoseValue, this.defaultValue, this.baseEvaluateData.value) : this.fixedPoseValue;
21376
- 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;
21377
- this._applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive);
21497
+ _proto.crossFadeFromPoseAndApplyValue = function crossFadeFromPoseAndApplyValue(destCurve, destTime, crossWeight, additive) {
21498
+ var srcValue = additive ? this.cureType._subtractValue(this.fixedPoseValue, this.defaultValue, this.baseEvaluateData.value) : this.fixedPoseValue;
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);
21378
21501
  };
21379
21502
  _proto.revertDefaultValue = function revertDefaultValue() {
21380
21503
  this._assembler.setTargetValue(this.defaultValue);
21381
21504
  };
21505
+ _proto.getEvaluateValue = function getEvaluateValue(out) {
21506
+ if (this.cureType._isReferenceType) {
21507
+ this.cureType._copyValue(this.baseEvaluateData.value, out);
21508
+ return out;
21509
+ } else {
21510
+ return this.baseEvaluateData.value;
21511
+ }
21512
+ };
21382
21513
  _proto.saveDefaultValue = function saveDefaultValue() {
21383
- if (this._cureType._isReferenceType) {
21384
- this._cureType._copyValue(this.referenceTargetValue, this.defaultValue);
21514
+ if (this.cureType._isReferenceType) {
21515
+ this.cureType._copyValue(this.referenceTargetValue, this.defaultValue);
21385
21516
  } else {
21386
21517
  this.defaultValue = this._assembler.getTargetValue();
21387
21518
  }
21388
- this.hasSavedDefaultValue = true;
21389
21519
  };
21390
21520
  _proto.saveFixedPoseValue = function saveFixedPoseValue() {
21391
- if (this._cureType._isReferenceType) {
21392
- this._cureType._copyValue(this.referenceTargetValue, this.fixedPoseValue);
21521
+ if (this.cureType._isReferenceType) {
21522
+ this.cureType._copyValue(this.referenceTargetValue, this.fixedPoseValue);
21393
21523
  } else {
21394
21524
  this.fixedPoseValue = this._assembler.getTargetValue();
21395
21525
  }
21396
21526
  };
21397
- _proto._applyValue = function _applyValue(value, weight) {
21398
- if (weight === 1.0) {
21399
- if (this._cureType._isReferenceType) {
21400
- this._cureType._copyValue(value, this.referenceTargetValue);
21527
+ _proto.applyValue = function applyValue(value, weight, additive) {
21528
+ var cureType = this.cureType;
21529
+ if (additive) {
21530
+ if (cureType._isReferenceType) {
21531
+ cureType._additiveValue(value, weight, this.referenceTargetValue);
21401
21532
  } else {
21402
- this._assembler.setTargetValue(value);
21533
+ var assembler = this._assembler;
21534
+ var originValue = assembler.getTargetValue();
21535
+ var additiveValue = cureType._additiveValue(value, weight, originValue);
21536
+ assembler.setTargetValue(additiveValue);
21403
21537
  }
21404
21538
  } else {
21405
- if (this._cureType._isReferenceType) {
21406
- var targetValue = this.referenceTargetValue;
21407
- this._cureType._lerpValue(targetValue, value, weight, targetValue);
21539
+ if (weight === 1.0) {
21540
+ if (cureType._isReferenceType) {
21541
+ cureType._copyValue(value, this.referenceTargetValue);
21542
+ } else {
21543
+ this._assembler.setTargetValue(value);
21544
+ }
21408
21545
  } else {
21409
- var originValue = this._assembler.getTargetValue();
21410
- var lerpValue = this._cureType._lerpValue(originValue, value, weight);
21411
- this._assembler.setTargetValue(lerpValue);
21546
+ if (cureType._isReferenceType) {
21547
+ var targetValue = this.referenceTargetValue;
21548
+ cureType._lerpValue(targetValue, value, weight, targetValue);
21549
+ } else {
21550
+ var originValue1 = this._assembler.getTargetValue();
21551
+ var lerpValue = cureType._lerpValue(originValue1, value, weight);
21552
+ this._assembler.setTargetValue(lerpValue);
21553
+ }
21412
21554
  }
21413
21555
  }
21414
21556
  };
21415
- _proto._applyCrossValue = function _applyCrossValue(srcValue, destValue, crossWeight, layerWeight, additive) {
21416
- var out;
21417
- if (this._cureType._isReferenceType) {
21418
- out = this.baseEvaluateData.value;
21419
- this._cureType._lerpValue(srcValue, destValue, crossWeight, out);
21420
- } else {
21421
- out = this._cureType._lerpValue(srcValue, destValue, crossWeight);
21422
- }
21423
- if (additive) {
21424
- if (this._cureType._isReferenceType) {
21425
- this._cureType._additiveValue(out, layerWeight, this.referenceTargetValue);
21426
- } else {
21427
- var originValue = this._assembler.getTargetValue();
21428
- var lerpValue = this._cureType._additiveValue(out, layerWeight, originValue);
21429
- this._assembler.setTargetValue(lerpValue);
21430
- }
21557
+ _proto._lerpValue = function _lerpValue(srcValue, destValue, crossWeight) {
21558
+ if (this.cureType._isReferenceType) {
21559
+ return this.cureType._lerpValue(srcValue, destValue, crossWeight, this.baseEvaluateData.value);
21431
21560
  } else {
21432
- this._applyValue(out, layerWeight);
21561
+ this.baseEvaluateData.value = this.cureType._lerpValue(srcValue, destValue, crossWeight);
21562
+ return this.baseEvaluateData.value;
21433
21563
  }
21434
21564
  };
21435
21565
  AnimationCurveOwner.registerAssembler = function registerAssembler(componentType, property, assemblerType) {
@@ -21523,6 +21653,27 @@ AnimationCurveOwner.registerAssembler(Transform, "scale", ScaleAnimationCurveOwn
21523
21653
  }();
21524
21654
  AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights", BlendShapeWeightsAnimationCurveOwnerAssembler);
21525
21655
 
21656
+ /**
21657
+ * @internal
21658
+ */ var AnimationCurveLayerOwner = /*#__PURE__*/ function() {
21659
+ function AnimationCurveLayerOwner() {
21660
+ this.crossCurveMark = 0;
21661
+ }
21662
+ var _proto = AnimationCurveLayerOwner.prototype;
21663
+ _proto.initFinalValue = function initFinalValue() {
21664
+ var _this_curveOwner = this.curveOwner, cureType = _this_curveOwner.cureType, defaultValue = _this_curveOwner.defaultValue;
21665
+ if (cureType._isReferenceType) {
21666
+ cureType._copyValue(defaultValue, this.finalValue);
21667
+ } else {
21668
+ this.finalValue = defaultValue;
21669
+ }
21670
+ };
21671
+ _proto.saveFinalValue = function saveFinalValue() {
21672
+ this.finalValue = this.curveOwner.getEvaluateValue(this.finalValue);
21673
+ };
21674
+ return AnimationCurveLayerOwner;
21675
+ }();
21676
+
21526
21677
  /**
21527
21678
  * Associate AnimationCurve and the Entity
21528
21679
  */ var AnimationClipCurveBinding = /*#__PURE__*/ function() {
@@ -21536,10 +21687,22 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
21536
21687
  var curveType = this.curve.constructor;
21537
21688
  var owner = new AnimationCurveOwner(entity, this.type, this.property, curveType);
21538
21689
  curveType._initializeOwner(owner);
21690
+ owner.saveDefaultValue();
21539
21691
  return owner;
21540
21692
  };
21541
21693
  /**
21542
21694
  * @internal
21695
+ */ _proto._createCurveLayerOwner = function _createCurveLayerOwner(owner) {
21696
+ var curveType = this.curve.constructor;
21697
+ var layerOwner = new AnimationCurveLayerOwner();
21698
+ curveType._initializeLayerOwner(layerOwner);
21699
+ layerOwner.curveOwner = owner;
21700
+ // If curve.keys.length is 0, updateFinishedState will assign 0 to the target, causing an error, so initialize by assigning defaultValue to finalValue.
21701
+ layerOwner.initFinalValue();
21702
+ return layerOwner;
21703
+ };
21704
+ /**
21705
+ * @internal
21543
21706
  */ _proto._getTempCurveOwner = function _getTempCurveOwner(entity) {
21544
21707
  var instanceId = entity.instanceId;
21545
21708
  if (!this._tempCurveOwner[instanceId]) {
@@ -21619,7 +21782,8 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
21619
21782
  var targetEntity = entity.findByPath(curveData.relativePath);
21620
21783
  if (targetEntity) {
21621
21784
  var curveOwner = curveData._getTempCurveOwner(targetEntity);
21622
- curveOwner.evaluateAndApplyValue(curveData.curve, time, 1, false);
21785
+ var value = curveOwner.evaluateValue(curveData.curve, time, false);
21786
+ curveOwner.applyValue(value, 1, false);
21623
21787
  }
21624
21788
  }
21625
21789
  };
@@ -21763,6 +21927,7 @@ AnimationCurveOwner.registerAssembler(SkinnedMeshRenderer, "blendShapeWeights",
21763
21927
  break;
21764
21928
  }
21765
21929
  }
21930
+ evaluateData.value = value;
21766
21931
  return value;
21767
21932
  };
21768
21933
  /**
@@ -21819,6 +21984,11 @@ var AnimationArrayCurve = (_AnimationArrayCurve = /*#__PURE__*/ function(Animati
21819
21984
  };
21820
21985
  /**
21821
21986
  * @internal
21987
+ */ AnimationArrayCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
21988
+ owner.finalValue = [];
21989
+ };
21990
+ /**
21991
+ * @internal
21822
21992
  */ AnimationArrayCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
21823
21993
  for(var i = 0, n = out.length; i < n; ++i){
21824
21994
  var src = srcValue[i];
@@ -21909,6 +22079,11 @@ var AnimationBoolCurve = (_AnimationBoolCurve = /*#__PURE__*/ function(Animation
21909
22079
  };
21910
22080
  /**
21911
22081
  * @internal
22082
+ */ AnimationBoolCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22083
+ owner.finalValue = false;
22084
+ };
22085
+ /**
22086
+ * @internal
21912
22087
  */ AnimationBoolCurve._lerpValue = function _lerpValue(srcValue, destValue) {
21913
22088
  return destValue;
21914
22089
  };
@@ -21966,6 +22141,11 @@ var AnimationColorCurve = (_AnimationColorCurve = /*#__PURE__*/ function(Animati
21966
22141
  };
21967
22142
  /**
21968
22143
  * @internal
22144
+ */ AnimationColorCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22145
+ owner.finalValue = new Color$1();
22146
+ };
22147
+ /**
22148
+ * @internal
21969
22149
  */ AnimationColorCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
21970
22150
  Color$1.lerp(srcValue, destValue, weight, out);
21971
22151
  return out;
@@ -22073,6 +22253,12 @@ var AnimationFloatArrayCurve = (_AnimationFloatArrayCurve = /*#__PURE__*/ functi
22073
22253
  };
22074
22254
  /**
22075
22255
  * @internal
22256
+ */ AnimationFloatArrayCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22257
+ var size = owner.curveOwner.referenceTargetValue.length;
22258
+ owner.finalValue = new Float32Array(size);
22259
+ };
22260
+ /**
22261
+ * @internal
22076
22262
  */ AnimationFloatArrayCurve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22077
22263
  for(var i = 0, n = out.length; i < n; ++i){
22078
22264
  var src = srcValue[i];
@@ -22163,6 +22349,11 @@ var AnimationFloatCurve = (_AnimationFloatCurve = /*#__PURE__*/ function(Animati
22163
22349
  };
22164
22350
  /**
22165
22351
  * @internal
22352
+ */ AnimationFloatCurve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22353
+ owner.finalValue = 0;
22354
+ };
22355
+ /**
22356
+ * @internal
22166
22357
  */ AnimationFloatCurve._lerpValue = function _lerpValue(srcValue, destValue, crossWeight) {
22167
22358
  return srcValue + (destValue - srcValue) * crossWeight;
22168
22359
  };
@@ -22232,6 +22423,11 @@ var AnimationQuaternionCurve = (_AnimationQuaternionCurve = /*#__PURE__*/ functi
22232
22423
  };
22233
22424
  /**
22234
22425
  * @internal
22426
+ */ AnimationQuaternionCurve1._initializeLayerOwner = function _initializeLayerOwner(owner) {
22427
+ owner.finalValue = new Quaternion();
22428
+ };
22429
+ /**
22430
+ * @internal
22235
22431
  */ AnimationQuaternionCurve1._lerpValue = function _lerpValue(src, dest, weight, out) {
22236
22432
  Quaternion.slerp(src, dest, weight, out);
22237
22433
  return out;
@@ -22336,6 +22532,11 @@ var AnimationVector2Curve = (_AnimationVector2Curve = /*#__PURE__*/ function(Ani
22336
22532
  };
22337
22533
  /**
22338
22534
  * @internal
22535
+ */ AnimationVector2Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22536
+ owner.finalValue = new Vector2();
22537
+ };
22538
+ /**
22539
+ * @internal
22339
22540
  */ AnimationVector2Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22340
22541
  Vector2.lerp(srcValue, destValue, weight, out);
22341
22542
  return out;
@@ -22421,6 +22622,11 @@ var AnimationVector3Curve = (_AnimationVector3Curve = /*#__PURE__*/ function(Ani
22421
22622
  };
22422
22623
  /**
22423
22624
  * @internal
22625
+ */ AnimationVector3Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22626
+ owner.finalValue = new Vector3();
22627
+ };
22628
+ /**
22629
+ * @internal
22424
22630
  */ AnimationVector3Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22425
22631
  Vector3.lerp(srcValue, destValue, weight, out);
22426
22632
  return out;
@@ -22518,6 +22724,11 @@ var AnimationVector4Curve = (_AnimationVector4Curve = /*#__PURE__*/ function(Ani
22518
22724
  };
22519
22725
  /**
22520
22726
  * @internal
22727
+ */ AnimationVector4Curve._initializeLayerOwner = function _initializeLayerOwner(owner) {
22728
+ owner.finalValue = new Vector4();
22729
+ };
22730
+ /**
22731
+ * @internal
22521
22732
  */ AnimationVector4Curve._lerpValue = function _lerpValue(srcValue, destValue, weight, out) {
22522
22733
  Vector4.lerp(srcValue, destValue, weight, out);
22523
22734
  return out;
@@ -22627,13 +22838,21 @@ var AnimatorLayerBlendingMode;
22627
22838
  LayerState[LayerState[/** Playing state. */ "Playing"] = 1] = "Playing";
22628
22839
  LayerState[LayerState[/** CrossFading state. */ "CrossFading"] = 2] = "CrossFading";
22629
22840
  LayerState[LayerState[/** FixedCrossFading state. */ "FixedCrossFading"] = 3] = "FixedCrossFading";
22841
+ LayerState[LayerState[/** Finished state. */ "Finished"] = 4] = "Finished";
22630
22842
  })(LayerState || (LayerState = {}));
22631
22843
 
22632
22844
  /**
22633
22845
  * @internal
22634
- */ var AnimationEventHandler = function AnimationEventHandler() {
22635
- this.handlers = [];
22636
- };
22846
+ */ var AnimationEventHandler = /*#__PURE__*/ function() {
22847
+ function AnimationEventHandler() {
22848
+ this.handlers = [];
22849
+ }
22850
+ var _proto = AnimationEventHandler.prototype;
22851
+ _proto.dispose = function dispose() {
22852
+ this.handlers.length = 0;
22853
+ };
22854
+ return AnimationEventHandler;
22855
+ }();
22637
22856
 
22638
22857
  /**
22639
22858
  * Transitions define when and how the state machine switch from on state to another. AnimatorTransition always originate from a StateMachine or a StateMachine entry.
@@ -22691,12 +22910,14 @@ var AnimatorLayerBlendingMode;
22691
22910
  * @internal
22692
22911
  */ var AnimatorLayerData = /*#__PURE__*/ function() {
22693
22912
  function AnimatorLayerData() {
22913
+ this.curveOwnerPool = Object.create(null);
22694
22914
  this.animatorStateDataMap = {};
22695
22915
  this.srcPlayData = new AnimatorStatePlayData();
22696
22916
  this.destPlayData = new AnimatorStatePlayData();
22697
22917
  this.layerState = LayerState.Standby;
22698
22918
  this.crossCurveMark = 0;
22699
22919
  this.manuallyTransition = new AnimatorStateTransition();
22920
+ this.crossLayerOwnerCollection = [];
22700
22921
  }
22701
22922
  var _proto = AnimatorLayerData.prototype;
22702
22923
  _proto.switchPlayData = function switchPlayData() {
@@ -22711,7 +22932,7 @@ var AnimatorLayerBlendingMode;
22711
22932
  /**
22712
22933
  * @internal
22713
22934
  */ var AnimatorStateData = function AnimatorStateData() {
22714
- this.curveOwners = [];
22935
+ this.curveLayerOwner = [];
22715
22936
  this.eventHandlers = [];
22716
22937
  };
22717
22938
 
@@ -22725,8 +22946,8 @@ var AnimatorLayerBlendingMode;
22725
22946
  /** Culling mode of this Animator. */ _this.cullingMode = AnimatorCullingMode.None;
22726
22947
  /** The playback speed of the Animator, 1.0 is normal playback speed. */ _this.speed = 1.0;
22727
22948
  _this._animatorLayersData = [];
22728
- _this._crossOwnerCollection = [];
22729
- _this._animationCurveOwners = [];
22949
+ _this._curveOwnerPool = Object.create(null);
22950
+ _this._needRevertCurveOwners = [];
22730
22951
  _this._animationEventHandlerPool = new ClassPool(AnimationEventHandler);
22731
22952
  _this._tempAnimatorStateInfo = {
22732
22953
  layerIndex: -1,
@@ -22749,7 +22970,7 @@ var AnimatorLayerBlendingMode;
22749
22970
  this._reset();
22750
22971
  }
22751
22972
  var stateInfo = this._getAnimatorStateInfo(stateName, layerIndex);
22752
- var state = stateInfo.state;
22973
+ var state = stateInfo.state, playLayerIndex = stateInfo.layerIndex;
22753
22974
  if (!state) {
22754
22975
  return;
22755
22976
  }
@@ -22758,9 +22979,8 @@ var AnimatorLayerBlendingMode;
22758
22979
  return;
22759
22980
  }
22760
22981
  var animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
22761
- //TODO CM: Not consider same stateName, but different animation
22762
- var animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData);
22763
- this._preparePlay(animatorLayerData, state, animatorStateData);
22982
+ var animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData, playLayerIndex);
22983
+ this._preparePlay(animatorLayerData, state);
22764
22984
  animatorLayerData.layerState = LayerState.Playing;
22765
22985
  animatorLayerData.srcPlayData.reset(state, animatorStateData, state._getDuration() * normalizedTimeOffset);
22766
22986
  };
@@ -22811,6 +23031,7 @@ var AnimatorLayerBlendingMode;
22811
23031
  return;
22812
23032
  }
22813
23033
  deltaTime *= this.speed;
23034
+ this._revertCurveOwners();
22814
23035
  for(var i1 = 0, n1 = animatorController.layers.length; i1 < n1; i1++){
22815
23036
  var animatorLayerData = this._getAnimatorLayerData(i1);
22816
23037
  if (animatorLayerData.layerState === LayerState.Standby) {
@@ -22851,17 +23072,17 @@ var AnimatorLayerBlendingMode;
22851
23072
  /**
22852
23073
  * @internal
22853
23074
  */ _proto._reset = function _reset() {
22854
- var _this = this, animationCurveOwners = _this._animationCurveOwners;
23075
+ var _this = this, animationCurveOwners = _this._curveOwnerPool;
22855
23076
  for(var instanceId in animationCurveOwners){
22856
23077
  var propertyOwners = animationCurveOwners[instanceId];
22857
23078
  for(var property in propertyOwners){
22858
23079
  var owner = propertyOwners[property];
22859
- owner.hasSavedDefaultValue && owner.revertDefaultValue();
23080
+ owner.revertDefaultValue();
22860
23081
  }
22861
23082
  }
22862
23083
  this._animatorLayersData.length = 0;
22863
- this._crossOwnerCollection.length = 0;
22864
- this._animationCurveOwners.length = 0;
23084
+ this._needRevertCurveOwners.length = 0;
23085
+ this._curveOwnerPool = {};
22865
23086
  this._animationEventHandlerPool.resetPool();
22866
23087
  if (this._controllerUpdateFlag) {
22867
23088
  this._controllerUpdateFlag.flag = false;
@@ -22888,38 +23109,51 @@ var AnimatorLayerBlendingMode;
22888
23109
  stateInfo.state = state;
22889
23110
  return stateInfo;
22890
23111
  };
22891
- _proto._saveDefaultValues = function _saveDefaultValues(stateData) {
22892
- var curveOwners = stateData.curveOwners;
22893
- for(var i = curveOwners.length - 1; i >= 0; i--){
22894
- var _curveOwners_i;
22895
- (_curveOwners_i = curveOwners[i]) == null ? void 0 : _curveOwners_i.saveDefaultValue();
22896
- }
22897
- };
22898
- _proto._getAnimatorStateData = function _getAnimatorStateData(stateName, animatorState, animatorLayerData) {
23112
+ _proto._getAnimatorStateData = function _getAnimatorStateData(stateName, animatorState, animatorLayerData, layerIndex) {
22899
23113
  var animatorStateDataMap = animatorLayerData.animatorStateDataMap;
22900
23114
  var animatorStateData = animatorStateDataMap[stateName];
22901
23115
  if (!animatorStateData) {
22902
23116
  animatorStateData = new AnimatorStateData();
22903
23117
  animatorStateDataMap[stateName] = animatorStateData;
22904
- this._saveAnimatorStateData(animatorState, animatorStateData);
23118
+ this._saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData, layerIndex);
22905
23119
  this._saveAnimatorEventHandlers(animatorState, animatorStateData);
22906
23120
  }
22907
23121
  return animatorStateData;
22908
23122
  };
22909
- _proto._saveAnimatorStateData = function _saveAnimatorStateData(animatorState, animatorStateData) {
22910
- var _this = this, entity = _this.entity, animationCureOwners = _this._animationCurveOwners;
22911
- var curveOwners = animatorStateData.curveOwners;
23123
+ _proto._saveAnimatorStateData = function _saveAnimatorStateData(animatorState, animatorStateData, animatorLayerData, layerIndex) {
23124
+ var _this = this, entity = _this.entity, curveOwnerPool = _this._curveOwnerPool;
23125
+ var curveLayerOwner = animatorStateData.curveLayerOwner;
23126
+ var layerCurveOwnerPool = animatorLayerData.curveOwnerPool;
22912
23127
  var _animatorState_clip = animatorState.clip, curves = _animatorState_clip._curveBindings;
22913
23128
  for(var i = curves.length - 1; i >= 0; i--){
22914
23129
  var curve = curves[i];
22915
23130
  var targetEntity = curve.relativePath === "" ? entity : entity.findByPath(curve.relativePath);
22916
23131
  if (targetEntity) {
23132
+ var _curveOwnerPool, _instanceId, _propertyOwners, _property, _layerCurveOwnerPool, _instanceId1, _layerPropertyOwners, _property1;
22917
23133
  var property = curve.property;
22918
23134
  var instanceId = targetEntity.instanceId;
22919
- var propertyOwners = animationCureOwners[instanceId] || (animationCureOwners[instanceId] = {});
22920
- curveOwners[i] = propertyOwners[property] || (propertyOwners[property] = curve._createCurveOwner(targetEntity));
23135
+ var needRevert = false;
23136
+ var baseAnimatorLayerData = this._animatorLayersData[0];
23137
+ var baseLayerCurveOwnerPool = baseAnimatorLayerData.curveOwnerPool;
23138
+ if (this.animatorController.layers[layerIndex].blendingMode === AnimatorLayerBlendingMode.Additive && layerIndex > 0 && !(baseLayerCurveOwnerPool[instanceId] && baseLayerCurveOwnerPool[instanceId][property])) {
23139
+ needRevert = true;
23140
+ }
23141
+ // Get owner
23142
+ var propertyOwners = (_curveOwnerPool = curveOwnerPool)[_instanceId = instanceId] || (_curveOwnerPool[_instanceId] = Object.create(null));
23143
+ var owner = (_propertyOwners = propertyOwners)[_property = property] || (_propertyOwners[_property] = curve._createCurveOwner(targetEntity));
23144
+ //@todo: There is performance waste here, which will be handled together with organizing AnimatorStateData later. The logic is changing from runtime to initialization.
23145
+ if (needRevert) {
23146
+ this._needRevertCurveOwners.push(owner);
23147
+ } else {
23148
+ var index = this._needRevertCurveOwners.indexOf(owner);
23149
+ index > -1 && this._needRevertCurveOwners.splice(index, 1);
23150
+ }
23151
+ // Get layer owner
23152
+ var layerPropertyOwners = (_layerCurveOwnerPool = layerCurveOwnerPool)[_instanceId1 = instanceId] || (_layerCurveOwnerPool[_instanceId1] = Object.create(null));
23153
+ var layerOwner = (_layerPropertyOwners = layerPropertyOwners)[_property1 = property] || (_layerPropertyOwners[_property1] = curve._createCurveLayerOwner(owner));
23154
+ curveLayerOwner[i] = layerOwner;
22921
23155
  } else {
22922
- curveOwners[i] = null;
23156
+ curveLayerOwner[i] = null;
22923
23157
  console.warn("The entity don't have the child entity which path is " + curve.relativePath + ".");
22924
23158
  }
22925
23159
  }
@@ -22947,65 +23181,60 @@ var AnimatorLayerBlendingMode;
22947
23181
  };
22948
23182
  _proto._clearCrossData = function _clearCrossData(animatorLayerData) {
22949
23183
  animatorLayerData.crossCurveMark++;
22950
- this._crossOwnerCollection.length = 0;
23184
+ animatorLayerData.crossLayerOwnerCollection.length = 0;
22951
23185
  };
22952
- _proto._addCrossCurveData = function _addCrossCurveData(crossCurveData, owner, curCurveIndex, nextCurveIndex) {
22953
- owner.crossSrcCurveIndex = curCurveIndex;
22954
- owner.crossDestCurveIndex = nextCurveIndex;
22955
- crossCurveData.push(owner);
23186
+ _proto._addCrossOwner = function _addCrossOwner(animatorLayerData, layerOwner, curCurveIndex, nextCurveIndex) {
23187
+ layerOwner.crossSrcCurveIndex = curCurveIndex;
23188
+ layerOwner.crossDestCurveIndex = nextCurveIndex;
23189
+ animatorLayerData.crossLayerOwnerCollection.push(layerOwner);
22956
23190
  };
22957
23191
  _proto._prepareCrossFading = function _prepareCrossFading(animatorLayerData) {
22958
- var crossCurveData = this._crossOwnerCollection;
22959
- var crossCurveMark = animatorLayerData.crossCurveMark;
22960
23192
  // Add src cross curve data.
22961
- this._prepareSrcCrossData(crossCurveData, animatorLayerData.srcPlayData, crossCurveMark, false);
23193
+ this._prepareSrcCrossData(animatorLayerData, false);
22962
23194
  // Add dest cross curve data.
22963
- this._prepareDestCrossData(crossCurveData, animatorLayerData.destPlayData, crossCurveMark, false);
23195
+ this._prepareDestCrossData(animatorLayerData, false);
22964
23196
  };
22965
23197
  _proto._prepareStandbyCrossFading = function _prepareStandbyCrossFading(animatorLayerData) {
22966
- var crossOwnerCollection = this._crossOwnerCollection;
22967
- var srcPlayData = animatorLayerData.srcPlayData, crossCurveMark = animatorLayerData.crossCurveMark;
22968
23198
  // Standby have two sub state, one is never play, one is finished, never play srcPlayData.state is null.
22969
- srcPlayData.state && this._prepareSrcCrossData(crossOwnerCollection, srcPlayData, crossCurveMark, true);
23199
+ animatorLayerData.srcPlayData.state && this._prepareSrcCrossData(animatorLayerData, true);
22970
23200
  // Add dest cross curve data.
22971
- this._prepareDestCrossData(crossOwnerCollection, animatorLayerData.destPlayData, crossCurveMark, true);
23201
+ this._prepareDestCrossData(animatorLayerData, true);
22972
23202
  };
22973
23203
  _proto._prepareFixedPoseCrossFading = function _prepareFixedPoseCrossFading(animatorLayerData) {
22974
- var crossOwnerCollection = this._crossOwnerCollection;
23204
+ var crossLayerOwnerCollection = animatorLayerData.crossLayerOwnerCollection;
22975
23205
  // Save current cross curve data owner fixed pose.
22976
- for(var i = crossOwnerCollection.length - 1; i >= 0; i--){
22977
- var item = crossOwnerCollection[i];
22978
- item.saveFixedPoseValue();
23206
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
23207
+ var layerOwner = crossLayerOwnerCollection[i];
23208
+ if (!layerOwner) continue;
23209
+ layerOwner.curveOwner.saveFixedPoseValue();
22979
23210
  // Reset destCurveIndex When fixed pose crossFading again.
22980
- item.crossDestCurveIndex = -1;
23211
+ layerOwner.crossDestCurveIndex = -1;
22981
23212
  }
22982
23213
  // prepare dest AnimatorState cross data.
22983
- this._prepareDestCrossData(crossOwnerCollection, animatorLayerData.destPlayData, animatorLayerData.crossCurveMark, true);
22984
- };
22985
- _proto._prepareSrcCrossData = function _prepareSrcCrossData(crossCurveData, srcPlayData, crossCurveMark, saveFixed) {
22986
- var curveOwners = srcPlayData.stateData.curveOwners;
22987
- for(var i = curveOwners.length - 1; i >= 0; i--){
22988
- var owner = curveOwners[i];
22989
- if (!owner) continue;
22990
- owner.crossCurveMark = crossCurveMark;
22991
- owner.crossCurveDataIndex = crossCurveData.length;
22992
- saveFixed && owner.saveFixedPoseValue();
22993
- this._addCrossCurveData(crossCurveData, owner, i, -1);
22994
- }
22995
- };
22996
- _proto._prepareDestCrossData = function _prepareDestCrossData(crossCurveData, destPlayData, crossCurveMark, saveFixed) {
22997
- var curveOwners = destPlayData.stateData.curveOwners;
22998
- for(var i = curveOwners.length - 1; i >= 0; i--){
22999
- var owner = curveOwners[i];
23000
- if (!owner) continue;
23001
- if (owner.crossCurveMark === crossCurveMark) {
23002
- crossCurveData[owner.crossCurveDataIndex].crossDestCurveIndex = i;
23214
+ this._prepareDestCrossData(animatorLayerData, true);
23215
+ };
23216
+ _proto._prepareSrcCrossData = function _prepareSrcCrossData(animatorLayerData, saveFixed) {
23217
+ var curveLayerOwner = animatorLayerData.srcPlayData.stateData.curveLayerOwner;
23218
+ for(var i = curveLayerOwner.length - 1; i >= 0; i--){
23219
+ var layerOwner = curveLayerOwner[i];
23220
+ if (!layerOwner) continue;
23221
+ layerOwner.crossCurveMark = animatorLayerData.crossCurveMark;
23222
+ saveFixed && layerOwner.curveOwner.saveFixedPoseValue();
23223
+ this._addCrossOwner(animatorLayerData, layerOwner, i, -1);
23224
+ }
23225
+ };
23226
+ _proto._prepareDestCrossData = function _prepareDestCrossData(animatorLayerData, saveFixed) {
23227
+ var curveLayerOwner = animatorLayerData.destPlayData.stateData.curveLayerOwner;
23228
+ for(var i = curveLayerOwner.length - 1; i >= 0; i--){
23229
+ var layerOwner = curveLayerOwner[i];
23230
+ if (!layerOwner) continue;
23231
+ if (layerOwner.crossCurveMark === animatorLayerData.crossCurveMark) {
23232
+ layerOwner.crossDestCurveIndex = i;
23003
23233
  } else {
23004
- owner.saveDefaultValue();
23234
+ var owner = layerOwner.curveOwner;
23005
23235
  saveFixed && owner.saveFixedPoseValue();
23006
- owner.crossCurveMark = crossCurveMark;
23007
- owner.crossCurveDataIndex = crossCurveData.length;
23008
- this._addCrossCurveData(crossCurveData, owner, -1, i);
23236
+ layerOwner.crossCurveMark = animatorLayerData.crossCurveMark;
23237
+ this._addCrossOwner(animatorLayerData, layerOwner, -1, i);
23009
23238
  }
23010
23239
  }
23011
23240
  };
@@ -23020,7 +23249,7 @@ var AnimatorLayerBlendingMode;
23020
23249
  var srcPlayData = layerData.srcPlayData, destPlayData = layerData.destPlayData, crossFadeTransitionInfo = layerData.crossFadeTransition;
23021
23250
  var additive = blendingMode === AnimatorLayerBlendingMode.Additive;
23022
23251
  firstLayer && (weight = 1.0);
23023
- //TODO: 任意情况都应该检查,后面要优化
23252
+ //@todo: All situations should be checked, optimizations will follow later.
23024
23253
  layerData.layerState !== LayerState.FixedCrossFading && this._checkTransition(srcPlayData, crossFadeTransitionInfo, layerIndex);
23025
23254
  switch(layerData.layerState){
23026
23255
  case LayerState.Playing:
@@ -23032,26 +23261,36 @@ var AnimatorLayerBlendingMode;
23032
23261
  case LayerState.CrossFading:
23033
23262
  this._updateCrossFade(srcPlayData, destPlayData, layerData, layerIndex, weight, deltaTime, additive, aniUpdate);
23034
23263
  break;
23264
+ case LayerState.Finished:
23265
+ this._updateFinishedState(srcPlayData, weight, additive, aniUpdate);
23266
+ break;
23035
23267
  }
23036
23268
  };
23037
23269
  _proto._updatePlayingState = function _updatePlayingState(playData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
23038
- var _playData_stateData = playData.stateData, curveOwners = _playData_stateData.curveOwners, eventHandlers = _playData_stateData.eventHandlers;
23270
+ var _playData_stateData = playData.stateData, curveLayerOwner = _playData_stateData.curveLayerOwner, eventHandlers = _playData_stateData.eventHandlers;
23039
23271
  var state = playData.state, lastPlayState = playData.playState, lastClipTime = playData.clipTime;
23040
23272
  var _state_clip = state.clip, curveBindings = _state_clip._curveBindings;
23041
23273
  playData.update(this.speed < 0);
23042
- if (!aniUpdate) {
23043
- return;
23044
- }
23045
23274
  var clipTime = playData.clipTime, playState = playData.playState;
23046
- eventHandlers.length && this._fireAnimationEvents(playData, eventHandlers, lastClipTime, clipTime);
23047
- for(var i = curveBindings.length - 1; i >= 0; i--){
23048
- var owner = curveOwners[i];
23049
- owner == null ? void 0 : owner.evaluateAndApplyValue(curveBindings[i].curve, clipTime, weight, additive);
23275
+ var finished = playState === AnimatorStatePlayState.Finished;
23276
+ if (aniUpdate || finished) {
23277
+ for(var i = curveBindings.length - 1; i >= 0; i--){
23278
+ var layerOwner = curveLayerOwner[i];
23279
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23280
+ if (!owner) continue;
23281
+ var curve = curveBindings[i].curve;
23282
+ if (curve.keys.length) {
23283
+ var value = owner.evaluateValue(curve, clipTime, additive);
23284
+ aniUpdate && owner.applyValue(value, weight, additive);
23285
+ finished && layerOwner.saveFinalValue();
23286
+ }
23287
+ }
23050
23288
  }
23051
23289
  playData.frameTime += state.speed * delta;
23052
23290
  if (playState === AnimatorStatePlayState.Finished) {
23053
- layerData.layerState = LayerState.Standby;
23291
+ layerData.layerState = LayerState.Finished;
23054
23292
  }
23293
+ eventHandlers.length && this._fireAnimationEvents(playData, eventHandlers, lastClipTime, clipTime);
23055
23294
  if (lastPlayState === AnimatorStatePlayState.UnStarted) {
23056
23295
  this._callAnimatorScriptOnEnter(state, layerIndex);
23057
23296
  }
@@ -23062,7 +23301,7 @@ var AnimatorLayerBlendingMode;
23062
23301
  }
23063
23302
  };
23064
23303
  _proto._updateCrossFade = function _updateCrossFade(srcPlayData, destPlayData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
23065
- var _this = this, crossCurveDataCollection = _this._crossOwnerCollection;
23304
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
23066
23305
  var _srcPlayData_state_clip = srcPlayData.state.clip, srcCurves = _srcPlayData_state_clip._curveBindings;
23067
23306
  var srcState = srcPlayData.state, srcStateData = srcPlayData.stateData, lastSrcPlayState = srcPlayData.playState;
23068
23307
  var srcEventHandlers = srcStateData.eventHandlers;
@@ -23071,18 +23310,27 @@ var AnimatorLayerBlendingMode;
23071
23310
  var _destState_clip = destState.clip, destCurves = _destState_clip._curveBindings;
23072
23311
  var lastSrcClipTime = srcPlayData.clipTime;
23073
23312
  var lastDestClipTime = destPlayData.clipTime;
23074
- var crossWeight = Math.abs(destPlayData.frameTime) / (destState._getDuration() * layerData.crossFadeTransition.duration);
23075
- crossWeight >= 1.0 && (crossWeight = 1.0);
23313
+ var duration = destState._getDuration() * layerData.crossFadeTransition.duration;
23314
+ var crossWeight = Math.abs(destPlayData.frameTime) / duration;
23315
+ (crossWeight >= 1.0 || duration === 0) && (crossWeight = 1.0);
23076
23316
  srcPlayData.update(this.speed < 0);
23077
23317
  destPlayData.update(this.speed < 0);
23078
- var srcPlayState = srcPlayData.playState;
23079
- var destPlayState = destPlayData.playState;
23080
- this._updateCrossFadeData(layerData, crossWeight, delta, false);
23081
- if (!aniUpdate) {
23082
- return;
23318
+ var srcClipTime = srcPlayData.clipTime, srcPlayState = srcPlayData.playState;
23319
+ var destClipTime = destPlayData.clipTime, destPlayState = destPlayData.playState;
23320
+ var finished = destPlayData.playState === AnimatorStatePlayState.Finished;
23321
+ if (aniUpdate || finished) {
23322
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
23323
+ var layerOwner = crossLayerOwnerCollection[i];
23324
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23325
+ if (!owner) continue;
23326
+ var srcCurveIndex = layerOwner.crossSrcCurveIndex;
23327
+ var destCurveIndex = layerOwner.crossDestCurveIndex;
23328
+ var value = owner.evaluateCrossFadeValue(srcCurveIndex >= 0 ? srcCurves[srcCurveIndex].curve : null, destCurveIndex >= 0 ? destCurves[destCurveIndex].curve : null, srcClipTime, destClipTime, crossWeight, additive);
23329
+ aniUpdate && owner.applyValue(value, weight, additive);
23330
+ finished && layerOwner.saveFinalValue();
23331
+ }
23083
23332
  }
23084
- var srcClipTime = srcPlayData.clipTime;
23085
- var destClipTime = destPlayData.clipTime;
23333
+ this._updateCrossFadeData(layerData, crossWeight, delta, false);
23086
23334
  srcEventHandlers.length && this._fireAnimationEvents(srcPlayData, srcEventHandlers, lastSrcClipTime, srcClipTime);
23087
23335
  destEventHandlers.length && this._fireAnimationEvents(destPlayData, destEventHandlers, lastDestClipTime, destClipTime);
23088
23336
  if (lastSrcPlayState === AnimatorStatePlayState.UnStarted) {
@@ -23101,28 +23349,34 @@ var AnimatorLayerBlendingMode;
23101
23349
  } else {
23102
23350
  this._callAnimatorScriptOnUpdate(destState, layerIndex);
23103
23351
  }
23104
- for(var i = crossCurveDataCollection.length - 1; i >= 0; i--){
23105
- var crossCurveData = crossCurveDataCollection[i];
23106
- var crossSrcCurveIndex = crossCurveData.crossSrcCurveIndex, crossDestCurveIndex = crossCurveData.crossDestCurveIndex;
23107
- crossCurveData.crossFadeAndApplyValue(crossSrcCurveIndex >= 0 ? srcCurves[crossSrcCurveIndex].curve : null, crossDestCurveIndex >= 0 ? destCurves[crossDestCurveIndex].curve : null, srcClipTime, destClipTime, crossWeight, weight, additive);
23108
- }
23109
23352
  };
23110
- _proto._updateCrossFadeFromPose = function _updateCrossFadeFromPose(destPlayData, layerData, layerIndex, layerWeight, delta, additive, aniUpdate) {
23111
- var crossCurveDataCollection = this._crossOwnerCollection;
23353
+ _proto._updateCrossFadeFromPose = function _updateCrossFadeFromPose(destPlayData, layerData, layerIndex, weight, delta, additive, aniUpdate) {
23354
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
23112
23355
  var state = destPlayData.state, stateData = destPlayData.stateData, lastPlayState = destPlayData.playState;
23113
23356
  var eventHandlers = stateData.eventHandlers;
23114
23357
  var _state_clip = state.clip, curveBindings = _state_clip._curveBindings;
23115
23358
  var lastDestClipTime = destPlayData.clipTime;
23116
- var crossWeight = Math.abs(destPlayData.frameTime) / (state._getDuration() * layerData.crossFadeTransition.duration);
23117
- crossWeight >= 1.0 && (crossWeight = 1.0);
23359
+ var duration = state._getDuration() * layerData.crossFadeTransition.duration;
23360
+ var crossWeight = Math.abs(destPlayData.frameTime) / duration;
23361
+ (crossWeight >= 1.0 || duration === 0) && (crossWeight = 1.0);
23118
23362
  destPlayData.update(this.speed < 0);
23119
23363
  var playState = destPlayData.playState;
23120
23364
  this._updateCrossFadeData(layerData, crossWeight, delta, true);
23121
- if (!aniUpdate) {
23122
- return;
23123
- }
23124
23365
  var destClipTime = destPlayData.clipTime;
23125
- //TODO: srcState 少了最新一段时间的判断
23366
+ var finished = playState === AnimatorStatePlayState.Finished;
23367
+ // 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.
23368
+ if (aniUpdate || finished) {
23369
+ for(var i = crossLayerOwnerCollection.length - 1; i >= 0; i--){
23370
+ var layerOwner = crossLayerOwnerCollection[i];
23371
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23372
+ if (!owner) continue;
23373
+ var curveIndex = layerOwner.crossDestCurveIndex;
23374
+ var value = layerOwner.curveOwner.crossFadeFromPoseAndApplyValue(curveIndex >= 0 ? curveBindings[curveIndex].curve : null, destClipTime, crossWeight, additive);
23375
+ aniUpdate && owner.applyValue(value, weight, additive);
23376
+ finished && layerOwner.saveFinalValue();
23377
+ }
23378
+ }
23379
+ //@todo: srcState is missing the judgment of the most recent period."
23126
23380
  eventHandlers.length && this._fireAnimationEvents(destPlayData, eventHandlers, lastDestClipTime, destClipTime);
23127
23381
  if (lastPlayState === AnimatorStatePlayState.UnStarted) {
23128
23382
  this._callAnimatorScriptOnEnter(state, layerIndex);
@@ -23132,10 +23386,18 @@ var AnimatorLayerBlendingMode;
23132
23386
  } else {
23133
23387
  this._callAnimatorScriptOnUpdate(state, layerIndex);
23134
23388
  }
23135
- for(var i = crossCurveDataCollection.length - 1; i >= 0; i--){
23136
- var crossCurveData = crossCurveDataCollection[i];
23137
- var crossDestCurveIndex = crossCurveData.crossDestCurveIndex;
23138
- crossCurveData.crossFadeFromPoseAndApplyValue(crossDestCurveIndex >= 0 ? curveBindings[crossDestCurveIndex].curve : null, destClipTime, crossWeight, layerWeight, additive);
23389
+ };
23390
+ _proto._updateFinishedState = function _updateFinishedState(playData, weight, additive, aniUpdate) {
23391
+ if (!aniUpdate) {
23392
+ return;
23393
+ }
23394
+ var curveLayerOwner = playData.stateData.curveLayerOwner;
23395
+ var _playData_state_clip = playData.state.clip, curveBindings = _playData_state_clip._curveBindings;
23396
+ for(var i = curveBindings.length - 1; i >= 0; i--){
23397
+ var layerOwner = curveLayerOwner[i];
23398
+ var owner = layerOwner == null ? void 0 : layerOwner.curveOwner;
23399
+ if (!owner) continue;
23400
+ owner.applyValue(layerOwner.finalValue, weight, additive);
23139
23401
  }
23140
23402
  };
23141
23403
  _proto._updateCrossFadeData = function _updateCrossFadeData(layerData, crossWeight, delta, fixed) {
@@ -23143,7 +23405,7 @@ var AnimatorLayerBlendingMode;
23143
23405
  destPlayData.frameTime += destPlayData.state.speed * delta;
23144
23406
  if (crossWeight === 1.0) {
23145
23407
  if (destPlayData.playState === AnimatorStatePlayState.Finished) {
23146
- layerData.layerState = LayerState.Standby;
23408
+ layerData.layerState = LayerState.Finished;
23147
23409
  } else {
23148
23410
  layerData.layerState = LayerState.Playing;
23149
23411
  }
@@ -23153,25 +23415,24 @@ var AnimatorLayerBlendingMode;
23153
23415
  fixed || (layerData.srcPlayData.frameTime += layerData.srcPlayData.state.speed * delta);
23154
23416
  }
23155
23417
  };
23156
- _proto._preparePlay = function _preparePlay(layerData, playState, playStateData) {
23418
+ _proto._preparePlay = function _preparePlay(layerData, playState) {
23157
23419
  if (layerData.layerState === LayerState.Playing) {
23158
23420
  var srcPlayData = layerData.srcPlayData;
23159
23421
  if (srcPlayData.state !== playState) {
23160
- var curveOwners = srcPlayData.stateData.curveOwners;
23161
- for(var i = curveOwners.length - 1; i >= 0; i--){
23162
- var owner = curveOwners[i];
23163
- (owner == null ? void 0 : owner.hasSavedDefaultValue) && owner.revertDefaultValue();
23422
+ var curveLayerOwner = srcPlayData.stateData.curveLayerOwner;
23423
+ for(var i = curveLayerOwner.length - 1; i >= 0; i--){
23424
+ var _curveLayerOwner_i;
23425
+ var owner = (_curveLayerOwner_i = curveLayerOwner[i]) == null ? void 0 : _curveLayerOwner_i.curveOwner;
23426
+ owner.revertDefaultValue();
23164
23427
  }
23165
- this._saveDefaultValues(playStateData);
23166
23428
  }
23167
23429
  } else {
23168
- // layerState is CrossFading, FixedCrossFading, Standby
23169
- var crossCurveDataCollection = this._crossOwnerCollection;
23170
- for(var i1 = crossCurveDataCollection.length - 1; i1 >= 0; i1--){
23171
- var owner1 = crossCurveDataCollection[i1];
23172
- owner1.hasSavedDefaultValue && owner1.revertDefaultValue();
23430
+ // layerState is CrossFading, FixedCrossFading, Standby, Finished
23431
+ var crossLayerOwnerCollection = layerData.crossLayerOwnerCollection;
23432
+ for(var i1 = crossLayerOwnerCollection.length - 1; i1 >= 0; i1--){
23433
+ var owner1 = crossLayerOwnerCollection[i1].curveOwner;
23434
+ owner1.revertDefaultValue();
23173
23435
  }
23174
- this._saveDefaultValues(playStateData);
23175
23436
  }
23176
23437
  };
23177
23438
  _proto._checkTransition = function _checkTransition(stateData, crossFadeTransition, layerIndex) {
@@ -23188,7 +23449,7 @@ var AnimatorLayerBlendingMode;
23188
23449
  _proto._crossFadeByTransition = function _crossFadeByTransition(transition, layerIndex) {
23189
23450
  var name = transition.destinationState.name;
23190
23451
  var stateInfo = this._getAnimatorStateInfo(name, layerIndex);
23191
- var crossState = stateInfo.state;
23452
+ var crossState = stateInfo.state, playLayerIndex = stateInfo.layerIndex;
23192
23453
  if (!crossState) {
23193
23454
  return;
23194
23455
  }
@@ -23196,21 +23457,21 @@ var AnimatorLayerBlendingMode;
23196
23457
  console.warn("The state named " + name + " has no AnimationClip data.");
23197
23458
  return;
23198
23459
  }
23199
- var animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
23460
+ var animatorLayerData = this._getAnimatorLayerData(playLayerIndex);
23200
23461
  var layerState = animatorLayerData.layerState;
23201
23462
  var destPlayData = animatorLayerData.destPlayData;
23202
- var animatorStateData = this._getAnimatorStateData(name, crossState, animatorLayerData);
23463
+ var animatorStateData = this._getAnimatorStateData(name, crossState, animatorLayerData, playLayerIndex);
23203
23464
  var duration = crossState._getDuration();
23204
23465
  var offset = duration * transition.offset;
23205
23466
  destPlayData.reset(crossState, animatorStateData, offset);
23206
23467
  switch(layerState){
23207
- // Maybe not play, maybe end.
23208
23468
  case LayerState.Standby:
23209
23469
  animatorLayerData.layerState = LayerState.FixedCrossFading;
23210
23470
  this._clearCrossData(animatorLayerData);
23211
23471
  this._prepareStandbyCrossFading(animatorLayerData);
23212
23472
  break;
23213
23473
  case LayerState.Playing:
23474
+ case LayerState.Finished:
23214
23475
  animatorLayerData.layerState = LayerState.CrossFading;
23215
23476
  this._clearCrossData(animatorLayerData);
23216
23477
  this._prepareCrossFading(animatorLayerData);
@@ -23307,6 +23568,12 @@ var AnimatorLayerBlendingMode;
23307
23568
  }
23308
23569
  }
23309
23570
  };
23571
+ _proto._revertCurveOwners = function _revertCurveOwners() {
23572
+ var curveOwners = this._needRevertCurveOwners;
23573
+ for(var i = 0, n = curveOwners.length; i < n; ++i){
23574
+ curveOwners[i].revertDefaultValue();
23575
+ }
23576
+ };
23310
23577
  _create_class(Animator, [
23311
23578
  {
23312
23579
  key: "animatorController",
@@ -23338,10 +23605,10 @@ __decorate([
23338
23605
  ], Animator.prototype, "_animatorLayersData", void 0);
23339
23606
  __decorate([
23340
23607
  ignoreClone
23341
- ], Animator.prototype, "_crossOwnerCollection", void 0);
23608
+ ], Animator.prototype, "_curveOwnerPool", void 0);
23342
23609
  __decorate([
23343
23610
  ignoreClone
23344
- ], Animator.prototype, "_animationCurveOwners", void 0);
23611
+ ], Animator.prototype, "_needRevertCurveOwners", void 0);
23345
23612
  __decorate([
23346
23613
  ignoreClone
23347
23614
  ], Animator.prototype, "_animationEventHandlerPool", void 0);