UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GameplayTask.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2#pragma once
3
4#include "CoreMinimal.h"
6#include "UObject/Object.h"
12#include "GameplayTaskTypes.h"
13#include "GameplayTask.generated.h"
14
15class AActor;
17class UGameplayTasksComponent;
18
20
21UENUM()
30
31UENUM()
43
44USTRUCT(BlueprintType)
46{
48
51
52 enum
53 {
54 MaxResources = sizeof(FFlagContainer)* 8
55 };
56
57private:
58 FFlagContainer Flags;
59
60public:
64
66 {
67 return Flags;
68 }
69 bool IsEmpty() const
70 {
71 return Flags == 0;
72 }
74 {
75 ensure(ResourceID < MaxResources);
76 Flags |= (1 << ResourceID);
77 return *this;
78 }
80 {
81 ensure(ResourceID < MaxResources);
82 Flags &= ~(1 << ResourceID);
83 return *this;
84 }
85 bool HasID(uint8 ResourceID) const
86 {
87 ensure(ResourceID < MaxResources);
88 return (Flags & (1 << ResourceID)) != 0;
89 }
91 {
92 Flags |= Other.Flags;
93 return *this;
94 }
96 {
97 Flags &= ~Other.Flags;
98 return *this;
99 }
100 void Clear()
101 {
103 }
105 {
106 return (Flags & Other.Flags) == Other.Flags;
107 }
109 {
110 return (Flags & Other.Flags) != 0;
111 }
120
122 {
123 return Flags == Other.Flags;
124 }
125
127 {
128 return Flags != Other.Flags;
129 }
130
135
140
141 GAMEPLAYTASKS_API FString GetDebugDescription() const;
142};
143
144UCLASS(Abstract, BlueprintType, meta = (ExposedAsyncProxy=AsyncTask), config = Game, MinimalAPI)
146{
148
149public:
150
152
154
156 UFUNCTION(BlueprintCallable, meta = (BlueprintInternalUseOnly = "true"), Category = "Gameplay Tasks")
157 GAMEPLAYTASKS_API void ReadyForActivation();
158
163
166
167public:
168 GAMEPLAYTASKS_API virtual void InitSimulatedTask(UGameplayTasksComponent& InGameplayTasksComponent);
169
171 virtual void TickTask(float DeltaTime) {}
172
174 GAMEPLAYTASKS_API virtual void ExternalConfirm(bool bEndTask);
175
177 GAMEPLAYTASKS_API virtual void ExternalCancel();
178
180 void MarkOwnerFinished() { bOwnerFinished = true; }
181
183 GAMEPLAYTASKS_API virtual FString GetDebugString() const;
184
186 GAMEPLAYTASKS_API virtual UWorld* GetWorld() const override;
187
189 GAMEPLAYTASKS_API AActor* GetOwnerActor() const;
190
192 GAMEPLAYTASKS_API AActor* GetAvatarActor() const;
193
195 template <class T>
196 inline static T* NewTask(UObject* WorldContextObject, FName InstanceName = FName())
197 {
198 return WorldContextObject != nullptr ? NewTask<T>(*WorldContextObject, InstanceName) : nullptr;
199 }
200
201 template <class T>
202 inline static T* NewTask(TScriptInterface<IGameplayTaskOwnerInterface> TaskOwner, FName InstanceName = FName())
203 {
204 return TaskOwner.GetInterface() != nullptr ? NewTask<T>(*TaskOwner, InstanceName) : nullptr;
205 }
206
207 template <class T>
208 inline static T* NewTask(UObject& WorldContextObject, FName InstanceName = FName());
209
210 template <class T>
211 inline static T* NewTask(IGameplayTaskOwnerInterface& TaskOwner, FName InstanceName = FName());
212
215 template <class T>
216 inline static T* NewTaskUninitialized()
217 {
218 return NewObject<T>();
219 }
220
222 GAMEPLAYTASKS_API void TaskOwnerEnded();
223
228 UFUNCTION(BlueprintCallable, Category="GameplayTasks")
229 GAMEPLAYTASKS_API void EndTask();
230
231 virtual bool IsSupportedForNetworking() const override { return bSimulatedTask; }
232
233 inline FName GetInstanceName() const { return InstanceName; }
234 inline bool IsTickingTask() const { return (bTickingTask != 0); }
235 inline bool IsSimulatedTask() const { return (bSimulatedTask != 0); }
236 inline bool IsSimulating() const { return (bIsSimulating != 0); }
237 inline bool IsPausable() const { return (bIsPausable != 0); }
238 inline bool HasOwnerFinished() const { return (bOwnerFinished != 0); }
239 inline uint8 GetPriority() const { return Priority; }
240 inline bool RequiresPriorityOrResourceManagement() const { return bCaresAboutPriority == true || RequiredResources.IsEmpty() == false || ClaimedResources.IsEmpty() == false; }
241 inline FGameplayResourceSet GetRequiredResources() const { return RequiredResources; }
242 inline FGameplayResourceSet GetClaimedResources() const { return ClaimedResources; }
243
244 inline EGameplayTaskState GetState() const { return TaskState; }
245 inline bool IsActive() const { return (TaskState == EGameplayTaskState::Active); }
246 inline bool IsPaused() const { return (TaskState == EGameplayTaskState::Paused); }
247 inline bool IsFinished() const { return (TaskState == EGameplayTaskState::Finished); }
248
249 UGameplayTask* GetChildTask() const { return ChildTask; }
250 IGameplayTaskOwnerInterface* GetTaskOwner() const { return TaskOwner.IsValid() ? &(*TaskOwner) : nullptr; }
251 UGameplayTasksComponent* GetGameplayTasksComponent() { return TasksComponent.Get(); }
252 UGameplayTasksComponent* GetGameplayTasksComponent() const { return TasksComponent.Get(); }
253 bool IsOwnedByTasksComponent() const { return bOwnedByTasksComponent; }
254
255 template <class T>
257 {
258 AddRequiredResource(T::StaticClass());
259 }
260
261 template <class T>
262 inline void AddClaimedResource()
263 {
264 AddClaimedResource(T::StaticClass());
265 }
266
276
282
283 ETaskResourceOverlapPolicy GetResourceOverlapPolicy() const { return ResourceOverlapPolicy; }
284
285 virtual bool IsWaitingOnRemotePlayerdata() const { return false; }
286
287 virtual bool IsWaitingOnAvatar() const { return false; }
288
289protected:
295 GAMEPLAYTASKS_API virtual void OnDestroy(bool bInOwnerFinished);
296
299
300 // protected by design. Not meant to be called outside from GameplayTaskComponent mechanics
301 GAMEPLAYTASKS_API virtual void Pause();
302 GAMEPLAYTASKS_API virtual void Resume();
303
304 // IGameplayTaskOwnerInterface BEGIN
305 GAMEPLAYTASKS_API virtual UGameplayTasksComponent* GetGameplayTasksComponent(const UGameplayTask& Task) const override;
306 GAMEPLAYTASKS_API virtual AActor* GetGameplayTaskOwner(const UGameplayTask* Task) const override;
307 GAMEPLAYTASKS_API virtual AActor* GetGameplayTaskAvatar(const UGameplayTask* Task) const override;
308 GAMEPLAYTASKS_API virtual uint8 GetGameplayTaskDefaultPriority() const override;
309 GAMEPLAYTASKS_API virtual void OnGameplayTaskInitialized(UGameplayTask& Task) override;
310 GAMEPLAYTASKS_API virtual void OnGameplayTaskDeactivated(UGameplayTask& Task) override;
311 // IGameplayTaskOwnerInterface END
312
314 GAMEPLAYTASKS_API virtual void RegisterReplicationFragments(UE::Net::FFragmentRegistrationContext& Context, UE::Net::EFragmentRegistrationFlags RegistrationFlags) override;
315
316private:
317 friend UGameplayTasksComponent;
318
319 GAMEPLAYTASKS_API void ActivateInTaskQueue();
320 GAMEPLAYTASKS_API void PauseInTaskQueue();
321
322 GAMEPLAYTASKS_API void PerformActivation();
323
324protected:
325
327 UPROPERTY()
328 FName InstanceName;
329
333
337
338 UPROPERTY(config)
339 ETaskResourceOverlapPolicy ResourceOverlapPolicy;
340
342 uint32 bTickingTask : 1;
343
345 uint32 bSimulatedTask : 1;
346
348 uint32 bIsSimulating : 1;
349
350 uint32 bIsPausable : 1;
351
352 uint32 bCaresAboutPriority : 1;
353
355 uint32 bOwnedByTasksComponent : 1;
356
357 uint32 bClaimRequiredResources : 1;
358
359 uint32 bOwnerFinished : 1;
360
362 FGameplayResourceSet RequiredResources;
363
367 FGameplayResourceSet ClaimedResources;
368
371
372 TWeakObjectPtr<UGameplayTasksComponent> TasksComponent;
373
375 UPROPERTY()
377
378#if WITH_GAMEPLAYTASK_DEBUG
379 mutable FString DebugDescription;
380public:
381 const FString& GetDebugDescription() const
382 {
383 if (DebugDescription.IsEmpty())
384 {
385 DebugDescription = GenerateDebugDescription();
386 }
387 return DebugDescription;
388 }
389 GAMEPLAYTASKS_API virtual FString GenerateDebugDescription() const;
390 GAMEPLAYTASKS_API FString GetTaskStateName() const;
391#endif // WITH_GAMEPLAYTASK_DEBUG
392};
393
394template <class T>
395T* UGameplayTask::NewTask(UObject& WorldContextObject, FName InstanceName)
396{
398 return (TaskOwner) ? NewTask<T>(*TaskOwner, InstanceName) : nullptr;
399}
400
401template <class T>
403{
404 T* MyObj = NewObject<T>();
405 MyObj->InstanceName = InstanceName;
406 MyObj->InitTask(TaskOwner, TaskOwner.GetGameplayTaskDefaultPriority());
407 return MyObj;
408}
409
410//For searching through lists of task instances
412{
417
418 bool operator()(const UGameplayTask* A) const
419 {
420 return (A && !A->GetInstanceName().IsNone() && A->GetInstanceName().IsValid() && (A->GetInstanceName() == InstanceName));
421 }
422
424};
425
426
441
#define ensure( InExpression)
Definition AssertionMacros.h:464
void AsyncTask(ENamedThreads::Type Thread, TUniqueFunction< void()> Function)
Definition Async.cpp:54
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
EGameplayTaskState
Definition GameplayTask.h:23
ETaskResourceOverlapPolicy
Definition GameplayTask.h:33
#define DECLARE_LOG_CATEGORY_EXTERN(CategoryName, DefaultVerbosity, CompileTimeVerbosity)
Definition LogMacros.h:361
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
#define GENERATED_USTRUCT_BODY(...)
Definition ObjectMacros.h:767
uint8_t uint8
Definition binka_ue_file_header.h:8
uint16_t uint16
Definition binka_ue_file_header.h:7
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Actor.h:257
Definition NameTypes.h:617
Definition UObjectGlobals.h:1292
Definition GameplayTaskOwnerInterface.h:21
Definition Array.h:670
Definition ScriptInterface.h:139
UE_FORCEINLINE_HINT InInterfaceType * GetInterface() const
Definition ScriptInterface.h:335
Definition SubclassOf.h:30
Definition ReplicationFragment.h:244
Definition GameplayTaskResource.h:15
Definition GameplayTask.h:146
bool IsOwnedByTasksComponent() const
Definition GameplayTask.h:253
FGameplayResourceSet GetClaimedResources() const
Definition GameplayTask.h:242
static T * NewTask(UObject *WorldContextObject, FName InstanceName=FName())
Definition GameplayTask.h:196
FName GetInstanceName() const
Definition GameplayTask.h:233
UGameplayTask * GetChildTask() const
Definition GameplayTask.h:249
IGameplayTaskOwnerInterface * GetTaskOwner() const
Definition GameplayTask.h:250
ETaskResourceOverlapPolicy GetResourceOverlapPolicy() const
Definition GameplayTask.h:283
UGameplayTasksComponent * GetGameplayTasksComponent() const
Definition GameplayTask.h:252
void MarkOwnerFinished()
Definition GameplayTask.h:180
bool IsActive() const
Definition GameplayTask.h:245
bool IsPaused() const
Definition GameplayTask.h:246
EGameplayTaskState GetState() const
Definition GameplayTask.h:244
virtual bool IsWaitingOnRemotePlayerdata() const
Definition GameplayTask.h:285
bool IsSimulating() const
Definition GameplayTask.h:236
FName InstanceName
Definition GameplayTask.h:328
bool HasOwnerFinished() const
Definition GameplayTask.h:238
TWeakInterfacePtr< IGameplayTaskOwnerInterface > TaskOwner
Definition GameplayTask.h:370
static T * NewTask(TScriptInterface< IGameplayTaskOwnerInterface > TaskOwner, FName InstanceName=FName())
Definition GameplayTask.h:202
bool IsSimulatedTask() const
Definition GameplayTask.h:235
FGameplayResourceSet GetRequiredResources() const
Definition GameplayTask.h:241
virtual bool IsWaitingOnAvatar() const
Definition GameplayTask.h:287
bool IsFinished() const
Definition GameplayTask.h:247
UGameplayTasksComponent * GetGameplayTasksComponent()
Definition GameplayTask.h:251
static T * NewTaskUninitialized()
Definition GameplayTask.h:216
bool IsTickingTask() const
Definition GameplayTask.h:234
void AddRequiredResource()
Definition GameplayTask.h:256
void AddClaimedResource()
Definition GameplayTask.h:262
DECLARE_DYNAMIC_MULTICAST_DELEGATE(FGenericGameplayTaskDelegate)
bool RequiresPriorityOrResourceManagement() const
Definition GameplayTask.h:240
uint8 GetPriority() const
Definition GameplayTask.h:239
static GAMEPLAYTASKS_API IGameplayTaskOwnerInterface * ConvertToTaskOwner(UObject &OwnerObject)
Definition GameplayTask.cpp:30
bool IsPausable() const
Definition GameplayTask.h:237
Definition Object.h:95
Definition World.h:918
EFragmentRegistrationFlags
Definition ReplicationFragment.h:220
Definition GameplayTask.h:46
static FGameplayResourceSet AllResources()
Definition GameplayTask.h:131
bool IsEmpty() const
Definition GameplayTask.h:69
FFlagContainer GetFlags() const
Definition GameplayTask.h:65
FGameplayResourceSet & RemoveSet(FGameplayResourceSet Other)
Definition GameplayTask.h:95
FGameplayResourceSet & RemoveID(uint8 ResourceID)
Definition GameplayTask.h:79
FGameplayResourceSet GetDifference(FGameplayResourceSet Other) const
Definition GameplayTask.h:116
uint8 FResourceID
Definition GameplayTask.h:50
bool HasID(uint8 ResourceID) const
Definition GameplayTask.h:85
FGameplayResourceSet & AddSet(FGameplayResourceSet Other)
Definition GameplayTask.h:90
bool HasAnyID(FGameplayResourceSet Other) const
Definition GameplayTask.h:108
FGameplayResourceSet GetOverlap(FGameplayResourceSet Other) const
Definition GameplayTask.h:112
uint16 FFlagContainer
Definition GameplayTask.h:49
void Clear()
Definition GameplayTask.h:100
bool operator!=(const FGameplayResourceSet &Other) const
Definition GameplayTask.h:126
bool HasAllIDs(FGameplayResourceSet Other) const
Definition GameplayTask.h:104
static FGameplayResourceSet NoResources()
Definition GameplayTask.h:136
bool operator==(const FGameplayResourceSet &Other) const
Definition GameplayTask.h:121
FGameplayResourceSet(FFlagContainer InFlags=0)
Definition GameplayTask.h:62
FGameplayResourceSet & AddID(uint8 ResourceID)
Definition GameplayTask.h:73
Definition GameplayTask.h:428
bool operator()(const UGameplayTask *A) const
Definition GameplayTask.h:434
TSubclassOf< UGameplayTask > TaskClass
Definition GameplayTask.h:439
FGameplayTaskInstanceClassPredicate(TSubclassOf< UGameplayTask > Class)
Definition GameplayTask.h:429
Definition GameplayTask.h:412
FName InstanceName
Definition GameplayTask.h:423
bool operator()(const UGameplayTask *A) const
Definition GameplayTask.h:418
FGameplayTaskInstanceNamePredicate(FName DesiredInstanceName)
Definition GameplayTask.h:413
Definition ObjectPtr.h:488
Definition WeakInterfacePtr.h:18
Definition WeakObjectPtrTemplates.h:25