void UEnvQueryTest_Distance::RunTest(struct FEnvQueryInstance& QueryInstance) { float ThresholdValue = 0.0f; if (!QueryInstance.GetParamValue(FloatFilter, ThresholdValue, TEXT("FloatFilter"))) { return; } // don't support context Item here, it doesn't make any sense TArray<FVector> ContextLocations; if (!QueryInstance.PrepareContext(DistanceTo, ContextLocations)) { return; } switch (TestMode) { case EEnvTestDistance::Distance3D: for (FEnvQueryInstance::ItemIterator It(QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, *It); for (int32 iContext = 0; iContext < ContextLocations.Num(); iContext++) { const float Distance = CalcDistance3D(ItemLocation, ContextLocations[iContext]); It.SetScore(Condition, Distance, ThresholdValue); } } break; case EEnvTestDistance::Distance2D: for (FEnvQueryInstance::ItemIterator It(QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, *It); for (int32 iContext = 0; iContext < ContextLocations.Num(); iContext++) { const float Distance = CalcDistance2D(ItemLocation, ContextLocations[iContext]); It.SetScore(Condition, Distance, ThresholdValue); } } break; case EEnvTestDistance::DistanceZ: for (FEnvQueryInstance::ItemIterator It(QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, *It); for (int32 iContext = 0; iContext < ContextLocations.Num(); iContext++) { const float Distance = CalcDistanceZ(ItemLocation, ContextLocations[iContext]); It.SetScore(Condition, Distance, ThresholdValue); } } break; default: return; } }
void UEnvQueryTest_Distance::RunTest(FEnvQueryInstance& QueryInstance) const { UObject* QueryOwner = QueryInstance.Owner.Get(); if (QueryOwner == nullptr) { return; } FloatValueMin.BindData(QueryOwner, QueryInstance.QueryID); float MinThresholdValue = FloatValueMin.GetValue(); FloatValueMax.BindData(QueryOwner, QueryInstance.QueryID); float MaxThresholdValue = FloatValueMax.GetValue(); // don't support context Item here, it doesn't make any sense TArray<FVector> ContextLocations; if (!QueryInstance.PrepareContext(DistanceTo, ContextLocations)) { return; } switch (TestMode) { case EEnvTestDistance::Distance3D: for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, It.GetIndex()); for (int32 ContextIndex = 0; ContextIndex < ContextLocations.Num(); ContextIndex++) { const float Distance = CalcDistance3D(ItemLocation, ContextLocations[ContextIndex]); It.SetScore(TestPurpose, FilterType, Distance, MinThresholdValue, MaxThresholdValue); } } break; case EEnvTestDistance::Distance2D: for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, It.GetIndex()); for (int32 ContextIndex = 0; ContextIndex < ContextLocations.Num(); ContextIndex++) { const float Distance = CalcDistance2D(ItemLocation, ContextLocations[ContextIndex]); It.SetScore(TestPurpose, FilterType, Distance, MinThresholdValue, MaxThresholdValue); } } break; case EEnvTestDistance::DistanceZ: for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, It.GetIndex()); for (int32 ContextIndex = 0; ContextIndex < ContextLocations.Num(); ContextIndex++) { const float Distance = CalcDistanceZ(ItemLocation, ContextLocations[ContextIndex]); It.SetScore(TestPurpose, FilterType, Distance, MinThresholdValue, MaxThresholdValue); } } break; case EEnvTestDistance::DistanceAbsoluteZ: for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It) { const FVector ItemLocation = GetItemLocation(QueryInstance, It.GetIndex()); for (int32 ContextIndex = 0; ContextIndex < ContextLocations.Num(); ContextIndex++) { const float Distance = CalcDistanceAbsoluteZ(ItemLocation, ContextLocations[ContextIndex]); It.SetScore(TestPurpose, FilterType, Distance, MinThresholdValue, MaxThresholdValue); } } break; default: checkNoEntry(); return; } }