Files
UnrealEngine/Engine/Source/Runtime/MovieSceneTracks/Private/Sections/MovieSceneDoubleSection.cpp
2025-05-18 13:04:45 +08:00

65 lines
2.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Sections/MovieSceneDoubleSection.h"
#include "Channels/MovieSceneChannelProxy.h"
#include "EntitySystem/BuiltInComponentTypes.h"
#include "EntitySystem/MovieSceneEntityBuilder.h"
#include "EntitySystem/MovieSceneEntityManager.h"
#include "Evaluation/MovieSceneEvaluationCustomVersion.h"
#include "Evaluation/MovieScenePropertyTemplate.h"
#include "MovieSceneCommonHelpers.h"
#include "MovieSceneTracksComponentTypes.h"
#include "Systems/MovieSceneDoublePropertySystem.h"
#include "Tracks/MovieSceneDoubleTrack.h"
#include "Tracks/MovieScenePropertyTrack.h"
#include "UObject/SequencerObjectVersion.h"
#include UE_INLINE_GENERATED_CPP_BY_NAME(MovieSceneDoubleSection)
UMovieSceneDoubleSection::UMovieSceneDoubleSection( const FObjectInitializer& ObjectInitializer )
: Super( ObjectInitializer )
{
EvalOptions.EnableAndSetCompletionMode(EMovieSceneCompletionMode::ProjectDefault);
BlendType = EMovieSceneBlendType::Absolute;
bSupportsInfiniteRange = true;
}
EMovieSceneChannelProxyType UMovieSceneDoubleSection::CacheChannelProxy()
{
#if WITH_EDITOR
ChannelProxy = MakeShared<FMovieSceneChannelProxy>(DoubleCurve, FMovieSceneChannelMetaData(), TMovieSceneExternalValue<double>::Make());
#else
ChannelProxy = MakeShared<FMovieSceneChannelProxy>(DoubleCurve);
#endif
return EMovieSceneChannelProxyType::Static;
}
bool UMovieSceneDoubleSection::PopulateEvaluationFieldImpl(const TRange<FFrameNumber>& EffectiveRange, const FMovieSceneEvaluationFieldEntityMetaData& InMetaData, FMovieSceneEntityComponentFieldBuilder* OutFieldBuilder)
{
FMovieScenePropertyTrackEntityImportHelper::PopulateEvaluationField(*this, EffectiveRange, InMetaData, OutFieldBuilder);
return true;
}
void UMovieSceneDoubleSection::ImportEntityImpl(UMovieSceneEntitySystemLinker* EntityLinker, const FEntityImportParams& Params, FImportedEntity* OutImportedEntity)
{
using namespace UE::MovieScene;
if (!DoubleCurve.HasAnyData())
{
return;
}
const FBuiltInComponentTypes* Components = FBuiltInComponentTypes::Get();
const FMovieSceneTracksComponentTypes* TracksComponents = FMovieSceneTracksComponentTypes::Get();
FPropertyTrackEntityImportHelper(TracksComponents->Double)
.Add(Components->DoubleChannel[0], &DoubleCurve)
.Commit(this, Params, OutImportedEntity);
}