21{
23 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_Behaviors);
24 SCOPE_CYCLE_COUNTER(STATGROUP_AIToolKit_Tasks);
25 UWorld* World = GetWorld();
26 UNavigationSystemV1* NavigationSystem = FNavigationSystem::GetCurrent<UNavigationSystemV1>(World);
27 const APawn* Pawn = OwnerComp.GetAIOwner()->GetPawn();
28 if(NavigationSystem != nullptr && Pawn != nullptr)
29 {
30 FSharedConstNavQueryFilter SharedFilter = nullptr;
32 {
33 const ANavigationData* NavData = NavigationSystem->GetDefaultNavDataInstance(FNavigationSystem::DontCreate);
34 if(NavData != nullptr)
35 {
36 SharedFilter = UNavigationQueryFilter::GetQueryFilter(*NavData, World,
Filter);
37 }
38 }
39 const FVector Origin = Pawn->GetActorLocation();
40 FNavLocation Destination;
41
42 if(NavigationSystem->GetRandomReachablePointInRadius(Origin,
MaxDistance, Destination,
nullptr, SharedFilter))
43 {
44 OwnerComp.GetBlackboardComponent()->SetValueAsVector(
MoveTargetLocation.SelectedKeyName, Destination.Location);
45 return EBTNodeResult::Succeeded;
46 }
47 }
48 return EBTNodeResult::Failed;
49}
float MaxDistance
Definition BTT_GetRandomLocation.h:27
virtual EBTNodeResult::Type ExecuteTask(UBehaviorTreeComponent &OwnerComp, uint8 *NodeMemory) override
Definition BTT_GetRandomLocation.cpp:20
TSubclassOf< UNavigationQueryFilter > Filter
Definition BTT_GetRandomLocation.h:31