Files
UnrealEngineUWP/Engine/Source/Runtime/AnimGraphRuntime/Private/AnimSequencerInstance.cpp
Mike Zyracki f7bfe3dc0f Fix to get back to the previous pose that a SkeletalMesh has before getting evaluated.
Added a PoseNode to the AnimInstanceProxy that we save a pose to right when we initialize the seuqencer proxy and then in RestoreState in the template we then link that anim pose to use that stored pose and then  force an evaluation.

#jira UE-70665

#rb max.chen, lina.halper

[CL 5767595 by Mike Zyracki in Dev-Sequencer branch]
2019-04-05 15:18:36 -04:00

52 lines
1.6 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
/*=============================================================================
UAnimSequencerInstance.cpp: Single Node Tree Instance
Only plays one animation at a time.
=============================================================================*/
#include "AnimSequencerInstance.h"
#include "AnimSequencerInstanceProxy.h"
/////////////////////////////////////////////////////
// UAnimSequencerInstance
/////////////////////////////////////////////////////
const FName UAnimSequencerInstance::SequencerPoseName(TEXT("Sequencer_Pose_Name"));
UAnimSequencerInstance::UAnimSequencerInstance(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
bUseMultiThreadedAnimationUpdate = false;
}
FAnimInstanceProxy* UAnimSequencerInstance::CreateAnimInstanceProxy()
{
return new FAnimSequencerInstanceProxy(this);
}
void UAnimSequencerInstance::UpdateAnimTrack(UAnimSequenceBase* InAnimSequence, int32 SequenceId, float InPosition, float Weight, bool bFireNotifies)
{
GetProxyOnGameThread<FAnimSequencerInstanceProxy>().UpdateAnimTrack(InAnimSequence, SequenceId, InPosition, Weight, bFireNotifies);
}
void UAnimSequencerInstance::ResetNodes()
{
GetProxyOnGameThread<FAnimSequencerInstanceProxy>().ResetNodes();
}
void UAnimSequencerInstance::ResetPose()
{
GetProxyOnGameThread<FAnimSequencerInstanceProxy>().ResetPose();
}
void UAnimSequencerInstance::NativeInitializeAnimation()
{
SavePose();
}
void UAnimSequencerInstance::SavePose()
{
SavePoseSnapshot(UAnimSequencerInstance::SequencerPoseName);
}