Files
UnrealEngine/Engine/Source/Runtime/LiveLinkInterface/Public/Roles/LiveLinkAnimationBlueprintStructs.h
2025-05-18 13:04:45 +08:00

161 lines
4.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Containers/Array.h"
#include "Containers/Map.h"
#include "CoreMinimal.h"
#include "HAL/Platform.h"
#include "ILiveLinkSource.h"
#include "LiveLinkTypes.h"
#include "Math/Transform.h"
#include "Misc/FrameRate.h"
#include "Misc/Timecode.h"
#include "Roles/LiveLinkAnimationTypes.h"
#include "Templates/SharedPointer.h"
#include "UObject/NameTypes.h"
#include "UObject/ObjectMacros.h"
#include "LiveLinkAnimationBlueprintStructs.generated.h"
class FString;
USTRUCT(BlueprintType)
struct FSubjectMetadata
{
GENERATED_USTRUCT_BODY()
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LiveLink")
TMap<FName, FString> StringMetadata;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LiveLink")
FTimecode SceneTimecode;
UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "LiveLink")
FFrameRate SceneFramerate;
};
USTRUCT()
struct FCachedSubjectFrame
{
GENERATED_USTRUCT_BODY()
FCachedSubjectFrame();
FCachedSubjectFrame(const FLiveLinkSkeletonStaticData* InStaticData, const FLiveLinkAnimationFrameData* InAnimData);
virtual ~FCachedSubjectFrame() = default;
void SetCurvesFromCache(TMap<FName, float>& OutCurves) const;
bool GetCurveValueByName(FName InCurveName, float& OutCurveValue) const;
void GetSubjectMetadata(FSubjectMetadata& OutSubjectMetadata) const;
int32 GetNumberOfTransforms() const;
void GetTransformNames(TArray<FName>& OutTransformNames) const;
void GetTransformName(const int32 InTransformIndex, FName& OutName) const;
int32 GetTransformIndexFromName(FName InTransformName) const;
int32 GetParentTransformIndex(const int32 InTransformIndex) const;
void GetChildTransformIndices(const int32 InTransformIndex, TArray<int32>& OutChildIndices) const;
void GetTransformParentSpace(const int32 InTransformIndex, FTransform& OutTransform) const;
void GetTransformRootSpace(const int32 InTransformIndex, FTransform& OutTransform) const;
int32 GetRootIndex() const;
const FLiveLinkSkeletonStaticData& GetSourceSkeletonData() const { return SourceSkeletonData; }
const FLiveLinkAnimationFrameData& GetSourceAnimationFrameData() const { return SourceAnimationFrameData; }
private:
FLiveLinkSkeletonStaticData SourceSkeletonData;
FLiveLinkAnimationFrameData SourceAnimationFrameData;
// Cache. Does not affect the underlying frame data
mutable TArray<TPair<bool, FTransform>> CachedRootSpaceTransforms;
mutable TArray<TPair<bool, TArray<int32>>> CachedChildTransformIndices;
mutable TMap<FName, float> CachedCurves;
mutable bool bHaveCachedCurves;
void CacheCurves() const;
bool IsValidTransformIndex(int32 InTransformIndex) const;
};
USTRUCT(BlueprintType)
struct FLiveLinkTransform
{
GENERATED_USTRUCT_BODY()
LIVELINKINTERFACE_API FLiveLinkTransform();
virtual ~FLiveLinkTransform() = default;
LIVELINKINTERFACE_API void GetName(FName& Name) const;
LIVELINKINTERFACE_API void GetTransformParentSpace(FTransform& OutTransform) const;
LIVELINKINTERFACE_API void GetTransformRootSpace(FTransform& OutTransform) const;
LIVELINKINTERFACE_API bool HasParent() const;
LIVELINKINTERFACE_API void GetParent(FLiveLinkTransform& OutParentTransform) const;
LIVELINKINTERFACE_API int32 GetChildCount() const;
LIVELINKINTERFACE_API void GetChildren(TArray<FLiveLinkTransform>& OutChildTransforms) const;
LIVELINKINTERFACE_API void SetCachedFrame(TSharedPtr<FCachedSubjectFrame> InCachedFrame);
LIVELINKINTERFACE_API void SetTransformIndex(const int32 InTransformIndex);
LIVELINKINTERFACE_API int32 GetTransformIndex() const;
private:
TSharedPtr<FCachedSubjectFrame> CachedFrame;
int32 TransformIndex;
};
USTRUCT(BlueprintType)
struct FSubjectFrameHandle : public FLiveLinkBaseBlueprintData
{
GENERATED_USTRUCT_BODY()
FSubjectFrameHandle() = default;
virtual ~FSubjectFrameHandle() = default;
LIVELINKINTERFACE_API void GetCurves(TMap<FName, float>& OutCurves) const;
LIVELINKINTERFACE_API bool GetCurveValueByName(FName CurveName, float& CurveValue) const;
LIVELINKINTERFACE_API void GetSubjectMetadata(FSubjectMetadata& OutMetadata) const;
LIVELINKINTERFACE_API int32 GetNumberOfTransforms() const;
LIVELINKINTERFACE_API void GetTransformNames(TArray<FName>& OutTransformNames) const;
LIVELINKINTERFACE_API void GetRootTransform(FLiveLinkTransform& OutLiveLinkTransform) const;
LIVELINKINTERFACE_API void GetTransformByIndex(int32 InTransformIndex, FLiveLinkTransform& OutLiveLinkTransform) const;
LIVELINKINTERFACE_API void GetTransformByName(FName InTransformName, FLiveLinkTransform& OutLiveLinkTransform) const;
LIVELINKINTERFACE_API void SetCachedFrame(TSharedPtr<FCachedSubjectFrame> InCachedFrame);
LIVELINKINTERFACE_API const FLiveLinkSkeletonStaticData* GetSourceSkeletonStaticData() const;
LIVELINKINTERFACE_API const FLiveLinkAnimationFrameData* GetSourceAnimationFrameData() const;
private:
TSharedPtr<FCachedSubjectFrame> CachedFrame;
};