// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "ISequencerSection.h" #include "MovieSceneTrackEditor.h" struct FBuildEditWidgetParams; struct FAssetData; class FMenuBuilder; class FSequencerSectionPainter; class UMovieSceneGeometryCacheSection; class UMovieSceneSequence; class UGeometryCacheComponent; /** * Tools for Geometry Cache tracks */ class GEOMETRYCACHESEQUENCER_API FGeometryCacheTrackEditor : public FMovieSceneTrackEditor { public: /** * Constructor * * @param InSequencer The sequencer instance to be used by this tool */ FGeometryCacheTrackEditor( TSharedRef InSequencer ); /** Virtual destructor. */ virtual ~FGeometryCacheTrackEditor() { } /** * Creates an instance of this class. Called by a sequencer * * @param OwningSequencer The sequencer instance to be used by this tool * @return The new instance of this class */ static TSharedRef CreateTrackEditor( TSharedRef OwningSequencer ); public: // ISequencerTrackEditor interface virtual FText GetDisplayName() const override; virtual void BuildObjectBindingTrackMenu(FMenuBuilder& MenuBuilder, const TArray& ObjectBindings, const UClass* ObjectClass) override; virtual TSharedRef MakeSectionInterface( UMovieSceneSection& SectionObject, UMovieSceneTrack& Track, FGuid ObjectBinding ) override; virtual bool SupportsSequence(UMovieSceneSequence* InSequence) const override; virtual bool SupportsType( TSubclassOf Type ) const override; virtual TSharedPtr BuildOutlinerEditWidget(const FGuid& ObjectBinding, UMovieSceneTrack* Track, const FBuildEditWidgetParams& Params) override; virtual const FSlateBrush* GetIconBrush() const override; private: void BuildGeometryCacheTrack(TArray ObjectBindings, UMovieSceneTrack* Track); /** Delegate for AnimatablePropertyChanged in AddKey */ FKeyPropertyResult AddKeyInternal(FFrameNumber KeyTime, UObject* Object, UGeometryCacheComponent* GeomCacheComp, UMovieSceneTrack* Track); }; /** Class for animation sections */ class FGeometryCacheSection : public ISequencerSection , public TSharedFromThis { public: /** Constructor. */ FGeometryCacheSection( UMovieSceneSection& InSection, TWeakPtr InSequencer); /** Virtual destructor. */ virtual ~FGeometryCacheSection() { } public: // ISequencerSection interface virtual UMovieSceneSection* GetSectionObject() override; virtual FText GetSectionTitle() const override; virtual float GetSectionHeight() const override; virtual int32 OnPaintSection( FSequencerSectionPainter& Painter ) const override; virtual void BeginResizeSection() override; virtual void ResizeSection(ESequencerSectionResizeMode ResizeMode, FFrameNumber ResizeTime) override; virtual void BeginSlipSection() override; virtual void SlipSection(FFrameNumber SlipTime) override; virtual void BeginDilateSection() override; virtual void DilateSection(const TRange& NewRange, float DilationFactor) override; private: /** The section we are visualizing */ UMovieSceneGeometryCacheSection& Section; /** Used to draw animation frame, need selection state and local time*/ TWeakPtr Sequencer; /** Cached first loop start offset value valid only during resize */ FFrameNumber InitialFirstLoopStartOffsetDuringResize; /** Cached start time valid only during resize */ FFrameNumber InitialStartTimeDuringResize; };