void UAblTargetingBox::FindTargets(UAblAbilityContext& Context) const { AActor* SourceActor = m_Location.GetSourceActor(Context); check(SourceActor); UWorld* World = SourceActor->GetWorld(); FTransform QueryTransform; if (IsUsingAsync() && UAbleSettings::IsAsyncEnabled()) { // Check if we have a valid Async handle already. if (!Context.HasValidAsyncHandle()) { FCollisionShape BoxShape = FCollisionShape::MakeBox(m_HalfExtents); m_Location.GetTransform(Context, QueryTransform); // Push our query out by our half extents so we aren't centered in the box. FQuat Rotation = QueryTransform.GetRotation(); FVector HalfExtentsOffset = Rotation.GetForwardVector() * m_HalfExtents.X; QueryTransform *= FTransform(HalfExtentsOffset); FTraceHandle AsyncHandle = World->AsyncOverlapByChannel(QueryTransform.GetLocation(), QueryTransform.GetRotation(), GetCollisionChannel(), BoxShape); Context.SetAsyncHandle(AsyncHandle); } else // Poll and see if our query is done, if so - process it. { FOverlapDatum Datum; if (World->QueryOverlapData(Context.GetAsyncHandle(), Datum)) { ProcessResults(Context, Datum.OutOverlaps); FTraceHandle Empty; Context.SetAsyncHandle(Empty); // Reset our handle. } return; } } else // Normal Sync Query { FCollisionShape BoxShape = FCollisionShape::MakeBox(m_HalfExtents); m_Location.GetTransform(Context, QueryTransform); // Push our query out by our half extents so we aren't centered in the box. FQuat Rotation = QueryTransform.GetRotation(); FVector HalfExtentsOffset = Rotation.GetForwardVector() * m_HalfExtents.X; QueryTransform *= FTransform(HalfExtentsOffset); TArray<FOverlapResult> Results; if (World->OverlapMultiByChannel(Results, QueryTransform.GetLocation(), QueryTransform.GetRotation(), GetCollisionChannel(), BoxShape)) { ProcessResults(Context, Results); } } #if !UE_BUILD_SHIPPING if (FAblAbilityDebug::ShouldDrawQueries()) { // Nope, go ahead and fire off our Async query. FVector AlignedBox = GetAlignedBox(Context, QueryTransform); FAblAbilityDebug::DrawBoxQuery(World, QueryTransform, AlignedBox); } #endif // UE_BUILD_SHIPPING }