Files
UnrealEngine/Engine/Source/Runtime/MovieSceneTracks/Public/Tracks/MovieScene3DTransformTrack.h
2025-05-18 13:04:45 +08:00

92 lines
2.5 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreMinimal.h"
#include "UObject/ObjectMacros.h"
#include "Tracks/MovieScenePropertyTrack.h"
#include "Sections/MovieScene3DTransformSection.h"
#include "EntitySystem/IMovieSceneBlenderSystemSupport.h"
#include "MovieScene3DTransformTrack.generated.h"
enum class EMovieSceneTransformChannel : uint32;
class UMovieScene3DTransformSection;
struct FMovieSceneInterrogationKey;
struct FTrajectoryKey
{
struct FData
{
FData(UMovieScene3DTransformSection* InSection, TOptional<FKeyHandle> InKeyHandle, ERichCurveInterpMode InInterpMode, FName InChannelName)
: Section(InSection), KeyHandle(InKeyHandle), ChannelName(InChannelName), InterpMode(InInterpMode)
{}
TWeakObjectPtr<UMovieScene3DTransformSection> Section;
TOptional<FKeyHandle> KeyHandle;
FName ChannelName;
ERichCurveInterpMode InterpMode;
};
FTrajectoryKey(FFrameNumber InTime) : Time(InTime) {}
bool Is(ERichCurveInterpMode InInterpMode) const
{
if (KeyData.Num())
{
for (const FData& Value : KeyData)
{
if (Value.InterpMode != InInterpMode)
{
return false;
}
}
return true;
}
return false;
}
FFrameNumber Time;
TArray<FData, TInlineAllocator<1>> KeyData;
};
/**
* Handles manipulation of component transforms in a movie scene
*/
UCLASS(MinimalAPI)
class UMovieScene3DTransformTrack
: public UMovieScenePropertyTrack
, public IMovieSceneBlenderSystemSupport
{
GENERATED_UCLASS_BODY()
public:
// UMovieSceneTrack interface
virtual bool SupportsType(TSubclassOf<UMovieSceneSection> SectionClass) const override;
virtual UMovieSceneSection* CreateNewSection() override;
#if WITH_EDITORONLY_DATA
virtual bool CanRename() const override { return true; }
virtual FText GetDisplayName() const override;
#endif
// IMovieSceneBlenderSystemSupport
TSubclassOf<UMovieSceneBlenderSystem> GetBlenderSystem() const override;
void SetBlenderSystem(TSubclassOf<UMovieSceneBlenderSystem> BlenderSystemClass) override;
void GetSupportedBlenderSystems(TArray<TSubclassOf<UMovieSceneBlenderSystem>>& OutSystemClasses) const override;
#if WITH_EDITOR
MOVIESCENETRACKS_API TArray<FTrajectoryKey> GetTrajectoryData(FFrameNumber Time, int32 MaxNumDataPoints, TRange<FFrameNumber>) const;
MOVIESCENETRACKS_API FSlateColor GetLabelColor(const FMovieSceneLabelParams& LabelParams) const override;
#endif
private:
/** User-defined blender system to use for this track */
UPROPERTY()
TSubclassOf<UMovieSceneBlenderSystem> BlenderSystemClass;
};