// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MovieScene.h" #include "MovieSceneSection.h" namespace UE::MovieSceneTools::CurveHelpers { template concept CCurveValueTypeable = requires { typename T::CurveValueType; }; /** Shared implementation for evaluating a ChannelType. Useful helper for evaluating IBufferedCurveModel. */ template bool Evaluate( double InTime, double& OutValue, const ChannelType& Channel, const TWeakObjectPtr WeakSection ) { if (UMovieSceneSection* Section = WeakSection.Get()) { FFrameRate TickResolution = Section->GetTypedOuter()->GetTickResolution(); using KeyType = typename ChannelType::CurveValueType; KeyType ThisValue = static_cast(0.0); if (Channel.Evaluate(InTime * TickResolution, ThisValue)) { OutValue = ThisValue; return true; } } return false; } }