// Copyright Epic Games, Inc. All Rights Reserved. #include "Evaluation/MovieSceneActorReferenceTemplate.h" #include "Sections/MovieSceneActorReferenceSection.h" #include "Tracks/MovieSceneActorReferenceTrack.h" #include "GameFramework/Actor.h" #include "Evaluation/MovieSceneEvaluation.h" #include UE_INLINE_GENERATED_CPP_BY_NAME(MovieSceneActorReferenceTemplate) namespace PropertyTemplate { template<> UObject* ConvertFromIntermediateType(const FMovieSceneObjectBindingID& InObjectBinding, const FMovieSceneEvaluationOperand& Operand, FPersistentEvaluationData& PersistentData, IMovieScenePlayer& Player) { for (TWeakObjectPtr<> WeakObject : InObjectBinding.ResolveBoundObjects(Operand.SequenceID, Player)) { if (AActor* Actor = Cast(WeakObject.Get())) { return Actor; } } return nullptr; } template<> UObject* ConvertFromIntermediateType>(const TWeakObjectPtr<>& InWeakPtr, IMovieScenePlayer& Player) { return InWeakPtr.Get(); } template<> UObject* ConvertFromIntermediateType>(const TWeakObjectPtr<>& InWeakPtr, const FMovieSceneEvaluationOperand& Operand, FPersistentEvaluationData& PersistentData, IMovieScenePlayer& Player) { return InWeakPtr.Get(); } template<> IMovieScenePreAnimatedTokenPtr CacheExistingState(UObject& Object, FTrackInstancePropertyBindings& PropertyBindings) { return TCachedState>(PropertyBindings.GetCurrentValue(Object), PropertyBindings); } } FMovieSceneActorReferenceSectionTemplate::FMovieSceneActorReferenceSectionTemplate(const UMovieSceneActorReferenceSection& Section, const UMovieScenePropertyTrack& Track) : PropertyData(Track.GetPropertyName(), Track.GetPropertyPath().ToString()) , ActorReferenceData(Section.GetActorReferenceData()) { } void FMovieSceneActorReferenceSectionTemplate::Evaluate(const FMovieSceneEvaluationOperand& Operand, const FMovieSceneContext& Context, const FPersistentEvaluationData& PersistentData, FMovieSceneExecutionTokens& ExecutionTokens) const { using namespace PropertyTemplate; FMovieSceneActorReferenceKey ObjectBinding; ActorReferenceData.Evaluate(Context.GetTime(), ObjectBinding); ExecutionTokens.Add(TPropertyTrackExecutionToken(ObjectBinding.Object)); }