Skip to content

Commit

Permalink
Merge pull request galacean#31 from GuoLei1990/cr-fix-animatorReset1
Browse files Browse the repository at this point in the history
Fix `_revertDefaultValue` bug
  • Loading branch information
luzhuang committed Nov 23, 2022
2 parents 8873ebe + 76aa0ad commit 5cc0e9e
Showing 1 changed file with 25 additions and 21 deletions.
46 changes: 25 additions & 21 deletions packages/core/src/animation/Animator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,18 +93,15 @@ export class Animator extends Component {
console.warn(`The state named ${stateName} has no AnimationClip data.`);
return;
}

const animatorLayerData = this._getAnimatorLayerData(stateInfo.layerIndex);
const { srcPlayData, destPlayData } = animatorLayerData;
const { state: curState } = srcPlayData;
if (curState && curState !== state) {
this._revertDefaultValue(srcPlayData, destPlayData);
}
this._revertDefaultValue(animatorLayerData, state);

//TODO CM: Not consider same stateName, but different animation
const animatorStateData = this._getAnimatorStateData(stateName, state, animatorLayerData);

animatorLayerData.layerState = LayerState.Playing;
srcPlayData.reset(state, animatorStateData, state._getDuration() * normalizedTimeOffset);
animatorLayerData.srcPlayData.reset(state, animatorStateData, state._getDuration() * normalizedTimeOffset);

this._saveDefaultValues(animatorStateData);
}
Expand Down Expand Up @@ -244,8 +241,7 @@ export class Animator extends Component {
private _saveDefaultValues(stateData: AnimatorStateData): void {
const { curveOwners } = stateData;
for (let i = curveOwners.length - 1; i >= 0; i--) {
const owner = curveOwners[i];
owner && owner.saveDefaultValue();
curveOwners[i]?.saveDefaultValue();
}
}

Expand All @@ -254,11 +250,11 @@ export class Animator extends Component {
animatorState: AnimatorState,
animatorLayerData: AnimatorLayerData
): AnimatorStateData {
const { animatorStateDataMap: animatorStateDataCollection } = animatorLayerData;
let animatorStateData = animatorStateDataCollection[stateName];
const { animatorStateDataMap } = animatorLayerData;
let animatorStateData = animatorStateDataMap[stateName];
if (!animatorStateData) {
animatorStateData = new AnimatorStateData();
animatorStateDataCollection[stateName] = animatorStateData;
animatorStateDataMap[stateName] = animatorStateData;
this._saveAnimatorStateData(animatorState, animatorStateData);
this._saveAnimatorEventHandlers(animatorState, animatorStateData);
}
Expand Down Expand Up @@ -614,16 +610,24 @@ export class Animator extends Component {
}
}

private _revertDefaultValue(srcPlayData: AnimatorStatePlayData, destPlayData: AnimatorStatePlayData) {
const srcCurveOwner = srcPlayData.stateData?.curveOwners || [];
const destCurveOwner = destPlayData.stateData?.curveOwners || [];
for (let i = srcCurveOwner.length - 1; i >= 0; i--) {
const owner = srcCurveOwner[i];
owner?.hasSavedDefaultValue && owner.revertDefaultValue();
}
for (let i = destCurveOwner.length - 1; i >= 0; i--) {
const owner = destCurveOwner[i];
owner?.hasSavedDefaultValue && owner.revertDefaultValue();
private _revertDefaultValue(animatorLayerData: AnimatorLayerData, newPlayState: AnimatorState): void {
if (animatorLayerData.layerState === LayerState.Playing) {
const srcPlayData = animatorLayerData.srcPlayData;
const state = srcPlayData.state;
if (state !== newPlayState) {
const { curveOwners } = srcPlayData.stateData;
for (let i = curveOwners.length - 1; i >= 0; i--) {
const owner = curveOwners[i];
owner?.hasSavedDefaultValue && owner.revertDefaultValue();
}
}
} else {
// layerState is CrossFading, FixedCrossFading, Standby
const crossCurveDataCollection = this._crossOwnerCollection;
for (let i = crossCurveDataCollection.length - 1; i >= 0; i--) {
const owner = crossCurveDataCollection[i];
owner.hasSavedDefaultValue && owner.revertDefaultValue();
}
}
}

Expand Down

0 comments on commit 5cc0e9e

Please sign in to comment.