// Copyright Epic Games, Inc. All Rights Reserved. #include "Evaluation/Blending/MovieSceneInitialValueStore.h" #include "Evaluation/Blending/MovieSceneBlendingActuator.h" struct FMovieSceneRemoveInitialValueToken : IMovieScenePreAnimatedToken { FMovieSceneRemoveInitialValueToken(TWeakPtr InWeakActuator) : WeakActuator(InWeakActuator) {} virtual void RestoreState(UObject& Object, const UE::MovieScene::FRestoreStateParams& Params) override { TSharedPtr Store = WeakActuator.Pin(); if (Store.IsValid()) { Store->RemoveInitialValueForObject(FObjectKey(&Object)); } } private: /** The store to remove the initial value from */ TWeakPtr WeakActuator; }; struct FMovieSceneRemoveInitialGlobalValueToken : IMovieScenePreAnimatedGlobalToken { FMovieSceneRemoveInitialGlobalValueToken(TWeakPtr InWeakActuator) : WeakActuator(InWeakActuator) {} virtual void RestoreState(const UE::MovieScene::FRestoreStateParams& Params) override { TSharedPtr Store = WeakActuator.Pin(); if (Store.IsValid()) { Store->RemoveInitialValueForObject(FObjectKey()); } } private: /** The store to remove the initial value from */ TWeakPtr WeakActuator; }; FMovieSceneRemoveInitialValueTokenProducer::FMovieSceneRemoveInitialValueTokenProducer(TWeakPtr InWeakActuator) : WeakActuator(InWeakActuator) { } FMovieSceneRemoveInitialValueTokenProducer::~FMovieSceneRemoveInitialValueTokenProducer() = default; IMovieScenePreAnimatedTokenPtr FMovieSceneRemoveInitialValueTokenProducer::CacheExistingState(UObject& Object) const { return FMovieSceneRemoveInitialValueToken(WeakActuator); } FMovieSceneRemoveInitialGlobalValueTokenProducer::FMovieSceneRemoveInitialGlobalValueTokenProducer(TWeakPtr InWeakActuator) : WeakActuator(InWeakActuator) { } FMovieSceneRemoveInitialGlobalValueTokenProducer::~FMovieSceneRemoveInitialGlobalValueTokenProducer() = default; IMovieScenePreAnimatedGlobalTokenPtr FMovieSceneRemoveInitialGlobalValueTokenProducer::CacheExistingState() const { return FMovieSceneRemoveInitialGlobalValueToken(WeakActuator); }