Creating Custom Tracks For the Sequencer

UMovieSceneSection

#pragma once
#include "CoreMinimal.h"
#include "MovieSceneSection.h"
#include "TestSection.generated.h"

UCLASS()
class CUSTOMSEQUENCERPLUGIN_API UMovieSceneTestSection :public UMovieSceneSection
{
    GENERATED_BODY()
public:
    UMovieSceneTestSection(const FObjectInitializer& ObjectInitializer);
    virtual ~UMovieSceneTestSection();

public:
#if WITH_EDITOR
    virtual void PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent) override;
#endif
private:
};

UMovieSceneTrack

#pragma once
#include "Tracks/MovieSceneSpawnTrack.h"
#include "Compilation/IMovieSceneTrackTemplateProducer.h"
#include "Camera/CameraActor.h"
#include "MovieSceneNameableTrack.h"
#include "TestTrack.generated.h"

class UMovieSceneTestSection;

UCLASS()
class CUSTOMSEQUENCERPLUGIN_API UMovieSceneTestTrack : public UMovieSceneNameableTrack, public IMovieSceneTrackTemplateProducer
{
    GENERATED_BODY()
public:
    UMovieSceneTestTrack(const FObjectInitializer& ObjectInitializer);
    virtual ~UMovieSceneTestTrack();

public:
    virtual void AddSection(UMovieSceneSection& Section) override;
    virtual class UMovieSceneSection* CreateNewSection() override;
    virtual const TArray& GetAllSections() const override;
    virtual bool HasSection(const UMovieSceneSection& Section) const override;
    virtual bool IsEmpty() const override;

    virtual void RemoveSection(UMovieSceneSection & Section) override;
    virtual FName GetTrackName() const;
    virtual bool SupportsMultipleRows() const;
    virtual bool SupportsType(TSubclassOf SectionClass) const;

    TWeakObjectPtr TestCameraActor;

    virtual FMovieSceneEvalTemplatePtr CreateTemplateForSection const UMovieSceneSection& InSection) const override;

private:
    UPROPERTY()
    TArray Sections;
};

ISequencerSection

class FMovieSceneTestSection : public ISequencerSection
, public TSharedFromThis
{
public:
    FMovieSceneTestSection(UMovieSceneSection& InSection, TWeakPtr InSequencer);
    virtual ~FMovieSceneTestSection();

public:
    virtual UMovieSceneSection* GetSectionObject() override;

    virtual FText GetSectionTitle() const override;
    virtual FText GetSectionToolTip() const override;
    virtual float GetSectionHeight() const override;

    virtual int32 OnPaintSection(FSequencerSectionPainter& Painter) const override;
    virtual bool SectionIsResizable() const{ return true; }
    virtual void GenerateSectionLayout(class ISectionLayoutBuilder& LayoutBuilder);

    virtual void BeginResizeSection() override;
    virtual void ResizeSection(ESequencerSectionResizeMode ResizeMode, FFrameNumber ResizeTime) override;

    virtual void BeginSlipSection() override;
    virtual void SlipSection(FFrameNumber SlipTime) override;

private:
    TWeakObjectPtr Section;
    TWeakPtr Sequencer;
};

FMovieSceneTrackEditor

class CUSTOMSEQUENCERPLUGIN_API FMovieSceneTestPreviewEditor : public FMovieSceneTrackEditor
{
public:
    FMovieSceneTestPreviewEditor(TSharedRef InSequencer);
    virtual ~FMovieSceneTestPreviewEditor();

    static TSharedRef CreateTrackEditor(TSharedRef OwningSequencer);

public:
    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 const FSlateBrush* GetIconBrush() const override;
    virtual void BuildObjectBindingTrackMenu(FMenuBuilder& MenuBuilder, const TArray& ObjectBindings, const UClass* ObjectClass) override;
    virtual bool IsResizable(UMovieSceneTrack* InTrack) const override;

    virtual bool OnAllowDrop(const FDragDropEvent& DragDropEvent, FSequencerDragDropParams& DragDropParams) override;
    virtual FReply OnDrop(const FDragDropEvent& DragDropEvent, const FSequencerDragDropParams& DragDropParams) override;

private:
    void HandleAddTrackOnActorMenuEntryExecute(FMenuBuilder&, TArray);
};

FMovieSceneEvalTemplate

#pragma once

#include "CoreMinimal.h"
#include "Evaluation/MovieSceneEvalTemplate.h"
#include "../Tracks/TestPreviewTrack.h"
#include "TestPreviewTemplate.generated.h"

class UMovieSceneTestPreviewTrack;
class UMovieSceneTestPreviewSection;

USTRUCT()
struct FMovieSceneTestPreviewSectionTemplate : public FMovieSceneEvalTemplate
{
    GENERATED_BODY()

    FMovieSceneTestPreviewSectionTemplate();
    FMovieSceneTestPreviewSectionTemplate(const UMovieSceneTestPreviewSection& Section, const UMovieSceneTestPreviewTrack& Track);

private:
    virtual UScriptStruct& GetScriptStructImpl() const override { return *StaticStruct(); }
    virtual void Evaluate(const FMovieSceneEvaluationOperand& Operand, const FMovieSceneContext& Context, const FPersistentEvaluationData& PersistentData, FMovieSceneExecutionTokens& ExecutionTokens) const override;

};

IMovieSceneExecutionToken

void FMovieSceneTestPreviewSectionTemplate::Evaluate(const FMovieSceneEvaluationOperand& Operand, const FMovieSceneContext& Context, const FPersistentEvaluationData& PersistentData, FMovieSceneExecutionTokens& ExecutionTokens) const
{
    if (GEngine && GEngine->UseSound() && Context.GetStatus() != EMovieScenePlayerStatus::Jumping)
    {
        const UMovieSceneTestPreviewSection* TestSection = Cast(GetSourceSection());

        float TimeValue = Context.GetTime().AsDecimal() / 100;
        UMovieSceneTestPreviewTrack* TestTrack = Cast(TestSection->GetOuter());
        ExecutionTokens.Add(FTestPreviewSectionExecutionToken(TestSection, FVector(0,0,TimeValue)));
    }
}
UCLASS()
class CUSTOMSEQUENCERPLUGIN_API UMovieSceneTestPreviewTrack : public UMovieSceneNameableTrack, public IMovieSceneTrackTemplateProducer
{
    GENERATED_BODY()
public:
...
virtual FMovieSceneEvalTemplatePtr CreateTemplateForSection(const UMovieSceneSection& InSection) const override;
...
}


FMovieSceneEvalTemplatePtr UMovieSceneTestPreviewTrack::CreateTemplateForSection(const UMovieSceneSection& InSection) const
{
    return FMovieSceneTestPreviewSectionTemplate(*CastChecked(&InSection), *this);
}

results matching ""

    No results matching ""