UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
GameplayTagsManager.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
6#include "CoreMinimal.h"
7#include "Stats/Stats.h"
9#include "UObject/Object.h"
12#include "Engine/DataTable.h"
13#include "Templates/UniquePtr.h"
14#include "Misc/ScopeLock.h"
16#if WITH_EDITOR
17#include "Hash/Blake3.h"
18#endif
19
20#include "GameplayTagsManager.generated.h"
21
25
26#if WITH_EDITOR
27namespace UE::Cook { class FCookDependency; }
28namespace UE::Cook { class ICookInfo; }
29#endif
30
32USTRUCT()
34{
36
37
38 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=GameplayTag)
40
42 UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=GameplayTag)
43 FString DevComment;
44
47 FGameplayTagTableRow(FName InTag, const FString& InDevComment = TEXT("")) : Tag(InTag), DevComment(InDevComment) {}
49
52 GAMEPLAYTAGS_API bool operator==(FGameplayTagTableRow const& Other) const;
55};
56
58USTRUCT()
77
78UENUM()
80{
81 Native, // Was added from C++ code
82 DefaultTagList, // The default tag list in DefaultGameplayTags.ini
83 TagList, // Another tag list from an ini in tags/*.ini
84 RestrictedTagList, // Restricted tags from an ini
85 DataTable, // From a DataTable
86 Invalid, // Not a real source
87};
88
89UENUM()
97
99USTRUCT()
101{
103
104
105 UPROPERTY()
106 FName SourceName;
107
109 UPROPERTY()
111
113 UPROPERTY()
114 TObjectPtr<class UGameplayTagsList> SourceTagList;
115
117 UPROPERTY()
118 TObjectPtr<class URestrictedGameplayTagsList> SourceRestrictedTagList;
119
121 : SourceName(NAME_None), SourceType(EGameplayTagSourceType::Invalid), SourceTagList(nullptr), SourceRestrictedTagList(nullptr)
122 {
123 }
124
129
131 GAMEPLAYTAGS_API FString GetConfigFileName() const;
132
133 static GAMEPLAYTAGS_API FName GetNativeName();
134
135 static GAMEPLAYTAGS_API FName GetDefaultName();
136
137#if WITH_EDITOR
139
141
143#endif
144};
145
148{
151
154
156 bool bWasSearched = false;
157
159 bool bWasAddedToTree = false;
160
161 inline void Reset()
162 {
165 bWasSearched = false;
166 bWasAddedToTree = false;
167 }
168
169 inline bool IsValid()
170 {
172 }
173};
174
176USTRUCT()
178{
181
184
186 inline const FGameplayTagContainer& GetSingleTagContainer() const { return CompleteTagWithParents; }
187
193 inline const FGameplayTag& GetCompleteTag() const { return CompleteTagWithParents.Num() > 0 ? CompleteTagWithParents.GameplayTags[0] : FGameplayTag::EmptyTag; }
194 inline FName GetCompleteTagName() const { return GetCompleteTag().GetTagName(); }
195 inline FString GetCompleteTagString() const { return GetCompleteTag().ToString(); }
196
202 inline FName GetSimpleTagName() const { return Tag; }
203
210
216 inline const TArray< TSharedPtr<FGameplayTagNode> >& GetChildTagNodes() const { return ChildTags; }
217
223 inline TSharedPtr<FGameplayTagNode> GetParentTagNode() const { return ParentNode; }
224
230 inline FGameplayTagNetIndex GetNetIndex() const { check(NetIndex != INVALID_TAGNETINDEX); return NetIndex; }
231
233 GAMEPLAYTAGS_API void ResetNode();
234
236 inline bool IsExplicitTag() const {
237#if WITH_EDITORONLY_DATA
238 return bIsExplicitTag;
239#else
240 return true;
241#endif
242 }
243
245 inline bool GetAllowNonRestrictedChildren() const {
246#if WITH_EDITORONLY_DATA
247 return bAllowNonRestrictedChildren;
248#else
249 return true;
250#endif
251 }
252
254 inline bool IsRestrictedGameplayTag() const {
255#if WITH_EDITORONLY_DATA
256 return bIsRestrictedTag;
257#else
258 return true;
259#endif
260 }
261
262#if WITH_EDITORONLY_DATA
263 FName GetFirstSourceName() const { return SourceNames.Num() == 0 ? NAME_None : SourceNames[0]; }
264 const TArray<FName>& GetAllSourceNames() const { return SourceNames; }
265#endif
266
267#if WITH_EDITORONLY_DATA
269 FString GetDevComment() const { return DevComment; }
270#endif
271
272#if WITH_EDITOR
277 GAMEPLAYTAGS_API void Hash(FBlake3& Hasher);
278#endif
279
280private:
282 FName Tag;
283
285 FGameplayTagContainer CompleteTagWithParents;
286
289
292
294 FGameplayTagNetIndex NetIndex;
295
296#if WITH_EDITORONLY_DATA
299
301 FString DevComment;
302
305
307 uint8 bAllowNonRestrictedChildren : 1;
308
311
314
317
320#endif
321
323 friend class SGameplayTagWidget;
324 friend class SGameplayTagPicker;
325};
326
328UCLASS(config=Engine, MinimalAPI)
330{
332
333
335
337 inline static UGameplayTagsManager& Get()
338 {
339 if (SingletonManager == nullptr)
340 {
341 InitializeManager();
342 }
343
344 return *SingletonManager;
345 }
346
348 inline static UGameplayTagsManager* GetIfAllocated() { return SingletonManager; }
349
358 GAMEPLAYTAGS_API void RequestGameplayTagContainer(const TArray<FString>& TagStrings, FGameplayTagContainer& OutTagsContainer, bool bErrorIfNotFound=true) const;
359
368 GAMEPLAYTAGS_API FGameplayTag RequestGameplayTag(FName TagName, bool ErrorIfNotFound=true) const;
369
377 GAMEPLAYTAGS_API bool IsValidGameplayTagString(const TCHAR* TagString, FText* OutError = nullptr, FString* OutFixedString = nullptr);
378 GAMEPLAYTAGS_API bool IsValidGameplayTagString(const FString& TagString, FText* OutError = nullptr, FString* OutFixedString = nullptr);
379 GAMEPLAYTAGS_API bool IsValidGameplayTagString(const FStringView& TagString, FText* OutError = nullptr, FStringBuilderBase* OutFixedString = nullptr);
380
385 GAMEPLAYTAGS_API FGameplayTag FindGameplayTagFromPartialString_Slow(FString PartialString) const;
386
396 GAMEPLAYTAGS_API FGameplayTag AddNativeGameplayTag(FName TagName, const FString& TagDevComment = TEXT("(Native)"));
397
398private:
399 // Only callable from FNativeGameplayTag, these functions do less error checking and can happen after initial tag loading is done
400 GAMEPLAYTAGS_API void AddNativeGameplayTag(FNativeGameplayTag* TagSource);
401 GAMEPLAYTAGS_API void RemoveNativeGameplayTag(const FNativeGameplayTag* TagSource);
402
403public:
405 GAMEPLAYTAGS_API void DoneAddingNativeTags();
406
408 static GAMEPLAYTAGS_API FSimpleMulticastDelegate& OnLastChanceToAddNativeTags();
409
415 GAMEPLAYTAGS_API FDelegateHandle CallOrRegister_OnDoneAddingNativeTagsDelegate(const FSimpleMulticastDelegate::FDelegate& Delegate) const;
416
426 GAMEPLAYTAGS_API FGameplayTagContainer RequestGameplayTagParents(const FGameplayTag& GameplayTag) const;
427
439
447 GAMEPLAYTAGS_API FGameplayTagContainer RequestGameplayTagChildren(const FGameplayTag& GameplayTag) const;
448
450 GAMEPLAYTAGS_API FGameplayTag RequestGameplayTagDirectParent(const FGameplayTag& GameplayTag) const;
451
452 UE_DEPRECATED(5.4, "This function is not threadsafe, use FindTagNode or FGameplayTag::GetSingleTagContainer")
453 inline const FGameplayTagContainer* GetSingleTagContainer(const FGameplayTag& GameplayTag) const
454 {
455 return GetSingleTagContainerPtr(GameplayTag);
456 }
457
466 {
467 UE::TScopeLock Lock(GameplayTagMapCritical);
468
469 const TSharedPtr<FGameplayTagNode>* Node = GameplayTagNodeMap.Find(GameplayTag);
470
471 if (Node)
472 {
473 return *Node;
474 }
475#if WITH_EDITOR
476 // Check redirector
477 if (GIsEditor && GameplayTag.IsValid())
478 {
480
481 RedirectSingleGameplayTag(RedirectedTag, nullptr);
482
483 Node = GameplayTagNodeMap.Find(RedirectedTag);
484
485 if (Node)
486 {
487 return *Node;
488 }
489 }
490#endif
491 return nullptr;
492 }
493
502 {
503 FGameplayTag PossibleTag(TagName);
504 return FindTagNode(PossibleTag);
505 }
506
508 GAMEPLAYTAGS_API void LoadGameplayTagTables(bool bAllowAsyncLoad = false);
509
511 GAMEPLAYTAGS_API void AddTagIniSearchPath(const FString& RootDir, const TSet<FString>* PluginConfigsCache = nullptr);
512
514 GAMEPLAYTAGS_API bool RemoveTagIniSearchPath(const FString& RootDir);
515
517 GAMEPLAYTAGS_API void GetTagSourceSearchPaths(TArray<FString>& OutPaths);
518
520 GAMEPLAYTAGS_API int32 GetNumTagSourceSearchPaths();
521
523 GAMEPLAYTAGS_API void ConstructGameplayTagTree();
524
526 GAMEPLAYTAGS_API void DestroyGameplayTagTree();
527
529 GAMEPLAYTAGS_API void SplitGameplayTagFName(const FGameplayTag& Tag, TArray<FName>& OutNames) const;
530
532 GAMEPLAYTAGS_API void RequestAllGameplayTags(FGameplayTagContainer& TagContainer, bool OnlyIncludeDictionaryTags) const;
533
535 GAMEPLAYTAGS_API bool ValidateTagCreation(FName TagName) const;
536
538 GAMEPLAYTAGS_API const FGameplayTagSource* FindTagSource(FName TagSourceName) const;
539
542
545
547
556 GAMEPLAYTAGS_API int32 GameplayTagsMatchDepth(const FGameplayTag& GameplayTagOne, const FGameplayTag& GameplayTagTwo) const;
557
562 GAMEPLAYTAGS_API int32 GetNumberOfTagNodes(const FGameplayTag& GameplayTag) const;
563
565 GAMEPLAYTAGS_API bool ShouldImportTagsFromINI() const;
566
569 {
570 return bShouldWarnOnInvalidTags;
571 }
572
574 UE_DEPRECATED(5.5, "We should never clear invalid tags as we're not guaranteed the required plugin has loaded")
575 bool ShouldClearInvalidTags() const
576 {
577 return false;
578 }
579
582 {
583 return bUseFastReplication;
584 }
585
588 {
589 return !bUseFastReplication && bUseDynamicReplication;
590 }
591
593 GAMEPLAYTAGS_API bool ShouldUnloadTags() const;
594
596 GAMEPLAYTAGS_API void SetShouldUnloadTagsOverride(bool bShouldUnloadTags);
597
599 GAMEPLAYTAGS_API void ClearShouldUnloadTagsOverride();
600
602 GAMEPLAYTAGS_API void SetShouldDeferGameplayTagTreeRebuilds(bool bShouldDeferRebuilds);
603
605 GAMEPLAYTAGS_API void ClearShouldDeferGameplayTagTreeRebuilds(bool bRebuildTree);
606
608 uint32 GetNetworkGameplayTagNodeIndexHash() const { VerifyNetworkIndex(); return NetworkGameplayTagNodeIndexHash; }
609
611 GAMEPLAYTAGS_API void GetRestrictedTagConfigFiles(TArray<FString>& RestrictedConfigFiles) const;
612
614 GAMEPLAYTAGS_API void GetRestrictedTagSources(TArray<const FGameplayTagSource*>& Sources) const;
615
617 GAMEPLAYTAGS_API void GetOwnersForTagSource(const FString& SourceName, TArray<FString>& OutOwners) const;
618
620 GAMEPLAYTAGS_API void GameplayTagContainerLoaded(FGameplayTagContainer& Container, FProperty* SerializingProperty) const;
621
623 GAMEPLAYTAGS_API void SingleGameplayTagLoaded(FGameplayTag& Tag, FProperty* SerializingProperty) const;
624
626 GAMEPLAYTAGS_API void RedirectTagsForContainer(FGameplayTagContainer& Container, FProperty* SerializingProperty) const;
627
629 GAMEPLAYTAGS_API void RedirectSingleGameplayTag(FGameplayTag& Tag, FProperty* SerializingProperty) const;
630
632 GAMEPLAYTAGS_API bool ImportSingleGameplayTag(FGameplayTag& Tag, FName ImportedTagName, bool bImportFromSerialize = false) const;
633
635 GAMEPLAYTAGS_API FName GetTagNameFromNetIndex(FGameplayTagNetIndex Index) const;
636 GAMEPLAYTAGS_API FGameplayTagNetIndex GetNetIndexFromTag(const FGameplayTag &InTag) const;
637
639 int32 GetNetIndexTrueBitNum() const { VerifyNetworkIndex(); return NetIndexTrueBitNum; }
640
642 int32 GetNetIndexFirstBitSegment() const { VerifyNetworkIndex(); return NetIndexFirstBitSegment; }
643
645 FGameplayTagNetIndex GetInvalidTagNetIndex() const { VerifyNetworkIndex(); return InvalidTagNetIndex; }
646
647 const TArray<TSharedPtr<FGameplayTagNode>>& GetNetworkGameplayTagNodeIndex() const { VerifyNetworkIndex(); return NetworkGameplayTagNodeIndex; }
648
651
654
655 GAMEPLAYTAGS_API void PushDeferOnGameplayTagTreeChangedBroadcast();
656 GAMEPLAYTAGS_API void PopDeferOnGameplayTagTreeChangedBroadcast();
657
658private:
660 int32 NetIndexTrueBitNum;
661
663 int32 NetIndexFirstBitSegment;
664
666 FGameplayTagNetIndex InvalidTagNetIndex;
667
668public:
669
670#if WITH_EDITOR
673
676
679
681 template <typename TFieldType>
683 {
684 check(Field);
685 if (Field->HasMetaData(NAME_Categories))
686 {
687 return Field->GetMetaData(NAME_Categories);
688 }
689 else if (Field->HasMetaData(NAME_GameplayTagFilter))
690 {
691 return Field->GetMetaData(NAME_GameplayTagFilter);
692 }
693 return FString();
694 }
695
697 static GAMEPLAYTAGS_API FString GetCategoriesMetaFromFunction(const UFunction* Func, FName ParamName = NAME_None);
698
701
703 GAMEPLAYTAGS_API bool IsDictionaryTag(FName TagName) const;
704
707
710
713
716
719
722
725#if WITH_EDITORONLY_DATA
728#endif // WITH_EDITORONLY_DATA
729
730
733
737
739 DECLARE_MULTICAST_DELEGATE_ThreeParams(FOnFilterGameplayTagChildren, const FString& , TSharedPtr<FGameplayTagNode>& /* TagNode */, bool& /* OUT OutShouldHide */)
741
742 /*
743 * This is a container to filter out gameplay tags when they are invalid or when they don't meet the filter string
744 * If used from editor to filter out tags when picking them the FilterString is optional and the ReferencingPropertyHandle is required
745 * If used to validate an asset / assets you can provide the TagSourceAssets. The FilterString and ReferencingPropertyHandle is optional
746 */
748 {
749 const FString& FilterString;
754
757 {}
758
761 {}
762 };
763
764 /*
765 * Allows dynamic hiding of gameplay tags in SGameplayTagWidget. Allows higher order structs to dynamically change which tags are visible based on its own data
766 * Applies to all tags, and has more context than OnFilterGameplayTagChildren
767 */
770
772
774
781 GAMEPLAYTAGS_API UE::Cook::FCookDependency CreateCookDependency();
782
784 void DumpSources(FOutputDevice& Out) const;
785#endif //WITH_EDITOR
786
787 GAMEPLAYTAGS_API void PrintReplicationIndices();
788 int32 GetNumGameplayTagNodes() const { return GameplayTagNodeMap.Num(); }
789
790#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
793 GAMEPLAYTAGS_API void PrintReplicationFrequencyReport();
794 GAMEPLAYTAGS_API void NotifyTagReplicated(FGameplayTag Tag, bool WasInContainer);
795
799#endif
800
801private:
802
804 static GAMEPLAYTAGS_API void InitializeManager();
805
807 static GAMEPLAYTAGS_API FSimpleMulticastDelegate& OnDoneAddingNativeTagsDelegate();
808
810 static GAMEPLAYTAGS_API UGameplayTagsManager* SingletonManager;
811
812 friend class FGameplayTagTest;
813 friend class FGameplayEffectsTest;
815 friend class FGameplayTagsEditorModule;
817 friend class SAddNewGameplayTagSourceWidget;
818 friend class FNativeGameplayTag;
819
826 inline const FGameplayTagContainer* GetSingleTagContainerPtr(const FGameplayTag& GameplayTag) const
827 {
828 // Doing this with pointers to avoid a shared ptr reference count change
829 const TSharedPtr<FGameplayTagNode>* Node = GameplayTagNodeMap.Find(GameplayTag);
830
831 if (Node)
832 {
833 return &(*Node)->GetSingleTagContainer();
834 }
835#if WITH_EDITOR
836 // Check redirector
837 if (GIsEditor && GameplayTag.IsValid())
838 {
840
841 RedirectSingleGameplayTag(RedirectedTag, nullptr);
842
843 Node = GameplayTagNodeMap.Find(RedirectedTag);
844
845 if (Node)
846 {
847 return &(*Node)->GetSingleTagContainer();
848 }
849 }
850#endif
851 return nullptr;
852 }
853
854
870 GAMEPLAYTAGS_API int32 InsertTagIntoNodeArray(FName Tag, FName FullTag, TSharedPtr<FGameplayTagNode> ParentNode, TArray< TSharedPtr<FGameplayTagNode> >& NodeArray, FName SourceName, const FString& DevComment, bool bIsExplicitTag, bool bIsRestrictedTag, bool bAllowNonRestrictedChildren);
871
873 GAMEPLAYTAGS_API void PopulateTreeFromDataTable(class UDataTable* Table);
874
875 GAMEPLAYTAGS_API void AddTagTableRow(const FGameplayTagTableRow& TagRow, FName SourceName, bool bIsRestrictedTag = false);
876
878
879 GAMEPLAYTAGS_API void AddRestrictedGameplayTagSource(const FString& FileName);
880
881 GAMEPLAYTAGS_API void AddTagsFromAdditionalLooseIniFiles(const TArray<FString>& IniFileList);
882
891
893 GAMEPLAYTAGS_API FGameplayTagSource* FindOrAddTagSource(FName TagSourceName, EGameplayTagSourceType SourceType, const FString& RootDirToUse = FString());
894
896 GAMEPLAYTAGS_API void ConstructNetIndex();
897
899 GAMEPLAYTAGS_API void MarkChildrenOfNodeConflict(TSharedPtr<FGameplayTagNode> CurNode);
900
901 void VerifyNetworkIndex() const
902 {
903 if (!bUseFastReplication)
904 {
905 UE_LOG(LogGameplayTags, Warning, TEXT("%hs called when not using FastReplication (not rebuilding the fast replication cache)"), __func__);
906 }
907 else if (bNetworkIndexInvalidated)
908 {
909 const_cast<UGameplayTagsManager*>(this)->ConstructNetIndex();
910 }
911 }
912
913 void InvalidateNetworkIndex() { bNetworkIndexInvalidated = true; }
914
916 GAMEPLAYTAGS_API void BroadcastOnGameplayTagTreeChanged();
917
919 GAMEPLAYTAGS_API void HandleGameplayTagTreeChanged(bool bRecreateTree);
920
921#if WITH_EDITOR
922 void UpdateIncrementalCookHash(UE::Cook::ICookInfo& CookInfo);
923#endif
924
925 // Tag Sources
927
929 TSet<FName> LegacyNativeTags;
930
932 TMap<FString, FGameplayTagSearchPathInfo> RegisteredSearchPaths;
933
935 TSharedPtr<FGameplayTagNode> GameplayRootTag;
936
939
941 TArray<FGameplayTag> CommonlyReplicatedTags;
942
944 UPROPERTY()
945 TMap<FName, FGameplayTagSource> TagSources;
946
947 TSet<FName> RestrictedGameplayTagSourceNames;
948
949 bool bIsConstructingGameplayTagTree = false;
950
952 bool bUseFastReplication;
953
955 bool bUseDynamicReplication;
956
958 bool bShouldWarnOnInvalidTags;
959
961 bool bShouldAllowUnloadingTags;
962
964 TOptional<bool> ShouldAllowUnloadingTagsOverride;
965
967 TOptional<bool> ShouldDeferGameplayTagTreeRebuilds;
968
970 bool bDoneAddingNativeTags;
971
972 int32 bDeferBroadcastOnGameplayTagTreeChanged = 0;
973 bool bShouldBroadcastDeferredOnGameplayTagTreeChanged = false;
974
976 bool bNeedsTreeRebuildOnDoneAddingGameplayTags = false;
977
979 FString InvalidTagCharacters;
980
981 // This critical section is to handle an issue where tag requests come from another thread when async loading from a background thread in FGameplayTagContainer::Serialize.
982 // This class is not generically threadsafe, but this should be locked by any operation that could update something read by a background thread.
983 mutable FTransactionallySafeCriticalSection GameplayTagMapCritical;
984
985#if WITH_EDITOR
986 // Transient editor-only tags to support quick-iteration PIE workflows
988
991
993#endif //if WITH_EDITOR
994
996 TArray<TSharedPtr<FGameplayTagNode>> NetworkGameplayTagNodeIndex;
997
998 uint32 NetworkGameplayTagNodeIndexHash;
999
1000 bool bNetworkIndexInvalidated = true;
1001
1003 UPROPERTY()
1004 TArray<TObjectPtr<UDataTable>> GameplayTagTables;
1005
1006 GAMEPLAYTAGS_API const static FName NAME_Categories;
1007 GAMEPLAYTAGS_API const static FName NAME_GameplayTagFilter;
1008
1009 friend class UGameplayTagsManagerIncrementalCookFunctions;
1010};
#define check(expr)
Definition AssertionMacros.h:314
#define GIsEditor
Definition CoreGlobals.h:233
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::TCHAR TCHAR
Either ANSICHAR or WIDECHAR, depending on whether the platform supports wide characters or the requir...
Definition Platform.h:1135
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE_TwoParams(DelegateName, Param1Type, Param2Type)
Definition DelegateCombinations.h:58
#define DECLARE_MULTICAST_DELEGATE_ThreeParams(DelegateName, Param1Type, Param2Type, Param3Type)
Definition DelegateCombinations.h:67
#define INVALID_TAGNETINDEX
Definition GameplayTagContainer.h:37
uint16 FGameplayTagNetIndex
Definition GameplayTagContainer.h:36
EGameplayTagSourceType
Definition GameplayTagsManager.h:80
EGameplayTagSelectionType
Definition GameplayTagsManager.h:91
bool operator<(const FTextFormatString &LHS, const FTextFormatString &RHS)
Definition ITextFormatArgumentModifier.h:147
UE_FORCEINLINE_HINT bool operator!=(const FIndexedPointer &Other) const
Definition LockFreeList.h:76
#define UE_LOG(CategoryName, Verbosity, Format,...)
Definition LogMacros.h:270
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#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
::FCriticalSection FTransactionallySafeCriticalSection
Definition TransactionallySafeCriticalSection.h:16
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Engine.Build.cs:7
Definition Blake3.h:94
Definition IDelegateInstance.h:14
Definition GameplayTagsModule.cpp:12
Definition NameTypes.h:617
Definition NativeGameplayTags.h:59
Definition OutputDevice.h:133
Definition UnrealType.h:174
Definition Text.h:385
Definition Array.h:670
void Reset(SizeType NewSize=0)
Definition Array.h:2246
Definition UnrealString.h.inl:34
Definition SharedPointer.h:692
Definition DataTable.h:81
Definition ScopeLock.h:21
Definition Class.h:2476
Definition GameplayTagsSettings.h:35
Definition GameplayTagsManager.h:330
TMap< FGameplayTag, int32 > ReplicationCountMap_SingleTags
Definition GameplayTagsManager.h:797
TSharedPtr< FGameplayTagNode > FindTagNode(FName TagName) const
Definition GameplayTagsManager.h:501
DECLARE_TS_MULTICAST_DELEGATE_OneParam(FOnGameplayTagLoaded, const FGameplayTag &) FOnGameplayTagLoaded OnGameplayTagLoadedDelegate
FGameplayTagNetIndex GetInvalidTagNetIndex() const
Definition GameplayTagsManager.h:645
TMap< FGameplayTag, int32 > ReplicationCountMap_Containers
Definition GameplayTagsManager.h:798
bool ShouldWarnOnInvalidTags() const
Definition GameplayTagsManager.h:568
int32 GetNumGameplayTagNodes() const
Definition GameplayTagsManager.h:788
uint32 GetNetworkGameplayTagNodeIndexHash() const
Definition GameplayTagsManager.h:608
bool ShouldUseFastReplication() const
Definition GameplayTagsManager.h:581
const TArray< TSharedPtr< FGameplayTagNode > > & GetNetworkGameplayTagNodeIndex() const
Definition GameplayTagsManager.h:647
int32 GetNetIndexFirstBitSegment() const
Definition GameplayTagsManager.h:642
TSharedPtr< FGameplayTagNode > FindTagNode(const FGameplayTag &GameplayTag) const
Definition GameplayTagsManager.h:465
bool ShouldUseDynamicReplication() const
Definition GameplayTagsManager.h:587
int32 GetNetIndexTrueBitNum() const
Definition GameplayTagsManager.h:639
TMap< FGameplayTag, int32 > ReplicationCountMap
Definition GameplayTagsManager.h:796
int32 NumBitsForContainerSize
Definition GameplayTagsManager.h:653
Definition GameplayTagsSettings.h:104
Definition Object.h:95
Definition GameplayTagsSettings.h:57
Definition FieldSystemNoiseAlgo.cpp:6
Definition CookOnTheFly.h:19
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition Blake3.h:27
Definition GameplayTagContainer.h:251
Definition GameplayTagsManager.h:178
FString GetCompleteTagString() const
Definition GameplayTagsManager.h:195
const TArray< TSharedPtr< FGameplayTagNode > > & GetChildTagNodes() const
Definition GameplayTagsManager.h:216
bool IsRestrictedGameplayTag() const
Definition GameplayTagsManager.h:254
const FGameplayTagContainer & GetSingleTagContainer() const
Definition GameplayTagsManager.h:186
TArray< TSharedPtr< FGameplayTagNode > > & GetChildTagNodes()
Definition GameplayTagsManager.h:209
TSharedPtr< FGameplayTagNode > GetParentTagNode() const
Definition GameplayTagsManager.h:223
bool GetAllowNonRestrictedChildren() const
Definition GameplayTagsManager.h:245
const FGameplayTag & GetCompleteTag() const
Definition GameplayTagsManager.h:193
bool IsExplicitTag() const
Definition GameplayTagsManager.h:236
FName GetSimpleTagName() const
Definition GameplayTagsManager.h:202
FGameplayTagNetIndex GetNetIndex() const
Definition GameplayTagsManager.h:230
FName GetCompleteTagName() const
Definition GameplayTagsManager.h:194
Definition GameplayTagsManager.h:148
bool IsValid()
Definition GameplayTagsManager.h:169
void Reset()
Definition GameplayTagsManager.h:161
TArray< FString > TagIniList
Definition GameplayTagsManager.h:153
bool bWasAddedToTree
Definition GameplayTagsManager.h:159
bool bWasSearched
Definition GameplayTagsManager.h:156
TArray< FName > SourcesInPath
Definition GameplayTagsManager.h:150
Definition GameplayTagsManager.h:101
FGameplayTagSource(FName InSourceName, EGameplayTagSourceType InSourceType, UGameplayTagsList *InSourceTagList=nullptr, URestrictedGameplayTagsList *InSourceRestrictedTagList=nullptr)
Definition GameplayTagsManager.h:125
Definition GameplayTagsManager.h:34
FGameplayTagTableRow(FName InTag, const FString &InDevComment=TEXT(""))
Definition GameplayTagsManager.h:47
Definition GameplayTagContainer.h:45
static GAMEPLAYTAGS_API const FGameplayTag EmptyTag
Definition GameplayTagContainer.h:215
Definition Guid.h:109
Definition GameplayTagsManager.h:60
FRestrictedGameplayTagTableRow(FName InTag, const FString &InDevComment=TEXT(""), bool InAllowNonRestrictedChildren=false)
Definition GameplayTagsManager.h:69
Definition StreamableManager.h:191
Definition DataTable.h:37
Definition ObjectPtr.h:488
Definition Optional.h:131