void ConvertRaycastResults(const UWorld* World, int32 NumHits, PxRaycastHit* Hits, float CheckLength, const PxFilterData& QueryFilter, TArray<FHitResult>& OutHits, const FVector& StartLoc, const FVector& EndLoc, bool bReturnFaceIndex, bool bReturnPhysMat) { OutHits.Reserve(OutHits.Num() + NumHits); PxTransform PStartTM(U2PVector(StartLoc)); for(int32 i=0; i<NumHits; i++) { FHitResult& NewResult = OutHits[OutHits.AddDefaulted()]; const PxRaycastHit& PHit = Hits[i]; ConvertQueryImpactHit(World, PHit, NewResult, CheckLength, QueryFilter, StartLoc, EndLoc, NULL, PStartTM, bReturnFaceIndex, bReturnPhysMat); } // Sort results from first to last hit OutHits.Sort( FCompareFHitResultTime() ); }
void ConvertRaycastResults(int32 NumHits, PxRaycastHit* Hits, float CheckLength, const PxFilterData& QueryFilter, TArray<FHitResult>& OutHits, const FVector& StartLoc, const FVector& EndLoc, bool bReturnFaceIndex, bool bReturnPhysMat) { PxTransform PStartTM(U2PVector(StartLoc)); for(int32 i=0; i<NumHits; i++) { FHitResult NewResult(ForceInit); const PxRaycastHit& PHit = Hits[i]; ConvertQueryImpactHit(PHit, NewResult, CheckLength, QueryFilter, StartLoc, EndLoc, NULL, PStartTM, bReturnFaceIndex, bReturnPhysMat); OutHits.Add(NewResult); } // Sort results from first to last hit OutHits.Sort( FCompareFHitResultTime() ); }
EConvertQueryResult ConvertRaycastResults(bool& OutHasValidBlockingHit, const UWorld* World, int32 NumHits, PxRaycastHit* Hits, float CheckLength, const PxFilterData& QueryFilter, TArray<FHitResult>& OutHits, const FVector& StartLoc, const FVector& EndLoc, bool bReturnFaceIndex, bool bReturnPhysMat) { #if PLATFORM_LINUX // to narrow down OR-24947 _Pragma("clang optimize off"); #endif // PLATFORM_LINUX OutHits.Reserve(OutHits.Num() + NumHits); EConvertQueryResult ConvertResult = EConvertQueryResult::Valid; bool bHadBlockingHit = false; PxTransform PStartTM(U2PVector(StartLoc)); for(int32 i=0; i<NumHits; i++) { FHitResult& NewResult = OutHits[OutHits.Emplace()]; const PxRaycastHit& PHit = Hits[i]; if (ConvertQueryImpactHit(World, PHit, NewResult, CheckLength, QueryFilter, StartLoc, EndLoc, NULL, PStartTM, bReturnFaceIndex, bReturnPhysMat) == EConvertQueryResult::Valid) { bHadBlockingHit |= NewResult.bBlockingHit; } else { // Reject invalid result (this should be rare). Remove from the results. OutHits.Pop(/*bAllowShrinking=*/ false); ConvertResult = EConvertQueryResult::Invalid; } } // Sort results from first to last hit OutHits.Sort( FCompareFHitResultTime() ); OutHasValidBlockingHit = bHadBlockingHit; return ConvertResult; #if PLATFORM_LINUX // to narrow down OR-24947 _Pragma("clang optimize on"); #endif // PLATFORM_LINUX }