UAITask_MoveTo* UAITask_MoveTo::AIMoveTo(AAIController* Controller, FVector InGoalLocation, AActor* InGoalActor, float AcceptanceRadius, EAIOptionFlag::Type StopOnOverlap, EAIOptionFlag::Type AcceptPartialPath, bool bUsePathfinding, bool bLockAILogic) { UAITask_MoveTo* MyTask = Controller ? UAITask::NewAITask<UAITask_MoveTo>(*Controller, EAITaskPriority::High) : nullptr; if (MyTask) { FAIMoveRequest MoveReq; if (InGoalActor) { MoveReq.SetGoalActor(InGoalActor); } else { MoveReq.SetGoalLocation(InGoalLocation); } MoveReq.SetAcceptanceRadius(AcceptanceRadius); MoveReq.SetReachTestIncludesAgentRadius(FAISystem::PickAIOption(StopOnOverlap, MoveReq.IsReachTestIncludingAgentRadius())); MoveReq.SetAllowPartialPath(FAISystem::PickAIOption(AcceptPartialPath, MoveReq.IsUsingPartialPaths())); MoveReq.SetUsePathfinding(bUsePathfinding); if (Controller) { MoveReq.SetNavigationFilter(Controller->GetDefaultNavigationFilterClass()); } MyTask->SetUp(Controller, MoveReq); if (bLockAILogic) { MyTask->RequestAILogicLocking(); } } return MyTask; }
UAITask_MoveTo* UAITask_MoveTo::AIMoveTo(AAIController* Controller, FVector InGoalLocation, AActor* InGoalActor, float AcceptanceRadius, EAIOptionFlag::Type StopOnOverlap, EAIOptionFlag::Type AcceptPartialPath, bool bUsePathfinding, bool bLockAILogic) { if (Controller == nullptr) { return nullptr; } UAITask_MoveTo* MyTask = NewTask<UAITask_MoveTo>(*static_cast<IGameplayTaskOwnerInterface*>(Controller)); if (MyTask) { MyTask->SetUp(Controller, InGoalLocation, InGoalActor, AcceptanceRadius, bUsePathfinding, StopOnOverlap, AcceptPartialPath); MyTask->Priority = uint8(EAITaskPriority::High); if (bLockAILogic) { MyTask->RequestAILogicLocking(); } } return MyTask; }