Files
UnrealEngineUWP/Engine/Source/Runtime/MovieSceneTracks/Private/Systems/MovieScenePiecewiseFloatBlenderSystem.cpp
ludovic chabant e935d7cafa Sequencer: Compute base values (for "additive from base" blending) for double-based curves.
Also, the blender systems should depend on the base value computing system, so that the base values are correctly computed by the time they're used for blending.

#jira UE-123542
#rb max.chen

[CL 17405210 by ludovic chabant in ue5-main branch]
2021-09-02 13:13:24 -04:00

51 lines
2.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "Systems/MovieScenePiecewiseFloatBlenderSystem.h"
#include "EntitySystem/BuiltInComponentTypes.h"
#include "EntitySystem/MovieSceneEntitySystemLinker.h"
#include "EntitySystem/MovieSceneEntitySystemTask.h"
#include "Systems/FloatChannelEvaluatorSystem.h"
#include "Systems/MovieSceneBaseValueEvaluatorSystem.h"
#include "Systems/MovieScenePiecewiseBlenderSystemImpl.h"
#include "Systems/MovieSceneQuaternionInterpolationRotationSystem.h"
#include "Systems/WeightAndEasingEvaluatorSystem.h"
DECLARE_CYCLE_STAT(TEXT("Piecewise Float Blender System"), MovieSceneEval_PiecewiseFloatBlenderSystem, STATGROUP_MovieSceneECS);
DECLARE_CYCLE_STAT(TEXT("Blend float values"), MovieSceneEval_BlendFloatValues, STATGROUP_MovieSceneECS);
DECLARE_CYCLE_STAT(TEXT("Default combine blended float values"), MovieSceneEval_BlendCombineFloatValues, STATGROUP_MovieSceneECS);
UMovieScenePiecewiseFloatBlenderSystem::UMovieScenePiecewiseFloatBlenderSystem(const FObjectInitializer& ObjInit)
: Super(ObjInit)
{
if (HasAnyFlags(RF_ClassDefaultObject))
{
DefineImplicitPrerequisite(UFloatChannelEvaluatorSystem::StaticClass(), GetClass());
DefineImplicitPrerequisite(UMovieSceneBaseValueEvaluatorSystem::StaticClass(), GetClass());
DefineImplicitPrerequisite(UMovieSceneQuaternionInterpolationRotationSystem::StaticClass(), GetClass());
DefineImplicitPrerequisite(UWeightAndEasingEvaluatorSystem::StaticClass(), GetClass());
}
}
void UMovieScenePiecewiseFloatBlenderSystem::OnRun(FSystemTaskPrerequisites& InPrerequisites, FSystemSubsequentTasks& Subsequents)
{
using namespace UE::MovieScene;
SCOPE_CYCLE_COUNTER(MovieSceneEval_PiecewiseFloatBlenderSystem)
CompactBlendChannels();
FPiecewiseBlenderSystemImplRunParams Params;
Params.MaximumNumBlends = AllocatedBlendChannels.Num();
Params.BlendValuesStatId = GET_STATID(MovieSceneEval_BlendFloatValues);
Params.CombineBlendsStatId = GET_STATID(MovieSceneEval_BlendCombineFloatValues);
Impl.Run(Params, Linker->EntityManager, InPrerequisites, Subsequents);
}
FGraphEventRef UMovieScenePiecewiseFloatBlenderSystem::DispatchDecomposeTask(const UE::MovieScene::FValueDecompositionParams& Params, UE::MovieScene::FAlignedDecomposedValue* Output)
{
return Impl.DispatchDecomposeTask(Linker->EntityManager, Params, Output);
}