Files
UnrealEngineUWP/Engine/Source/Runtime/AnimGraphRuntime/Private/AnimSequencerInstance.cpp
mike zyracki 6c525fe7cd Add bWasCreated flag to BindToSkeletalMesh so when we know when we create the sequencer anim instance we should save the pose. This removes the need for control rig to override NativeInitialization. Also add some checks to make sure we save a valid pose.
#jira UE-76569

#rb max.chen

#ROBOMERGE-SOURCE: CL 7280102 in //UE4/Release-4.23/...
#ROBOMERGE-BOT: RELEASE (Release-4.23 -> Main) (v369-7254125)

[CL 7280144 by mike zyracki in Main branch]
2019-07-11 15:56:39 -04:00

53 lines
1.7 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::SavePose()
{
if (USkeletalMeshComponent* SkeletalMeshComponent = GetSkelMeshComponent())
{
if (SkeletalMeshComponent->SkeletalMesh && SkeletalMeshComponent->GetComponentSpaceTransforms().Num() > 0)
{
SavePoseSnapshot(UAnimSequencerInstance::SequencerPoseName);
}
}
}