Space Plunder
Loading...
Searching...
No Matches
UBTService_SelectTargetObject Class Reference

#include <BTService_SelectTargetObject.h>

Inheritance diagram for UBTService_SelectTargetObject:

Classes

struct  FBTTaskSelectTargetMemory
 

Public Member Functions

 UBTService_SelectTargetObject ()
 

Public Attributes

FBlackboardKeySelector TargetObject
 
TArray< EAIStimuliTypeFilterTypes
 
bool bResetIfNoneFound = true
 
bool bDebuggingMode = false
 
bool bDebugAllObjects = true
 
float PointSize = 20.0f
 
FColor ObjectPointColor = FColor::Yellow
 
FColor TargetPointColor = FColor::Red
 

Protected Member Functions

virtual void TickNode (UBehaviorTreeComponent &OwnerComp, uint8 *NodeMemory, float DeltaSeconds) override
 
virtual FString GetStaticDescription () const override
 
virtual uint16 GetInstanceMemorySize () const override
 

Detailed Description

UBTService_SelectTargetObject is a behavior tree service node that selects a target object based on specified filter types. It inherits from UBTService, the base class for behavior tree service nodes.

Constructor & Destructor Documentation

◆ UBTService_SelectTargetObject()

UBTService_SelectTargetObject::UBTService_SelectTargetObject ( )
16{
17 NodeName = TEXT("Select Target Object");
18 INIT_SERVICE_NODE_NOTIFY_FLAGS();
19
20#if WITH_EDITOR
21 bDebuggingMode = true;
22#endif // WITH_EDITOR
23
24}
bool bDebuggingMode
Definition BTService_SelectTargetObject.h:31

Member Function Documentation

◆ GetInstanceMemorySize()

uint16 UBTService_SelectTargetObject::GetInstanceMemorySize ( ) const
overrideprotectedvirtual
121{
122 return sizeof(FBTTaskSelectTargetMemory);
123}

◆ GetStaticDescription()

FString UBTService_SelectTargetObject::GetStaticDescription ( ) const
overrideprotectedvirtual
73{
74 FString Description;
76 {
77 Description += FString::Printf(TEXT("\n DEBUG ACTIVE"));
78 }
79 if(TargetObject.SelectedKeyName.IsValid())
80 {
81 Description += FString::Printf(TEXT("\nTarget Object: %s"), *TargetObject.SelectedKeyName.ToString());
82 }
83 else
84 {
85 Description += TEXT("\nTarget Object: None");
86 }
87 FString FilterTypesText;
88 for(const auto FilterType: FilterTypes)
89 {
90 const UEnum* StimuliEnum = StaticEnum<EAIStimuliType>();
91 if(StimuliEnum != nullptr)
92 {
93 FString FilterConverted = StimuliEnum->GetValueAsString(FilterType);
94 FString LeftString;
95 //- Remove EFilterCategory:: //
96 FString RightString;
97 if(UKismetStringLibrary::Split(FilterConverted, "::", LeftString, RightString))
98 {
99 FilterTypesText += FString::Printf(TEXT("%s"), *RightString);
100 }
101
102 }
103 }
104 if(!FilterTypesText.IsEmpty())
105 {
106 Description += FString::Printf(TEXT("\nFilterTypes: %s"), *FilterTypesText);
107 }
108
109 Description += FString::Printf(TEXT("\nbReset If None Found: %s"), bResetIfNoneFound ? TEXT("True") : TEXT("False"));
110 return Description;
111}
FBlackboardKeySelector TargetObject
Definition BTService_SelectTargetObject.h:24
TArray< EAIStimuliType > FilterTypes
Definition BTService_SelectTargetObject.h:26
bool bResetIfNoneFound
Definition BTService_SelectTargetObject.h:28

◆ TickNode()

