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

#include <BTS_CheckLineOfSight.h>

Inheritance diagram for UBTS_CheckLineOfSight:

Classes

struct  FBTSCheckLineOfSightMemory
 

Public Member Functions

 UBTS_CheckLineOfSight ()
 

Protected Member Functions

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

Protected Attributes

FBlackboardKeySelector TargetActor
 
FBlackboardKeySelector bHasLineOfSightToEnemy
 
TArray< EAIStimuliTypeFilterTypes
 
bool bDebuggingMode = false
 
bool bDebugAllObjects = true
 
float PointSize = 20.0f
 
float LineDrawTime = 0.2f
 
FColor ObjectPointColor = FColor::Yellow
 
FColor TargetPointColor = FColor::Red
 

Constructor & Destructor Documentation

◆ UBTS_CheckLineOfSight()

UBTS_CheckLineOfSight::UBTS_CheckLineOfSight ( )
20{
21 NodeName = TEXT("Check Line Of Sight");
22 INIT_SERVICE_NODE_NOTIFY_FLAGS();
23
24#if WITH_EDITOR
25 bDebuggingMode = true;
26#endif // WITH_EDITOR
27
28}
bool bDebuggingMode
Definition BTS_CheckLineOfSight.h:37

Member Function Documentation

◆ GetInstanceMemorySize()

uint16 UBTS_CheckLineOfSight::GetInstanceMemorySize ( ) const
overrideprotectedvirtual
114{
115 return sizeof(FBTSCheckLineOfSightMemory);
116}

◆ GetStaticDescription()

FString UBTS_CheckLineOfSight::GetStaticDescription ( ) const
overrideprotectedvirtual
89{
90 FString Description;
92 {
93 Description += FString::Printf(TEXT("\n DEBUG ACTIVE"));
94 }
95 if(TargetActor.SelectedKeyName.IsValid())
96 {
97 Description += FString::Printf(TEXT("\nTarget Object: %s"), *TargetActor.SelectedKeyName.ToString());
98 }
99 else
100 {
101 Description += TEXT("\nTarget Object: None");
102 }
103 return Description;
104}
FBlackboardKeySelector TargetActor
Definition BTS_CheckLineOfSight.h:30

◆ TickNode()

void UBTS_CheckLineOfSight::TickNode ( UBehaviorTreeComponent & OwnerComp,
uint8 * NodeMemory,
float DeltaSeconds )
overrideprotectedvirtual
31{
32 TRACE_CPUPROFILER_EVENT_SCOPE(UBTS_CheckLineOfSight::TickNode);
33 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_Behaviors);
34 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_Services);
35
36 Super::TickNode(OwnerComp, NodeMemory, DeltaSeconds);
37 FBTSCheckLineOfSightMemory* SelectTargetMemory = reinterpret_cast<FBTSCheckLineOfSightMemory*>(NodeMemory);
38 if(SelectTargetMemory == nullptr){return;}
39 SelectTargetMemory->bHasLineOfSight = false;
40 UBlackboardComponent* BlackboardComp = OwnerComp.GetBlackboardComponent();
41 if(BlackboardComp != nullptr)
42 {
43 SelectTargetMemory->TargetActor = Cast<AActor>(BlackboardComp->GetValueAsObject(TargetActor.SelectedKeyName));
44 }
45 if(SelectTargetMemory->TargetActor == nullptr){return;}
46 if(OwnerComp.GetAIOwner() == nullptr && OwnerComp.GetAIOwner()->GetPawn() == nullptr){UE_LOG(LogAIToolKit, Error, TEXT("AI Owner NULL in Check Line Of Sight"))return;}
47 const IAIActionsInterface* AIActions = Cast<IAIActionsInterface>(OwnerComp.GetAIOwner());
48 if(AIActions != nullptr)
49 {
50 TArray<AActor*> PerceivedObjects = AIActions->GetPerceivedObjects(FilterTypes);
51 for(const auto Object : PerceivedObjects)
52 {
53 if(SelectTargetMemory->TargetActor == Object)
54 {
55 FVector EyeLocation;
56 FRotator EyeRotation;
57 TArray<AActor*> ActorsToIgnore;
58 ActorsToIgnore.Add(SelectTargetMemory->TargetActor);
59 ActorsToIgnore.Add(OwnerComp.GetAIOwner()->GetPawn());
60 FHitResult Hit;
61 OwnerComp.GetAIOwner()->GetPawn()->GetActorEyesViewPoint(EyeLocation, EyeRotation);
62 bool bHit = UKismetSystemLibrary::LineTraceSingle(this,EyeLocation,SelectTargetMemory->TargetActor->GetActorLocation(),
63 UEngineTypes::ConvertToTraceType(ECC_GameTraceChannel4),
65 true, FLinearColor::Blue,
66 FLinearColor::Blue, LineDrawTime);
67 SelectTargetMemory->bHasLineOfSight = bHit == false;
69 {
70 DrawDebugPoint(GetWorld(), Object->GetActorLocation(), PointSize, TargetPointColor, false, 1.0f);
71 }
72 }
73 else
74 {
76 {
77 DrawDebugPoint(GetWorld(), Object->GetActorLocation(), PointSize, ObjectPointColor, false, 1.0f);
78 }
79 }
80 }
81 }
82 if(BlackboardComp != nullptr)
83 {
84 BlackboardComp->SetValueAsBool(bHasLineOfSightToEnemy.SelectedKeyName, SelectTargetMemory->bHasLineOfSight);
85 }
86}
Definition AIActionsInterface.h:20
virtual TArray< AActor * > GetPerceivedObjects(const TArray< EAIStimuliType > Filters) const =0
virtual void TickNode(UBehaviorTreeComponent &OwnerComp, uint8 *NodeMemory, float DeltaSeconds) override
Definition BTS_CheckLineOfSight.cpp:30
float LineDrawTime
Definition BTS_CheckLineOfSight.h:43
float PointSize
Definition BTS_CheckLineOfSight.h:41
bool bDebugAllObjects
Definition BTS_CheckLineOfSight.h:39
TArray< EAIStimuliType > FilterTypes
Definition BTS_CheckLineOfSight.h:34
FBlackboardKeySelector bHasLineOfSightToEnemy
Definition BTS_CheckLineOfSight.h:32
FColor ObjectPointColor
Definition BTS_CheckLineOfSight.h:45
FColor TargetPointColor
Definition BTS_CheckLineOfSight.h:47
static EDrawDebugTrace::Type GetDrawDebugType(const bool bDebuggingMode)
Definition BaseHelpersBPLib.cpp:910

Member Data Documentation

◆ bDebugAllObjects

bool UBTS_CheckLineOfSight::bDebugAllObjects = true
protected

◆ bDebuggingMode

bool UBTS_CheckLineOfSight::bDebuggingMode = false
protected

◆ bHasLineOfSightToEnemy

FBlackboardKeySelector UBTS_CheckLineOfSight::bHasLineOfSightToEnemy
protected

◆ FilterTypes

TArray<EAIStimuliType> UBTS_CheckLineOfSight::FilterTypes
protected

◆ LineDrawTime

float UBTS_CheckLineOfSight::LineDrawTime = 0.2f
protected

◆ ObjectPointColor

FColor UBTS_CheckLineOfSight::ObjectPointColor = FColor::Yellow
protected

◆ PointSize

float UBTS_CheckLineOfSight::PointSize = 20.0f
protected

◆ TargetActor

FBlackboardKeySelector UBTS_CheckLineOfSight::TargetActor
protected

◆ TargetPointColor

FColor UBTS_CheckLineOfSight::TargetPointColor = FColor::Red
protected

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