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

68 lines
2.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Channels/MovieSceneChannel.h"
#include "Channels/MovieSceneChannelData.h"
#include "Channels/MovieSceneChannelTraits.h"
#include "MovieSceneTracksComponentTypes.h"
#include "MovieSceneFloatPerlinNoiseChannel.generated.h"
USTRUCT()
struct FMovieSceneFloatPerlinNoiseChannel : public FMovieSceneChannel
{
GENERATED_BODY()
using CurveValueType = float;
MOVIESCENETRACKS_API FMovieSceneFloatPerlinNoiseChannel();
/**
* Evaluate this channel at the given time
*
* @param InSeconds The time, in seconds, to evaluate at
* @return The evaluated noise value
*/
MOVIESCENETRACKS_API float Evaluate(double InSeconds) const;
/**
* Evaluate this channel at the given time
*
* @param InSection The section that contains this channel, used to lookup the sequence's tick resolution
* @param InTime The time, in ticks, to evaluate at
* @param OutValue The evaluated noise value
* @return Whether the noise was successfully evaluated
*/
MOVIESCENETRACKS_API bool Evaluate(const UMovieSceneSection* InSection, FFrameTime InTime, float& OutValue) const;
/** The noise parameters */
UPROPERTY(EditAnywhere, Category="Perlin Noise")
FPerlinNoiseParams PerlinNoiseParams;
/**
* Evaluate perlin noise
*
* @params InParams Perlin noise parameters
* @params InInitialOffset The initial offset for the noise
* @params InSeconds The time at which to evaluate the noise
* @return The evaluated noise value
*/
static MOVIESCENETRACKS_API float Evaluate(const FPerlinNoiseParams& InParams, double InSeconds);
};
template<>
struct TMovieSceneChannelTraits<FMovieSceneFloatPerlinNoiseChannel> : TMovieSceneChannelTraitsBase<FMovieSceneFloatPerlinNoiseChannel>
{
#if WITH_EDITOR
/** Perlin noise channels can have external values (ie, they can get their values from external objects for UI purposes) */
typedef TMovieSceneExternalValue<float> ExtendedEditorDataType;
#endif
};
inline bool EvaluateChannel(const UMovieSceneSection* InSection, const FMovieSceneFloatPerlinNoiseChannel* InChannel, FFrameTime InTime, float& OutValue)
{
return InChannel->Evaluate(InSection, InTime, OutValue);
}