Space Plunder
Loading...
Searching...
No Matches
FStateTree_FindRandomPatrolPoint Struct Reference

#include <STT_FindRandomPatrolPoint.h>

Inheritance diagram for FStateTree_FindRandomPatrolPoint:

Public Types

using FInstanceDataType = FStateTreeFindRandomPatrolPointInstanceData
 

Public Member Functions

 FStateTree_FindRandomPatrolPoint ()=default
 
virtual const UStruct * GetInstanceDataType () const override
 
virtual EStateTreeRunStatus EnterState (FStateTreeExecutionContext &Context, const FStateTreeTransitionResult &Transition) const override
 
virtual void ExitState (FStateTreeExecutionContext &Context, const FStateTreeTransitionResult &Transition) const override
 

Public Attributes

bool bDebuggingMode = false
 
bool bShowText = true
 
float PointSize = 20.0f
 
FColor TraceColor = FColor::Green
 
FColor TargetPatrolPointColor = FColor::Red
 
float Radius = 2000.0f
 
TEnumAsByte< EObjectTypeQuery > ObjectChannelToUse = ObjectTypeQuery1
 

Member Typedef Documentation

◆ FInstanceDataType

Constructor & Destructor Documentation

◆ FStateTree_FindRandomPatrolPoint()

FStateTree_FindRandomPatrolPoint::FStateTree_FindRandomPatrolPoint ( )
default

Member Function Documentation

◆ EnterState()

EStateTreeRunStatus FStateTree_FindRandomPatrolPoint::EnterState ( FStateTreeExecutionContext & Context,
const FStateTreeTransitionResult & Transition ) const
overridevirtual
14{
15 TArray<AActor*> ActorsToIgnore;
16 TArray<FHitResult> HitArray;
17
18 FInstanceDataType& InstanceData = Context.GetInstanceData(*this);
19 // const FVector Location = InstanceData.TargetLocation;
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;
29 NameOfObjects.Add(ObjectChannelToUse);
30
31 EDrawDebugTrace::Type DebugDraw = EDrawDebugTrace::None;
33 {
34 DebugDraw = EDrawDebugTrace::ForDuration;
35 }
36
37 //- Sphere Trace //
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 {
45 const IPatrolInterface* PatrolPoint = Cast<IPatrolInterface>(Hit.GetActor());
46 if(Hit.Distance < BestDistance && PatrolPoint != nullptr)
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 //- Get All Values?
57 const IPatrolInterface* PatrolPoint = Cast<IPatrolInterface>(BestActor);
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

◆ ExitState()

void FStateTree_FindRandomPatrolPoint::ExitState ( FStateTreeExecutionContext & Context,
const FStateTreeTransitionResult & Transition ) const
overridevirtual
82{
83
84 FStateTreeTaskCommonBase::ExitState(Context, Transition);
85}

◆ GetInstanceDataType()

virtual const UStruct * FStateTree_FindRandomPatrolPoint::GetInstanceDataType ( ) const
inlineoverridevirtual
40{ return FInstanceDataType::StaticStruct(); }

Member Data Documentation

◆ bDebuggingMode

bool FStateTree_FindRandomPatrolPoint::bDebuggingMode = false

◆ bShowText

bool FStateTree_FindRandomPatrolPoint::bShowText = true

◆ ObjectChannelToUse

TEnumAsByte<EObjectTypeQuery> FStateTree_FindRandomPatrolPoint::ObjectChannelToUse = ObjectTypeQuery1

◆ PointSize

float FStateTree_FindRandomPatrolPoint::PointSize = 20.0f

◆ Radius

float FStateTree_FindRandomPatrolPoint::Radius = 2000.0f

◆ TargetPatrolPointColor

FColor FStateTree_FindRandomPatrolPoint::TargetPatrolPointColor = FColor::Red

◆ TraceColor

FColor FStateTree_FindRandomPatrolPoint::TraceColor = FColor::Green

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