// Copyright (c), Firelight Technologies Pty, Ltd. 2012-2023. #include "FMODAudioComponentVisualizer.h" #include "FMODAudioComponent.h" #include "FMODUtils.h" #include "FMODEvent.h" #include "fmod_studio.hpp" #include "Engine/Public/SceneView.h" #include "Engine/Public/SceneManagement.h" void FFMODAudioComponentVisualizer::DrawVisualization(const UActorComponent *Component, const FSceneView *View, FPrimitiveDrawInterface *PDI) { if (View->Family->EngineShowFlags.AudioRadius) { const UFMODAudioComponent *AudioComp = Cast(Component); if (IsValid(AudioComp) && AudioComp->Event) { FMOD::Studio::EventDescription *EventDesc = IFMODStudioModule::Get().GetEventDescription(AudioComp->Event, EFMODSystemContext::Auditioning); if (EventDesc != nullptr) { bool bIs3D = false; EventDesc->is3D(&bIs3D); if (bIs3D) { const FColor AudioOuterRadiusColor(255, 153, 0); const FColor AudioInnerRadiusColor(216, 130, 0); const FTransform &Transform = AudioComp->GetComponentTransform(); float MinDistance = 0.0f; float MaxDistance = 0.0f; if (AudioComp->AttenuationDetails.bOverrideAttenuation) { MinDistance = AudioComp->AttenuationDetails.MinimumDistance; MaxDistance = AudioComp->AttenuationDetails.MaximumDistance; } else { EventDesc->getMinMaxDistance(&MinDistance, &MaxDistance); } MinDistance = FMODUtils::DistanceToUEScale(MinDistance); MaxDistance = FMODUtils::DistanceToUEScale(MaxDistance); DrawWireSphereAutoSides(PDI, Transform.GetTranslation(), AudioOuterRadiusColor, MinDistance, SDPG_World); if (MaxDistance != MinDistance) { DrawWireSphereAutoSides(PDI, Transform.GetTranslation(), AudioInnerRadiusColor, MaxDistance, SDPG_World); } } } } } }