Files
UnrealEngine/Engine/Source/Editor/ComponentVisualizers/Private/SensingComponentVisualizer.cpp
2025-05-18 13:04:45 +08:00

49 lines
1.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "SensingComponentVisualizer.h"
#include "Components/ActorComponent.h"
#include "Containers/Array.h"
#include "Engine/EngineTypes.h"
#include "Math/Color.h"
#include "Math/Transform.h"
#include "Math/UnrealMathSSE.h"
#include "Math/Vector.h"
#include "Perception/PawnSensingComponent.h"
#include "PrimitiveDrawingUtils.h"
#include "SceneView.h"
#include "ShowFlags.h"
#include "Templates/Casts.h"
void FSensingComponentVisualizer::DrawVisualization(const UActorComponent* Component, const FSceneView* View, FPrimitiveDrawInterface* PDI)
{
if (View->Family->EngineShowFlags.VisualizeSenses)
{
const UPawnSensingComponent* Senses = Cast<const UPawnSensingComponent>(Component);
if (Senses != NULL)
{
const FTransform Transform = FTransform(Senses->GetSensorRotation(), Senses->GetSensorLocation());
//LOS hearing
if (Senses->LOSHearingThreshold > 0.0f)
{
DrawWireSphere(PDI, Transform, FColor::Yellow, Senses->LOSHearingThreshold, 16, SDPG_World);
}
//Hearing
if (Senses->HearingThreshold > 0.0f)
{
DrawWireSphere(PDI, Transform, FColor::Cyan, Senses->HearingThreshold, 16, SDPG_World);
}
// Sight
if (Senses->SightRadius > 0.0f)
{
TArray<FVector> Verts;
DrawWireCone(PDI, Verts, Transform, Senses->SightRadius, Senses->GetPeripheralVisionAngle(), 10, FColor::Green, SDPG_World);
}
}
}
}