Files
UnrealEngine/Engine/Plugins/Animation/LiveLink/Source/LiveLinkMovieScene/Private/MovieScene/MovieSceneLiveLinkSubSectionBasicRole.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

94 lines
3.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "MovieScene/MovieSceneLiveLinkSubSectionBasicRole.h"
#include "Channels/MovieSceneFloatChannel.h"
#include "MovieScene/IMovieSceneLiveLinkPropertyHandler.h"
#include "MovieScene/MovieSceneLiveLinkStructProperties.h"
#include "MovieScene/MovieSceneLiveLinkSubSection.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(MovieSceneLiveLinkSubSectionBasicRole)
#define LOCTEXT_NAMESPACE "MovieSceneLiveLinkSubSectionBasicRole"
UMovieSceneLiveLinkSubSectionBasicRole::UMovieSceneLiveLinkSubSectionBasicRole(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
void UMovieSceneLiveLinkSubSectionBasicRole::Initialize(TSubclassOf<ULiveLinkRole> InSubjectRole, const TSharedPtr<FLiveLinkStaticDataStruct>& InStaticData)
{
Super::Initialize(InSubjectRole, InStaticData);
CreatePropertiesChannel();
}
int32 UMovieSceneLiveLinkSubSectionBasicRole::CreateChannelProxy(int32 InChannelIndex, TArray<bool>& OutChannelMask, FMovieSceneChannelProxyData& OutChannelData)
{
int32 StartIndex = InChannelIndex;
InChannelIndex = 0;
FLiveLinkBaseStaticData* BasicData = StaticData->Cast<FLiveLinkBaseStaticData>();
check(BasicData);
for (int32 i = 0; i < BasicData->PropertyNames.Num(); ++i)
{
const FName PropertyName = BasicData->PropertyNames[i];
const FText DisplayName = FText::Format(LOCTEXT("LinkLinkFormat", "{0}"), FText::FromName(PropertyName));
#if WITH_EDITOR
MovieSceneLiveLinkSectionUtils::CreateChannelEditor(DisplayName, SubSectionData.Properties[0].FloatChannel[InChannelIndex], StartIndex + InChannelIndex, TMovieSceneExternalValue<float>(), OutChannelMask, OutChannelData);
#else
OutChannelData.Add(SubSectionData.Properties[0].FloatChannel[InChannelIndex]);
#endif //#WITH_EDITOR
++InChannelIndex;
}
return InChannelIndex;
}
void UMovieSceneLiveLinkSubSectionBasicRole::CreatePropertiesChannel()
{
FLiveLinkBaseStaticData* BasicData = StaticData->Cast<FLiveLinkBaseStaticData>();
check(BasicData);
const int32 PropertyCount = BasicData->PropertyNames.Num();
if (PropertyCount <= 0)
{
return;
}
const FName PropertyName = GET_MEMBER_NAME_CHECKED(FLiveLinkBaseFrameData, PropertyValues);
SubSectionData.Properties.SetNum(1);
SubSectionData.Properties[0].PropertyName = PropertyName;
PropertyHandler = LiveLinkPropertiesUtils::CreatePropertyHandler(*FLiveLinkBaseFrameData::StaticStruct(), &SubSectionData.Properties[0]);
PropertyHandler->CreateChannels(*FLiveLinkBaseFrameData::StaticStruct(), PropertyCount);
}
void UMovieSceneLiveLinkSubSectionBasicRole::RecordFrame(FFrameNumber InFrameNumber, const FLiveLinkFrameDataStruct& InFrameData)
{
const FLiveLinkBaseFrameData* BaseFrameData = InFrameData.GetBaseData();
check(BaseFrameData);
if (PropertyHandler.IsValid())
{
PropertyHandler->RecordFrame(InFrameNumber, *FLiveLinkBaseFrameData::StaticStruct(), InFrameData.GetBaseData());
}
}
void UMovieSceneLiveLinkSubSectionBasicRole::FinalizeSection(bool bInReduceKeys, const FKeyDataOptimizationParams& InOptimizationParams)
{
if (StaticData->GetBaseData()->PropertyNames.Num() > 0)
{
PropertyHandler->Finalize(bInReduceKeys, InOptimizationParams);
}
}
bool UMovieSceneLiveLinkSubSectionBasicRole::IsRoleSupported(const TSubclassOf<ULiveLinkRole>& RoleToSupport) const
{
return true;
}
#undef LOCTEXT_NAMESPACE // MovieSceneLiveLinkSubSectionBasicRole