65 lines
1.8 KiB
C++
65 lines
1.8 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "EnvQueryTest_InsideWaterBody.h"
|
|
#include "EnvironmentQuery/Items/EnvQueryItemType_VectorBase.h"
|
|
#include "WaterBodyComponent.h"
|
|
#include "WaterBodyManager.h"
|
|
|
|
#include UE_INLINE_GENERATED_CPP_BY_NAME(EnvQueryTest_InsideWaterBody)
|
|
|
|
UEnvQueryTest_InsideWaterBody::UEnvQueryTest_InsideWaterBody(const FObjectInitializer& ObjectInitializer)
|
|
: Super(ObjectInitializer)
|
|
{
|
|
Cost = EEnvTestCost::High;
|
|
ValidItemType = UEnvQueryItemType_VectorBase::StaticClass();
|
|
SetWorkOnFloatValues(false);
|
|
}
|
|
|
|
void UEnvQueryTest_InsideWaterBody::RunTest(FEnvQueryInstance& QueryInstance) const
|
|
{
|
|
BoolValue.BindData(QueryInstance.Owner.Get(), QueryInstance.QueryID);
|
|
const bool bWantsInside = BoolValue.GetValue();
|
|
|
|
for (FEnvQueryInstance::ItemIterator It(this, QueryInstance); It; ++It)
|
|
{
|
|
const FVector ItemLocation = GetItemLocation(QueryInstance, It.GetIndex());
|
|
|
|
bool bInside = false;
|
|
FWaterBodyManager::ForEachWaterBodyComponent(GetWorld(), [this, ItemLocation, &bInside](UWaterBodyComponent* WaterBodyComponent)
|
|
{
|
|
EWaterBodyQueryFlags QueryFlags = EWaterBodyQueryFlags::ComputeImmersionDepth;
|
|
if (bIncludeWaves)
|
|
{
|
|
QueryFlags |= EWaterBodyQueryFlags::IncludeWaves;
|
|
|
|
if (bSimpleWaves)
|
|
{
|
|
QueryFlags |= EWaterBodyQueryFlags::SimpleWaves;
|
|
}
|
|
}
|
|
|
|
if (bIgnoreExclusionVolumes)
|
|
{
|
|
QueryFlags |= EWaterBodyQueryFlags::IgnoreExclusionVolumes;
|
|
}
|
|
|
|
const FWaterBodyQueryResult QueryResult = WaterBodyComponent->QueryWaterInfoClosestToWorldLocation(ItemLocation, QueryFlags);
|
|
if (QueryResult.IsInWater())
|
|
{
|
|
bInside = true;
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
});
|
|
|
|
It.SetScore(TestPurpose, FilterType, bInside, bWantsInside);
|
|
}
|
|
}
|
|
|
|
FText UEnvQueryTest_InsideWaterBody::GetDescriptionDetails() const
|
|
{
|
|
return DescribeBoolTestParams("inside water body");
|
|
}
|
|
|