void UBTService_SelectTargetObject::TickNode ( UBehaviorTreeComponent & OwnerComp,
uint8 * NodeMemory,
float DeltaSeconds )
overrideprotectedvirtual
27{
28 TRACE_CPUPROFILER_EVENT_SCOPE(UBTService_SelectTargetObject::TickNode);
29 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_Behaviors);
30 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_Services);
31 Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds);
32 FBTTaskSelectTargetMemory* SelectTargetMemory = reinterpret_cast<FBTTaskSelectTargetMemory*>(NodeMemory);
33 if(SelectTargetMemory == nullptr){return;}
34 SelectTargetMemory->BestTarget = nullptr;
35 SelectTargetMemory->NearestTargetDistance = 10000000000.0f;
36 if(OwnerComp.GetAIOwner() == nullptr && OwnerComp.GetAIOwner()->GetPawn() == nullptr){UE_LOG(LogAIToolKit, Error, TEXT("AI Owner NULL in Select Target Object"))return;}
37 const FVector OwnerLocation = OwnerComp.GetAIOwner()->GetPawn()->GetActorLocation();
38 const IAIActionsInterface* AIActions = Cast<IAIActionsInterface>(OwnerComp.GetAIOwner());
39 if(AIActions != nullptr)
40 {
41 TArray<AActor*> PerceivedObjects = AIActions->GetPerceivedObjects(FilterTypes);
42 for(const auto Object : PerceivedObjects)
43 {
44 const float Distance = FVector::Distance(OwnerLocation, Object->GetActorLocation());
45 if(Distance < SelectTargetMemory->NearestTargetDistance)
46 {
47 SelectTargetMemory->NearestTargetDistance = Distance;
48 SelectTargetMemory->BestTarget = Object;
49 }
51 {
52 DrawDebugPoint(GetWorld(), Object->GetActorLocation(), PointSize, ObjectPointColor, false, 1.0f);
53 }
54 }
55 if(bDebuggingMode && SelectTargetMemory->BestTarget != nullptr)
56 {
57 DrawDebugPoint(GetWorld(), SelectTargetMemory->BestTarget->GetActorLocation(), PointSize, TargetPointColor, false, 2.0f);
58 }
59 UBlackboardComponent* BlackboardComp = OwnerComp.GetBlackboardComponent();
60 if(BlackboardComp != nullptr )
61 {
62 //- Don't remove previous target if none is found //
63 if(SelectTargetMemory->BestTarget != nullptr || bResetIfNoneFound)
64 {
65 BlackboardComp->SetValueAsObject(TargetObject.SelectedKeyName, SelectTargetMemory->BestTarget);
66 }
67 }
68 }
69
70}
Definition AIActionsInterface.h:20
virtual TArray< AActor * > GetPerceivedObjects(const TArray< EAIStimuliType > Filters) const =0
FColor ObjectPointColor
Definition BTService_SelectTargetObject.h:37
virtual void TickNode(UBehaviorTreeComponent &OwnerComp, uint8 *NodeMemory, float DeltaSeconds) override
Definition BTService_SelectTargetObject.cpp:26
bool bDebugAllObjects
Definition BTService_SelectTargetObject.h:33
float PointSize
Definition BTService_SelectTargetObject.h:35
FColor TargetPointColor
Definition BTService_SelectTargetObject.h:39

Member Data Documentation

◆ bDebugAllObjects

bool UBTService_SelectTargetObject::bDebugAllObjects = true

◆ bDebuggingMode

bool UBTService_SelectTargetObject::bDebuggingMode = false

◆ bResetIfNoneFound

bool UBTService_SelectTargetObject::bResetIfNoneFound = true

◆ FilterTypes

TArray<EAIStimuliType> UBTService_SelectTargetObject::FilterTypes

◆ ObjectPointColor

FColor UBTService_SelectTargetObject::ObjectPointColor = FColor::Yellow

◆ PointSize

float UBTService_SelectTargetObject::PointSize = 20.0f

◆ TargetObject

FBlackboardKeySelector UBTService_SelectTargetObject::TargetObject

◆ TargetPointColor

FColor UBTService_SelectTargetObject::TargetPointColor = FColor::Red

The documentation for this class was generated from the following files: