// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "MovieSceneSection.h" #include "MovieSceneGeometryCacheSection.generated.h" #define UE_API GEOMETRYCACHETRACKS_API class UGeometryCache; struct FQualifiedFrameTime; USTRUCT(BlueprintType) struct FMovieSceneGeometryCacheParams { GENERATED_BODY() UE_API FMovieSceneGeometryCacheParams(); /** Gets the animation sequence length, not modified by play rate */ UE_API float GetSequenceLength() const; /** The animation this section plays */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "GeometryCache", DisplayName = "Geometry Cache") TObjectPtr GeometryCacheAsset; /** The offset for the first loop of the animation clip */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "GeometryCache") FFrameNumber FirstLoopStartFrameOffset; /** The offset into the beginning of the animation clip */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "GeometryCache") FFrameNumber StartFrameOffset; /** The offset into the end of the animation clip */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "GeometryCache") FFrameNumber EndFrameOffset; /** The playback rate of the animation clip */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "GeometryCache") float PlayRate; /** Reverse the playback of the animation clip */ UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Animation") uint32 bReverse : 1; UPROPERTY() float StartOffset_DEPRECATED; UPROPERTY() float EndOffset_DEPRECATED; UPROPERTY() FSoftObjectPath GeometryCache_DEPRECATED; }; /** * Movie scene section that control geometry cache playback */ UCLASS(MinimalAPI) class UMovieSceneGeometryCacheSection : public UMovieSceneSection { GENERATED_UCLASS_BODY() public: UPROPERTY(BlueprintReadWrite, EditAnywhere, Category = "Animation", meta = (ShowOnlyInnerProperties)) FMovieSceneGeometryCacheParams Params; /** Get Frame Time as Animation Time*/ virtual float MapTimeToAnimation(float ComponentDuration, FFrameTime InPosition, FFrameRate InFrameRate) const; protected: //~ UMovieSceneSection interface virtual TOptional > GetAutoSizeRange() const override; virtual void TrimSection(FQualifiedFrameTime TrimTime, bool bTrimLeft, bool bDeleteKeys) override; virtual UMovieSceneSection* SplitSection(FQualifiedFrameTime SplitTime, bool bDeleteKeys) override; virtual void GetSnapTimes(TArray& OutSnapTimes, bool bGetSectionBorders) const override; virtual TOptional GetOffsetTime() const override; virtual void MigrateFrameTimes(FFrameRate SourceRate, FFrameRate DestinationRate) override; virtual UObject* GetSourceObject() const override; /** ~UObject interface */ virtual void PostLoad() override; virtual void Serialize(FArchive& Ar) override; private: //~ UObject interface #if WITH_EDITOR virtual void PreEditChange(FProperty* PropertyAboutToChange) override; virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override; public: float PreviousPlayRate; #endif }; #undef UE_API