You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
**Animation Data Model load/cook time and memory optimizations** - Added SetKeysOnly to FMovieSceneFloatChannel, allowing to only set value/frames values and skip allocating key handles - Added EvaluateWithCache to TMovieSceneCurveChannelImpl, allowing to evaluate multiple curves using a caching data structure holding the frame-indices resulting from the FrameTime -> indexes calculationg - UFKControlRig::GetControlName/GetControlTargetName, added thread_local mapping cache and optimized FName generation - Made the sequencer bone curve keys 'sparse' again, if constant it just sets the default value for the curve otherwise it is still uniform - Only resample keys when compressing, and clear them on any significant model changes and when save-during-cook has been completed - Routed ::Presave for AnimSequencerDataModel directly through to UMovieSceneSignedObject to skip compiling cooked sequencer that that will/should never cooked and packaged - Added some significant pass-by-reference changes to AnimSequencerModel APIs (passing large arrays by value previously) :doh: - Optimized GenerateLegacyBoneData Original CL description: **New** - Engine - IAnimationDataModel interface - AnimationData plugin - AnimSequencerDataModel, sequencer based implementation of IAnimationDataModel - AnimSequencerDataController, controller for above (implementation of IAnimationDataController) - Added FCompressedRichCurve::PopulateCurve, allowing users to convert back to a FRichCurve for validation/debugging - Added DefaultFrameRate to AnimationSettings, this replaces the hardcoded 30FPS in code - Added ::GetKeyIndicesFromTime which takes FFrameRate - Added AnimSequenceBase::OnAnimModelLoaded, this is required for correct postloading behaviour of data model (specifically AnimSequencerDataModel, as it depends on data from its outer ? anim sequence) - Added IAnimationDataModel ::Evaluate which now takes responsibility for evaluating raw animation bone, curve and attribute data. And moved all trackbased evaluation code into AnimDataModel.cpp - Added a.ForceEvalRawData allowing to force evaluation of source data - Added a.SkipDDC to force compressing animation data locally **Changed** - Reparent UAnimDataModel to IAnimationDataModel interface, and rejig behaviour - AnimSequenceBase now reference AnimDataModel as IAnimationDataModel - Upgrade path for legacy to IAnimationDataModel and existing UAnimDataModel to IAnimationDataModel through IAnimationDataController::PopulateWithExisting - IAnimationDataModel data is now frame(number/rate/time) based rather than seconds/keyindices. This enforces frameborder aligned data from now on. - Moved RichCurve evaluation code from RichCurve.cpp to separate file and consolidated all instances of copy-pasta behaviour - Updated/removed deprecated EngineTests around AnimSequences - Changed many instances to use a FFrameTime together with a known FFrameRate versus seconds and sequencelength in float involving frame \/ time calculations (including instances of FAnimKeyHelper) - Switched anim sequence evaluation to use double in Extraction context for time value and patched up places with static\_cast\<double\> - FRichCurve::Eval - Make sure we always evaluate keys when T >= Key0.Time and T <= KeyN.Time to deal with crazy userweighted tangents - Fixed WeightedKeyDataAdapter::GetKeyInterpMode/GetKeyTangentWeightMode retrieving invalid values, as it was indexing according to KeyIndex rather than KeyIndex\*2. This made it so that values were misinterpreted. - Fixed WeightedEvalForTwoKeys for compressed data retrieving GetKeyInterpMode and GetKeyTangentWeightMode using the wrong index value. As they are not indexed using KeyDataHandle type. - Fixed issue where compression could crash when containing zero-key scale additivebase track (tries to retrieve) - Replaced instances of NULL with nullptr - Moved required decompression information into FAnimSequenceDecompressionContext and reimplemented decompression within UE::Anim::Decompression namespace and new file - Deprecated ::GetRawDataGuid and replaced with GetDataModel()->GenerateGuid() - Fixed UAnimStreamable evaluation/compression (previously broken with MVC refactor) - Updated Animation exporting pipeline to be frame-based rather than seconds - Deprecated RetargetPose, replaced with FRetargetingScope (used within AnimModel::Evaluate) - Fixed BaseAdditiveAnimation array become invalid/incorrect when removing zero-additve tracks during compression - Updated EngineTest animation sequence related tests to new APIs (while maintaining deprecated path testing as well for now) - AnimDataController / Animation Sequence tests now generate a USkeleton for the transient animation sequence (used to perform the test on) **Removed** - Unused file/class AnimData/AnimDataNotifyCollector.h #rb Thomas.Sarkanen, Mike.Zyracki #jira UE-131296 #preflight 631f6897a9331c69c3a34d1e [CL 21980597 by Jurre deBaare in ue5-main branch]
425 lines
14 KiB
C++
425 lines
14 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#pragma once
|
|
|
|
#include "Misc/Change.h"
|
|
#include "Misc/CoreMiscDefines.h"
|
|
|
|
#include "Animation/AnimData/IAnimationDataModel.h"
|
|
#include "Animation/AnimTypes.h"
|
|
#include "Misc/FrameRate.h"
|
|
|
|
class UObject;
|
|
class IAnimationDataModel;
|
|
class IAnimationDataController;
|
|
|
|
#if WITH_EDITOR
|
|
|
|
namespace UE {
|
|
|
|
namespace Anim {
|
|
|
|
/**
|
|
* UAnimDataController instanced FChange-based objects used for storing mutations to an IAnimationDataModel within the Transaction Buffer.
|
|
* Each Action class represents an (invertable) operation mutating an IAnimationDataModel object utilizing a UAnimDataController. Allowing
|
|
* for a more granular approach to undo/redo-ing changes while also allowing for script-based interoperability.
|
|
*/
|
|
class ANIMATIONDATACONTROLLER_API FAnimDataBaseAction : public FSwapChange
|
|
{
|
|
public:
|
|
virtual TUniquePtr<FChange> Execute(UObject* Object) final;
|
|
virtual ~FAnimDataBaseAction() {}
|
|
virtual FString ToString() const override;
|
|
|
|
protected:
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) = 0;
|
|
virtual FString ToStringInternal() const = 0;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FOpenBracketAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FOpenBracketAction(const FString& InDescription) : Description(InDescription) {}
|
|
virtual ~FOpenBracketAction() {}
|
|
protected:
|
|
FOpenBracketAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FString Description;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FCloseBracketAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FCloseBracketAction(const FString& InDescription) : Description(InDescription) {}
|
|
virtual ~FCloseBracketAction() {}
|
|
protected:
|
|
FCloseBracketAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FString Description;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddTrackAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddTrackAction(const FBoneAnimationTrack& Track);
|
|
virtual ~FAddTrackAction() {}
|
|
protected:
|
|
FAddTrackAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FName Name;
|
|
int32 BoneTreeIndex;
|
|
FRawAnimSequenceTrack Data;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FRemoveTrackAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FRemoveTrackAction(const FName& TrackName);
|
|
virtual ~FRemoveTrackAction() {}
|
|
protected:
|
|
FRemoveTrackAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FName Name;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetTrackKeysAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetTrackKeysAction(const FBoneAnimationTrack& Track);
|
|
virtual ~FSetTrackKeysAction() {}
|
|
protected:
|
|
FSetTrackKeysAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FName Name;
|
|
int32 TrackIndex;
|
|
|
|
FRawAnimSequenceTrack TrackData;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FResizePlayLengthInFramesAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FResizePlayLengthInFramesAction(const IAnimationDataModel* InModel, FFrameNumber F0, FFrameNumber F1);
|
|
virtual ~FResizePlayLengthInFramesAction() override {}
|
|
protected:
|
|
FResizePlayLengthInFramesAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FFrameNumber Length;
|
|
FFrameNumber Frame0;
|
|
FFrameNumber Frame1;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetFrameRateAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetFrameRateAction(const IAnimationDataModel* InModel);
|
|
virtual ~FSetFrameRateAction() override {}
|
|
protected:
|
|
FSetFrameRateAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FFrameRate FrameRate;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddCurveAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddCurveAction(const FAnimationCurveIdentifier& InCurveId, int32 InFlags) : CurveId(InCurveId), Flags(InFlags) {}
|
|
|
|
virtual ~FAddCurveAction() {}
|
|
protected:
|
|
FAddCurveAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
int32 Flags;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddFloatCurveAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddFloatCurveAction(const FAnimationCurveIdentifier& InCurveId, int32 InFlags, const TArray<FRichCurveKey>& InKeys, const FLinearColor& InColor) : CurveId(InCurveId), Flags(InFlags), Keys(InKeys), Color(InColor) {}
|
|
virtual ~FAddFloatCurveAction() {}
|
|
protected:
|
|
FAddFloatCurveAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
int32 Flags;
|
|
TArray<FRichCurveKey> Keys;
|
|
FLinearColor Color;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddTransformCurveAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddTransformCurveAction(const FAnimationCurveIdentifier& InCurveId, int32 InFlags, const FTransformCurve& InTransformCurve);
|
|
virtual ~FAddTransformCurveAction() {}
|
|
protected:
|
|
FAddTransformCurveAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
int32 Flags;
|
|
|
|
TArray<FRichCurveKey> SubCurveKeys[9];
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FRemoveCurveAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FRemoveCurveAction(const FAnimationCurveIdentifier& InCurveId) : CurveId(InCurveId) {}
|
|
virtual ~FRemoveCurveAction() {}
|
|
protected:
|
|
FRemoveCurveAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetCurveFlagsAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetCurveFlagsAction(const FAnimationCurveIdentifier& InCurveId, int32 InFlags, ERawCurveTrackTypes InCurveType) : CurveId(InCurveId), Flags(InFlags), CurveType(InCurveType) {}
|
|
virtual ~FSetCurveFlagsAction() {}
|
|
protected:
|
|
FSetCurveFlagsAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
int32 Flags;
|
|
ERawCurveTrackTypes CurveType;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FRenameCurveAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FRenameCurveAction(const FAnimationCurveIdentifier& InCurveId, const FAnimationCurveIdentifier& InNewCurveId) : CurveId(InCurveId), NewCurveId(InNewCurveId) {}
|
|
virtual ~FRenameCurveAction() {}
|
|
protected:
|
|
FRenameCurveAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
FAnimationCurveIdentifier NewCurveId;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FScaleCurveAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FScaleCurveAction(const FAnimationCurveIdentifier& InCurveId, float InOrigin, float InFactor, ERawCurveTrackTypes InCurveType);
|
|
virtual ~FScaleCurveAction() {}
|
|
protected:
|
|
FScaleCurveAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
ERawCurveTrackTypes CurveType;
|
|
float Origin;
|
|
float Factor;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddRichCurveKeyAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddRichCurveKeyAction(const FAnimationCurveIdentifier& InCurveId, const FRichCurveKey& InKey) : CurveId(InCurveId), Key(InKey) {}
|
|
virtual ~FAddRichCurveKeyAction() {}
|
|
protected:
|
|
FAddRichCurveKeyAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
ERawCurveTrackTypes CurveType;
|
|
FRichCurveKey Key;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetRichCurveKeyAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetRichCurveKeyAction(const FAnimationCurveIdentifier& InCurveId, const FRichCurveKey& InKey) : CurveId(InCurveId), Key(InKey) {}
|
|
virtual ~FSetRichCurveKeyAction() {}
|
|
protected:
|
|
FSetRichCurveKeyAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
FRichCurveKey Key;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FRemoveRichCurveKeyAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FRemoveRichCurveKeyAction(const FAnimationCurveIdentifier& InCurveId, const float InTime) : CurveId(InCurveId), Time(InTime) {}
|
|
virtual ~FRemoveRichCurveKeyAction() {}
|
|
protected:
|
|
FRemoveRichCurveKeyAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
float Time;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetRichCurveKeysAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetRichCurveKeysAction(const FAnimationCurveIdentifier& InCurveId, const TArray<FRichCurveKey>& InKeys) : CurveId(InCurveId), Keys(InKeys) {}
|
|
virtual ~FSetRichCurveKeysAction() {}
|
|
protected:
|
|
FSetRichCurveKeysAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
TArray<FRichCurveKey> Keys;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetCurveColorAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetCurveColorAction(const FAnimationCurveIdentifier& InCurveId, const FLinearColor& InColor) : CurveId(InCurveId), Color(InColor) {}
|
|
virtual ~FSetCurveColorAction() {}
|
|
protected:
|
|
FSetCurveColorAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationCurveIdentifier CurveId;
|
|
FLinearColor Color;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddAtributeAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddAtributeAction(const FAnimatedBoneAttribute& InAttribute);
|
|
virtual ~FAddAtributeAction() {}
|
|
protected:
|
|
FAddAtributeAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationAttributeIdentifier AttributeId;
|
|
TArray<FAttributeKey> Keys;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FRemoveAtributeAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FRemoveAtributeAction(const FAnimationAttributeIdentifier& InAttributeId) : AttributeId(InAttributeId) {}
|
|
virtual ~FRemoveAtributeAction() {}
|
|
protected:
|
|
FRemoveAtributeAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationAttributeIdentifier AttributeId;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FAddAtributeKeyAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FAddAtributeKeyAction(const FAnimationAttributeIdentifier& InAttributeId, const FAttributeKey& InKey) : AttributeId(InAttributeId), Key(InKey) {}
|
|
virtual ~FAddAtributeKeyAction() {}
|
|
protected:
|
|
FAddAtributeKeyAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationAttributeIdentifier AttributeId;
|
|
FAttributeKey Key;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetAtributeKeyAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetAtributeKeyAction(const FAnimationAttributeIdentifier& InAttributeId, const FAttributeKey& InKey) : AttributeId(InAttributeId), Key(InKey) {}
|
|
virtual ~FSetAtributeKeyAction() {}
|
|
protected:
|
|
FSetAtributeKeyAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationAttributeIdentifier AttributeId;
|
|
FAttributeKey Key;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FRemoveAtributeKeyAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FRemoveAtributeKeyAction(const FAnimationAttributeIdentifier& InAttributeId, float InTime) : AttributeId(InAttributeId), Time(InTime) {}
|
|
virtual ~FRemoveAtributeKeyAction() {}
|
|
protected:
|
|
FRemoveAtributeKeyAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationAttributeIdentifier AttributeId;
|
|
float Time;
|
|
};
|
|
|
|
class ANIMATIONDATACONTROLLER_API FSetAtributeKeysAction : public FAnimDataBaseAction
|
|
{
|
|
public:
|
|
explicit FSetAtributeKeysAction(const FAnimatedBoneAttribute& InAttribute);
|
|
virtual ~FSetAtributeKeysAction() {}
|
|
protected:
|
|
FSetAtributeKeysAction() {}
|
|
virtual TUniquePtr<FChange> ExecuteInternal(IAnimationDataModel* Model, IAnimationDataController* Controller) override;
|
|
virtual FString ToStringInternal() const override;
|
|
|
|
protected:
|
|
FAnimationAttributeIdentifier AttributeId;
|
|
TArray<FAttributeKey> Keys;
|
|
};
|
|
|
|
} // namespace Anim
|
|
|
|
} // namespace UE
|
|
|
|
#endif // WITH_EDITOR
|