18{
19 UWorld* World = GetWorld();
20 UNavigationSystemV1* NavSys = FNavigationSystem::GetCurrent<UNavigationSystemV1>(World);
21 APawn* Pawn = OwnerComp.GetAIOwner()->GetPawn();
22
23 if (NavSys && Pawn)
24 {
25 FSharedConstNavQueryFilter SharedFilter = nullptr;
26
28 {
29 const ANavigationData* NavData = NavSys->GetDefaultNavDataInstance(FNavigationSystem::DontCreate);
30 if (NavData)
31 {
32 SharedFilter = UNavigationQueryFilter::GetQueryFilter(*NavData, World,
Filter);
33 }
34 }
35
36 const FVector Origin = Pawn->GetActorLocation();
37 FNavLocation Destination;
38
39 if (NavSys->GetRandomReachablePointInRadius(Origin,
MaxDistance, Destination,
nullptr, SharedFilter))
40 {
41 OwnerComp.GetBlackboardComponent()->SetValueAsVector(BlackboardKey.SelectedKeyName, Destination.Location);
42 return EBTNodeResult::Succeeded;
43 }
44 }
45
46 return EBTNodeResult::Failed;
47}
float MaxDistance
Definition ALS_BTTask_GetRandomLocation.h:24
TSubclassOf< UNavigationQueryFilter > Filter
Definition ALS_BTTask_GetRandomLocation.h:28