5#include "CoreMinimal.h"
6#include "CommonValues.h"
7#include "QuickTweenable.h"
8#include "UObject/Object.h"
9#include "../Utils/LoopType.h"
10#include "QuickTweenSequence.generated.h"
15DEFINE_LOG_CATEGORY_STATIC(LogQuickTweenSequence, Log, All);
18DECLARE_DYNAMIC_DELEGATE_OneParam(FDynamicDelegateTweenSequence,
UQuickTweenSequence*, TweenSequence);
53 UQuickTweenSequence() =
default;
59 const UObject* worldContextObject,
61 ELoopType loopType = ELoopType::Restart,
62 const FString&
id = FString(),
63 bool bShouldAutoKill =
true,
64 bool bShouldPlayWhilePaused =
false);
67 virtual ~UQuickTweenSequence()
override;
69#pragma region Sequence Creation
83 UObject* worldContextObject,
85 ELoopType loopType = ELoopType::Restart,
86 const FString&
id = FString(),
87 bool bShouldAutoKill =
true,
88 bool bShouldPlayWhilePaused =
false)
90 UQuickTweenSequence* sequence = NewObject<UQuickTweenSequence>(worldContextObject);
97 bShouldPlayWhilePaused);
106 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Sequence"), Category =
"Sequence|Creation")
114 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Sequence"), Category =
"Sequence|Creation")
120#pragma region Sequence Control
123 virtual void Play()
override;
125 virtual void Pause()
override;
127 virtual void Reverse()
override;
129 virtual void Complete(
bool bSnapToEnd =
true)
override;
131 virtual void Restart()
override;
133 virtual void Kill()
override;
135 virtual void Update(
float deltaTime)
override;
139 [[nodiscard]]
virtual bool GetIsPendingKill()
const override {
return SequenceState == EQuickTweenState::Kill; }
143#pragma region Sequence State Queries
146 [[nodiscard]]
virtual bool GetIsPlaying()
const override {
return SequenceState == EQuickTweenState::Play;}
148 [[nodiscard]]
virtual float GetTimeScale()
const override {
return 1.0f; }
150 [[nodiscard]]
virtual bool GetIsReversed()
const override {
return bIsReversed; }
152 [[nodiscard]]
virtual EEaseType
GetEaseType()
const override {
return EEaseType::Linear; }
154 [[nodiscard]]
virtual UCurveFloat*
GetEaseCurve()
const override {
return nullptr; }
156 [[nodiscard]]
virtual bool GetAutoKill()
const override {
return bAutoKill; }
158 [[nodiscard]]
virtual bool GetIsCompleted()
const override {
return SequenceState == EQuickTweenState::Complete; }
164 if (Loops == INFINITE_LOOPS)
166 return TNumericLimits<float>::Max();
171 [[nodiscard]]
virtual float GetElapsedTime()
const override {
return ElapsedTime; }
173 [[nodiscard]]
virtual int32
GetLoops()
const override {
return Loops; }
175 [[nodiscard]]
virtual int32
GetCurrentLoop()
const override {
return CurrentLoop; }
177 [[nodiscard]]
virtual ELoopType
GetLoopType()
const override {
return LoopType; }
179 [[nodiscard]]
virtual FString
GetTweenTag()
const override {
return SequenceTweenId; }
187 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Sequence"), Category =
"Sequence|State")
195 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Sequence"), Category =
"Sequence|State")
200#pragma region Delegates
208 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
216 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
224 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
232 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
240 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
247 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
254 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
261 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
268 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
275 UFUNCTION(BlueprintCallable, meta = (Keywords =
"Tween | Event"), Category =
"Tween|Info")
296 struct FQuickTweenSequenceStateResult
299 float LoopLocalTime = 0.0f;
312 FQuickTweenSequenceStateResult ComputeSequenceState(
float time)
const;
323 void SeekTime(
float loopLocalTime);
327 return instigator == Owner;
330 bool HasOwner()
const {
return Owner !=
nullptr; }
337 void HandleOnStart();
344 void HandleOnComplete();
360 bool RequestStateTransition(EQuickTweenState newState);
363 EQuickTweenState SequenceState = EQuickTweenState::Idle;
367 TArray<FQuickTweenSequenceGroup> TweenGroups;
370 float ElapsedTime = 0.0f;
373 bool bIsReversed =
false;
376 bool bWasActive =
false;
379 float PreviousLoopLocalTime = 0.0f;
382 bool bSnapToEndOnComplete =
true;
385 bool bTriggerEvents =
true;
388 int32 CurrentLoop = 1;
394 ELoopType LoopType = ELoopType::Restart;
397 FString SequenceTweenId;
400 bool bAutoKill =
true;
403 bool bPlayWhilePaused =
false;
407 const UObject* WorldContextObject =
nullptr;
Definition QuickTweenBase.h:26
Definition QuickTweenSequence.h:49
virtual bool GetIsPlaying() const override
Definition QuickTweenSequence.h:146
UQuickTweenSequence * Append(UQuickTweenable *tween)
Definition QuickTweenSequence.cpp:83
virtual float GetTimeScale() const override
Definition QuickTweenSequence.h:148
FNativeDelegateTweenSequence OnComplete
Definition QuickTweenSequence.h:285
virtual float GetTotalDuration() const override
Definition QuickTweenSequence.h:162
void AssignOnStartEvent(FDynamicDelegateTweenSequence callback)
Definition QuickTweenSequence.cpp:495
UQuickTweenable * GetTween(int32 index) const
Definition QuickTweenSequence.cpp:366
void AssignOnKilledEvent(FDynamicDelegateTweenSequence callback)
Definition QuickTweenSequence.cpp:510
virtual void Play() override
Definition QuickTweenSequence.cpp:380
virtual void Kill() override
Definition QuickTweenSequence.cpp:436
virtual bool GetShouldPlayWhilePaused() const override
Definition QuickTweenSequence.h:181
UQuickTweenSequence * Join(UQuickTweenable *tween)
Definition QuickTweenSequence.cpp:48
virtual void Complete(bool bSnapToEnd=true) override
Definition QuickTweenSequence.cpp:418
void RemoveAllOnLoopEvent(const UObject *object)
Definition QuickTweenSequence.cpp:540
virtual float GetLoopDuration() const override
Definition QuickTweenSequence.cpp:346
static UQuickTweenSequence * CreateSequence(UObject *worldContextObject, int32 loops=1, ELoopType loopType=ELoopType::Restart, const FString &id=FString(), bool bShouldAutoKill=true, bool bShouldPlayWhilePaused=false)
Definition QuickTweenSequence.h:82
virtual void Pause() override
Definition QuickTweenSequence.cpp:397
void RemoveAllOnCompleteEvent(const UObject *object)
Definition QuickTweenSequence.cpp:530
virtual ELoopType GetLoopType() const override
Definition QuickTweenSequence.h:177
virtual EEaseType GetEaseType() const override
Definition QuickTweenSequence.h:152
virtual bool GetIsReversed() const override
Definition QuickTweenSequence.h:150
void RemoveAllOnKilledEvent(const UObject *object)
Definition QuickTweenSequence.cpp:535
virtual bool GetIsCompleted() const override
Definition QuickTweenSequence.h:158
virtual int32 GetCurrentLoop() const override
Definition QuickTweenSequence.h:175
void AssignOnCompleteEvent(FDynamicDelegateTweenSequence callback)
Definition QuickTweenSequence.cpp:505
void AssignOnLoopEvent(FDynamicDelegateTweenSequence callback)
Definition QuickTweenSequence.cpp:515
FNativeDelegateTweenSequence OnLoop
Definition QuickTweenSequence.h:291
virtual void Update(float deltaTime) override
Definition QuickTweenSequence.cpp:124
virtual int32 GetLoops() const override
Definition QuickTweenSequence.h:173
void AssignOnUpdateEvent(FDynamicDelegateTweenSequence callback)
Definition QuickTweenSequence.cpp:500
FNativeDelegateTweenSequence OnKilled
Definition QuickTweenSequence.h:288
void RemoveAllOnUpdateEvent(const UObject *object)
Definition QuickTweenSequence.cpp:525
virtual void SetOwner(UQuickTweenable *owner) override
Definition QuickTweenSequence.h:117
FNativeDelegateTweenSequence OnStart
Definition QuickTweenSequence.h:279
virtual void Restart() override
Definition QuickTweenSequence.cpp:411
virtual FString GetTweenTag() const override
Definition QuickTweenSequence.h:179
virtual bool GetIsPendingKill() const override
Definition QuickTweenSequence.h:139
FNativeDelegateTweenSequence OnUpdate
Definition QuickTweenSequence.h:282
virtual void Evaluate(const FQuickTweenEvaluatePayload &payload, const UQuickTweenable *instigator) override
Definition QuickTweenSequence.cpp:172
void RemoveAllOnStartEvent(const UObject *object)
Definition QuickTweenSequence.cpp:520
virtual float GetElapsedTime() const override
Definition QuickTweenSequence.h:171
virtual UCurveFloat * GetEaseCurve() const override
Definition QuickTweenSequence.h:154
virtual void Reverse() override
Definition QuickTweenSequence.cpp:404
int32 GetNumTweens() const
Definition QuickTweenSequence.cpp:356
virtual bool GetAutoKill() const override
Definition QuickTweenSequence.h:156
Definition QuickTweenable.h:24
Definition CommonValues.h:52
Definition QuickTweenSequence.h:26
TArray< UQuickTweenable * > Tweens
Definition QuickTweenSequence.h:31
float StartTime
Definition QuickTweenSequence.h:34
float Duration
Definition QuickTweenSequence.h:37