UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
TraceFilter.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreTypes.h"
9#include "Engine/World.h"
11#include "Components/SkeletalMeshComponent.h" // Needed because AnimInstance::GetOwningComponent. (this only fails on clang compilers)
14#include "UObject/Object.h"
15
16#if UE_TRACE_FORCE_ENABLED || (UE_TRACE_ENABLED && !IS_PROGRAM && !UE_BUILD_SHIPPING)
17#define TRACE_FILTERING_ENABLED 1
18#else
19#define TRACE_FILTERING_ENABLED 0
20#endif
21
22#if TRACE_FILTERING_ENABLED
23
24struct FTraceFilter
25{
26 struct TObjectFilter
27 {
28 public:
29 template<typename T>
31 {
32 const UWorld* World = (const UWorld*)Object;
33 return FTraceFilter::IsObjectTraceable(World);
34 }
35
36 template<typename T>
38 {
40 const AActor* Actor = (const AActor*)Object;
41 return (FTraceFilter::IsObjectTraceable(Cast<UObject>(Actor)) && (Actor && CanTrace(Actor->GetWorld())));
42 }
43
44 template<typename T>
46 {
48 const UActorComponent* ActorComponent = (const UActorComponent*)Object;
49 return FTraceFilter::IsObjectTraceable(ActorComponent) || (ActorComponent && TObjectFilter::CanTrace(ActorComponent->GetOwner()));
50 }
51
52 template<typename T>
54 {
57 return FTraceFilter::IsObjectTraceable(AnimInstance) || (AnimInstance && TObjectFilter::CanTrace(AnimInstance->GetOwningComponent()));
58 }
59
60 template<typename T>
63 {
65 const UObject* BaseObject = (const UObject*)Object;
66 return FTraceFilter::IsObjectTraceable(Object) || (BaseObject && FTraceFilter::IsObjectTraceable(BaseObject->GetWorld()));
67 }
68 };
69
71 template<bool bForceThreadSafe = true>
72 static void SetObjectIsTraceable(const UObject* InObject, bool bIsTraceable);
73
75 template<bool bForceThreadSafe = true>
76 static void MarkObjectTraceable(const UObject* InObject);
77
79 static ENGINE_API void Init();
80
82 static ENGINE_API void Destroy();
83
85 template<bool bForceThreadSafe = true>
86 static bool IsObjectTraceable(const UObject* InObject);
87
88 static ENGINE_API void Lock();
89 static ENGINE_API void Unlock();
90};
91
92extern template ENGINE_API void FTraceFilter::SetObjectIsTraceable<true>(const UObject* InObject, bool bIsTraceable);
93extern template ENGINE_API void FTraceFilter::SetObjectIsTraceable<false>(const UObject* InObject, bool bIsTraceable);
94extern template ENGINE_API void FTraceFilter::MarkObjectTraceable<true>(const UObject* InObject);
95extern template ENGINE_API void FTraceFilter::MarkObjectTraceable<false>(const UObject* InObject);
96extern template ENGINE_API bool FTraceFilter::IsObjectTraceable<true>(const UObject* InObject);
97extern template ENGINE_API bool FTraceFilter::IsObjectTraceable<false>(const UObject* InObject);
98
99#define CAN_TRACE_OBJECT(Object) \
100 FTraceFilter::TObjectFilter::CanTrace(Object)
101
102#define CANNOT_TRACE_OBJECT(Object) \
103 (!FTraceFilter::TObjectFilter::CanTrace(Object))
104
105#define MARK_OBJECT_TRACEABLE(Object) \
106 FTraceFilter::MarkObjectTraceable(Object)
107
108#define SET_OBJECT_TRACEABLE(Object, bIsTraceable) \
109 FTraceFilter::SetObjectIsTraceable(Object, bIsTraceable)
110
111#define GET_TRACE_OBJECT_VALUE(Object) \
112 FTraceFilter::IsObjectTraceable(Object)
113#else
114
115#define CAN_TRACE_OBJECT(Object) \
116 true
117#define CANNOT_TRACE_OBJECT(Object) \
118 false
119
120#define MARK_OBJECT_TRACEABLE(Object)
121
122#define SET_OBJECT_TRACEABLE(Object, bIsTraceable)
123
124#define GET_TRACE_OBJECT_VALUE(Object) \
125 false
126
127#endif
#define FORCEINLINE
Definition AndroidPlatform.h:140
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
void Init()
Definition LockFreeList.h:4
FRWLock Lock
Definition UnversionedPropertySerialization.cpp:921
Definition Actor.h:257
Definition EnableIf.h:20
Definition ActorComponent.h:152
AActor * GetOwner() const
Definition ActorComponent.h:1534
Definition AnimInstance.h:353
Definition Object.h:95
Definition World.h:918
Definition PointerIsConvertibleFromTo.h:60