14{
15 TArray<AActor*> ActorsToIgnore;
16 TArray<FHitResult> HitArray;
17
19
20 if(Context.GetOwner() == nullptr || Context.GetWorld() == nullptr){return EStateTreeRunStatus::Failed;}
21 const APawn* OwnerPawn = Cast<APawn>(Context.GetOwner());
22 if(OwnerPawn == nullptr){return EStateTreeRunStatus::Failed;}
23
24
25 const FVector Start = OwnerPawn->GetActorLocation();
26 const FVector End = OwnerPawn->GetActorForwardVector() + Start;
27
28 TArray<TEnumAsByte<EObjectTypeQuery>> NameOfObjects;
30
31 EDrawDebugTrace::Type DebugDraw = EDrawDebugTrace::None;
33 {
34 DebugDraw = EDrawDebugTrace::ForDuration;
35 }
36
37
38 const bool bHit = UKismetSystemLibrary::SphereTraceMultiForObjects(Context.GetWorld(), Start, End,
Radius, NameOfObjects,
false, ActorsToIgnore, DebugDraw, HitArray,
true,
TraceColor,
TargetPatrolPointColor, 1.0f);
39 if(!bHit){return EStateTreeRunStatus::Succeeded;}
40
41 AActor* BestActor = nullptr;
42 float BestDistance = 10000000000000.0f;
43 for(
const FHitResult&
Hit : HitArray)
44 {
47 {
48 BestDistance =
Hit.Distance;
49 BestActor =
Hit.GetActor();
50 }
51 }
52 if(BestActor == nullptr){return EStateTreeRunStatus::Succeeded;}
53
54 InstanceData.MoveTargetLocation = BestActor->GetActorLocation();
55
56
58 if(
PatrolPoint ==
nullptr){
return EStateTreeRunStatus::Failed;}
59
60
61 InstanceData.NextPatrolPoint =
PatrolPoint->GetNextPatrolPointActor(InstanceData.bBridgeAvailable);
62 if(InstanceData.bBridgeAvailable)
63 {
64 InstanceData.NextBridgePatrolPoint =
PatrolPoint->GetNextBridgePatrolPointActor();
65 }
66
67 float WaitTimeMin = 0.0f;
68 float WaitTimeMax = 0.0f;
69 InstanceData.WaitTime = 0.0f;
70 const bool bWaitTime =
PatrolPoint->GetTimeToWait(WaitTimeMin, WaitTimeMax);
71 if(bWaitTime)
72 {
73 InstanceData.WaitTime = UKismetMathLibrary::RandomFloatInRange(WaitTimeMin, WaitTimeMax);
74 }
75 InstanceData.MoveTargetLocation = BestActor->GetActorLocation();
76 return EStateTreeRunStatus::Succeeded;
77}
An interface class for patrol functionality.
Definition PatrolInterface.h:24
FStateTreeFindRandomPatrolPointInstanceData FInstanceDataType
Definition STT_FindRandomPatrolPoint.h:39
bool bDebuggingMode
Definition STT_FindRandomPatrolPoint.h:48
FColor TargetPatrolPointColor
Definition STT_FindRandomPatrolPoint.h:56
float Radius
Definition STT_FindRandomPatrolPoint.h:71
TEnumAsByte< EObjectTypeQuery > ObjectChannelToUse
Definition STT_FindRandomPatrolPoint.h:73
FColor TraceColor
Definition STT_FindRandomPatrolPoint.h:54