// Copyright Epic Games, Inc. All Rights Reserved. #include "Roles/LiveLinkAnimationRole.h" #include "Roles/LiveLinkAnimationBlueprintStructs.h" #include "Roles/LiveLinkAnimationTypes.h" #include "Roles/LiveLinkTransformRole.h" #include "Roles/LiveLinkTransformTypes.h" #include "LiveLinkPrivate.h" #include "LiveLinkRoleTrait.h" #include "LiveLinkTypes.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(LiveLinkAnimationRole) #define LOCTEXT_NAMESPACE "LiveLinkRole" /** * ULiveLinkAnimationRole */ UScriptStruct* ULiveLinkAnimationRole::GetStaticDataStruct() const { return FLiveLinkSkeletonStaticData::StaticStruct(); } UScriptStruct* ULiveLinkAnimationRole::GetFrameDataStruct() const { return FLiveLinkAnimationFrameData::StaticStruct(); } UScriptStruct* ULiveLinkAnimationRole::GetBlueprintDataStruct() const { return FSubjectFrameHandle::StaticStruct(); } bool ULiveLinkAnimationRole::InitializeBlueprintData(const FLiveLinkSubjectFrameData& InSourceData, FLiveLinkBlueprintDataStruct& OutBlueprintData) const { bool bSuccess = false; FSubjectFrameHandle* AnimationFrameHandle = OutBlueprintData.Cast(); const FLiveLinkSkeletonStaticData* StaticData = InSourceData.StaticData.Cast(); const FLiveLinkAnimationFrameData* FrameData = InSourceData.FrameData.Cast(); if (AnimationFrameHandle && StaticData && FrameData) { AnimationFrameHandle->SetCachedFrame(MakeShared(StaticData, FrameData)); bSuccess = true; } return bSuccess; } FText ULiveLinkAnimationRole::GetDisplayName() const { return LOCTEXT("AnimationRole", "Animation"); } bool ULiveLinkAnimationRole::IsStaticDataValid(const FLiveLinkStaticDataStruct& InStaticData, bool& bOutShouldLogWarning) const { bool bResult = Super::IsStaticDataValid(InStaticData, bOutShouldLogWarning); if (bResult) { const FLiveLinkSkeletonStaticData* StaticData = InStaticData.Cast(); bResult = StaticData && StaticData->BoneParents.Num() == StaticData->BoneNames.Num(); } return bResult; } bool ULiveLinkAnimationRole::IsFrameDataValid(const FLiveLinkStaticDataStruct& InStaticData, const FLiveLinkFrameDataStruct& InFrameData, bool& bOutShouldLogWarning) const { bool bResult = Super::IsFrameDataValid(InStaticData, InFrameData, bOutShouldLogWarning); if (bResult) { const FLiveLinkSkeletonStaticData* StaticData = InStaticData.Cast(); const FLiveLinkAnimationFrameData* FrameData = InFrameData.Cast(); bResult = StaticData && FrameData && StaticData->BoneNames.Num() == FrameData->Transforms.Num(); } return bResult; } #undef LOCTEXT_NAMESPACE