QuickTween 1.4.1
Loading...
Searching...
No Matches
QuickTweenBase.h
1// Copyright 2025 Juan Pablo Hernandez Mosti. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
6#include "CommonValues.h"
7#include "QuickTweenable.h"
8#include "../Utils/EaseType.h"
9#include "../Utils/LoopType.h"
10#include "QuickTweenBase.generated.h"
11
13class UQuickTweenBase;
14
15DEFINE_LOG_CATEGORY_STATIC(LogQuickTweenBase, Log, All);
16
17DECLARE_MULTICAST_DELEGATE_OneParam(FNativeDelegateTween, UQuickTweenBase*);
18DECLARE_DYNAMIC_DELEGATE_OneParam(FDynamicDelegateTween, UQuickTweenBase*, Tween);
19
24UCLASS(Blueprintable, BlueprintType, Abstract)
25class QUICKTWEEN_API UQuickTweenBase : public UQuickTweenable
26{
27 GENERATED_BODY()
28public:
29 virtual ~UQuickTweenBase();
30#pragma region Tween Creation
45 void SetUp(
46 const UObject* worldContextObject,
47 float duration,
48 float timeScale,
49 EEaseType easeType,
50 UCurveFloat* easeCurve,
51 int32 loops,
52 ELoopType loopType,
53 const FString& tweenTag = FString(),
54 bool bShouldAutoKill = true,
55 bool bShouldPlayWhilePaused = false,
56 bool bShouldAutoPlay = false);
57
58 virtual void SetOwner(UQuickTweenable* owner) override { Owner = owner; }
59
60#pragma endregion
61
62#pragma region Tween Control
63public:
64
65 virtual void Play() override;
66
67 virtual void Pause() override;
68
69 virtual void Reverse() override;
70
71 virtual void Restart() override;
72
73 virtual void Complete(bool bSnapToEnd = true) override;
74
75 virtual void Kill() override;
76
77 virtual void Update(float deltaTime) override;
78
79 virtual void Evaluate(const FQuickTweenEvaluatePayload& payload, const UQuickTweenable* instigator) override;
80
81#pragma endregion
82
83#pragma region Tween State Queries
84public:
85
86 [[nodiscard]] virtual bool GetIsPendingKill() const override { return TweenState == EQuickTweenState::Kill; }
87
88 [[nodiscard]] virtual float GetLoopDuration() const override { return Duration;}
89
90 [[nodiscard]] virtual float GetTotalDuration() const override
91 {
92 if (Loops == INFINITE_LOOPS)
93 {
94 return TNumericLimits<float>::Max();
95 }
96 return GetLoopDuration() * GetLoops() / GetTimeScale();
97 }
98
99 [[nodiscard]] virtual float GetElapsedTime() const override { return ElapsedTime; }
100
101 [[nodiscard]] virtual float GetTimeScale() const override { return TimeScale; }
102
103 [[nodiscard]] virtual bool GetIsPlaying() const override { return TweenState == EQuickTweenState::Play; }
104
105 [[nodiscard]] virtual bool GetIsCompleted() const override { return TweenState == EQuickTweenState::Complete; }
106
107 [[nodiscard]] virtual bool GetIsReversed() const override { return bIsReversed; }
108
109 [[nodiscard]] virtual EEaseType GetEaseType() const override { return EaseType; }
110
111 [[nodiscard]] virtual UCurveFloat* GetEaseCurve() const override { return EaseCurve; }
112
113 [[nodiscard]] virtual int32 GetLoops() const override{ return Loops; }
114
115 [[nodiscard]] virtual ELoopType GetLoopType() const override { return LoopType; }
116
117 [[nodiscard]] virtual FString GetTweenTag() const override { return TweenTag; }
118
119 [[nodiscard]] virtual int32 GetCurrentLoop() const override { return CurrentLoop; }
120
121 [[nodiscard]] virtual bool GetAutoKill() const override { return bAutoKill; }
122
123 [[nodiscard]] virtual bool GetShouldPlayWhilePaused() const override {return bPlayWhilePaused;}
124
125 [[nodiscard]] bool GetSnapToEndOnComplete() const { return bSnapToEndOnComplete; }
126#pragma endregion
127
128 bool InstigatorIsOwner(const UQuickTweenable* instigator) const { return instigator == Owner; }
129
130 bool HasOwner() const { return Owner != nullptr; }
131
137 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
138 void AssignOnStartEvent(FDynamicDelegateTween callback);
139
145 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
146 void AssignOnUpdateEvent(FDynamicDelegateTween callback);
147
153 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
154 void AssignOnCompleteEvent(FDynamicDelegateTween callback);
155
161 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
162 void AssignOnKilledEvent(FDynamicDelegateTween callback);
163
169 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
170 void AssignOnLoopEvent(FDynamicDelegateTween callback);
171
176 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
177 void RemoveAllOnStartEvent(const UObject* object);
178
183 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
184 void RemoveAllOnUpdateEvent(const UObject* object);
185
190 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
191 void RemoveAllOnCompleteEvent(const UObject* object);
192
197 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
198 void RemoveAllOnKilledEvent(const UObject* object);
199
204 UFUNCTION(BlueprintCallable, meta = (Keywords = "Tween | Event"), Category = "Tween|Info")
205 void RemoveAllOnLoopEvent(const UObject* object);
206
208 FNativeDelegateTween OnStart;
209
211 FNativeDelegateTween OnUpdate;
212
214 FNativeDelegateTween OnComplete;
215
217 FNativeDelegateTween OnKilled;
218
220 FNativeDelegateTween OnLoop;
221
222protected:
223
228 virtual void ApplyAlphaValue(float alpha);
229
237 virtual void HandleOnStart();
238
243 virtual void HandleOnComplete();
244
251 virtual void HandleOnKill();
252private:
253
254 struct FQuickTweenStateResult
255 {
256 int32 Loop = 0;
257 float Alpha = 0.0f;
258 };
259
260
269 FQuickTweenStateResult ComputeTweenState(float time) const;
270
279 bool RequestStateTransition(EQuickTweenState newState);
280
282 EQuickTweenState TweenState = EQuickTweenState::Idle;
283
285 float ElapsedTime = 0.0f;
286
288 float Duration = 0.0f;
289
291 float TimeScale = 1.0f;
292
294 bool bIsReversed = false;
295
297 bool bWasActive = false;
298
300 bool bSnapToEndOnComplete = true;
301
303 bool bTriggerEvents = true;
304
306 EEaseType EaseType = EEaseType::Linear;
307
309 UPROPERTY(Transient)
310 UCurveFloat* EaseCurve = nullptr;
311
313 int32 CurrentLoop = 0;
314
316 int32 Loops = -1;
317
319 ELoopType LoopType = ELoopType::Restart;
320
322 FString TweenTag = FString();
323
325 UPROPERTY()
326 UQuickTweenable* Owner = nullptr;
327
329 bool bAutoKill = true;
330
332 bool bPlayWhilePaused = false;
333
334 UPROPERTY()
335 const UObject* WorldContextObject = nullptr;
336};
Definition QuickTweenBase.h:26
void AssignOnStartEvent(FDynamicDelegateTween callback)
Definition QuickTweenBase.cpp:308
virtual FString GetTweenTag() const override
Definition QuickTweenBase.h:117
virtual void Reverse() override
Definition QuickTweenBase.cpp:226
void RemoveAllOnKilledEvent(const UObject *object)
Definition QuickTweenBase.cpp:348
virtual int32 GetCurrentLoop() const override
Definition QuickTweenBase.h:119
virtual int32 GetLoops() const override
Definition QuickTweenBase.h:113
virtual bool GetIsPendingKill() const override
Definition QuickTweenBase.h:86
FNativeDelegateTween OnComplete
Definition QuickTweenBase.h:214
virtual bool GetShouldPlayWhilePaused() const override
Definition QuickTweenBase.h:123
virtual void SetOwner(UQuickTweenable *owner) override
Definition QuickTweenBase.h:58
virtual bool GetIsCompleted() const override
Definition QuickTweenBase.h:105
void RemoveAllOnStartEvent(const UObject *object)
Definition QuickTweenBase.cpp:333
virtual void Evaluate(const FQuickTweenEvaluatePayload &payload, const UQuickTweenable *instigator) override
Definition QuickTweenBase.cpp:108
virtual float GetElapsedTime() const override
Definition QuickTweenBase.h:99
virtual EEaseType GetEaseType() const override
Definition QuickTweenBase.h:109
FNativeDelegateTween OnKilled
Definition QuickTweenBase.h:217
FNativeDelegateTween OnUpdate
Definition QuickTweenBase.h:211
virtual void HandleOnStart()
Definition QuickTweenBase.cpp:282
void AssignOnKilledEvent(FDynamicDelegateTween callback)
Definition QuickTweenBase.cpp:323
void RemoveAllOnLoopEvent(const UObject *object)
Definition QuickTweenBase.cpp:353
void AssignOnUpdateEvent(FDynamicDelegateTween callback)
Definition QuickTweenBase.cpp:313
virtual void Play() override
Definition QuickTweenBase.cpp:203
virtual void HandleOnKill()
Definition QuickTweenBase.cpp:300
FNativeDelegateTween OnStart
Definition QuickTweenBase.h:208
virtual void ApplyAlphaValue(float alpha)
Definition QuickTweenBase.cpp:198
virtual void Complete(bool bSnapToEnd=true) override
Definition QuickTweenBase.cpp:240
FNativeDelegateTween OnLoop
Definition QuickTweenBase.h:220
void AssignOnLoopEvent(FDynamicDelegateTween callback)
Definition QuickTweenBase.cpp:328
virtual UCurveFloat * GetEaseCurve() const override
Definition QuickTweenBase.h:111
virtual void Restart() override
Definition QuickTweenBase.cpp:233
virtual void Kill() override
Definition QuickTweenBase.cpp:258
virtual void Update(float deltaTime) override
Definition QuickTweenBase.cpp:65
virtual ELoopType GetLoopType() const override
Definition QuickTweenBase.h:115
virtual void HandleOnComplete()
Definition QuickTweenBase.cpp:290
virtual float GetTimeScale() const override
Definition QuickTweenBase.h:101
virtual bool GetAutoKill() const override
Definition QuickTweenBase.h:121
virtual bool GetIsPlaying() const override
Definition QuickTweenBase.h:103
void RemoveAllOnCompleteEvent(const UObject *object)
Definition QuickTweenBase.cpp:343
virtual void Pause() override
Definition QuickTweenBase.cpp:219
void SetUp(const UObject *worldContextObject, float duration, float timeScale, EEaseType easeType, UCurveFloat *easeCurve, int32 loops, ELoopType loopType, const FString &tweenTag=FString(), bool bShouldAutoKill=true, bool bShouldPlayWhilePaused=false, bool bShouldAutoPlay=false)
Definition QuickTweenBase.cpp:20
virtual bool GetIsReversed() const override
Definition QuickTweenBase.h:107
void RemoveAllOnUpdateEvent(const UObject *object)
Definition QuickTweenBase.cpp:338
virtual float GetLoopDuration() const override
Definition QuickTweenBase.h:88
virtual float GetTotalDuration() const override
Definition QuickTweenBase.h:90
void AssignOnCompleteEvent(FDynamicDelegateTween callback)
Definition QuickTweenBase.cpp:318
Definition QuickTweenSequence.h:49
Definition QuickTweenable.h:24
Definition CommonValues.h:52