Files
UnrealEngineUWP/Engine/Source/Editor/DetailCustomizations/Private/AttenuationSettingsCustomizations.cpp
Matt Kuhlenschmidt 0bac17760c Fixup usage of deprecated IStructCustomizationUtils interface
[CL 2094462 by Matt Kuhlenschmidt in Main branch]
2014-06-04 11:16:24 -04:00

241 lines
10 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "DetailCustomizationsPrivatePCH.h"
#include "AttenuationSettingsCustomizations.h"
TSharedRef<IPropertyTypeCustomization> FAttenuationSettingsCustomization::MakeInstance()
{
return MakeShareable( new FAttenuationSettingsCustomization );
}
void FAttenuationSettingsCustomization::CustomizeHeader( TSharedRef<class IPropertyHandle> StructPropertyHandle, class FDetailWidgetRow& HeaderRow, IPropertyTypeCustomizationUtils& StructCustomizationUtils )
{
// We'll set up reset to default ourselves
const bool bDisplayResetToDefault = false;
const FString DisplayNameOverride = TEXT("");
HeaderRow
.NameContent()
[
StructPropertyHandle->CreatePropertyNameWidget( DisplayNameOverride, bDisplayResetToDefault )
];
}
void FAttenuationSettingsCustomization::CustomizeChildren( TSharedRef<IPropertyHandle> StructPropertyHandle, class IDetailChildrenBuilder& ChildBuilder, IPropertyTypeCustomizationUtils& StructCustomizationUtils )
{
uint32 NumChildren;
StructPropertyHandle->GetNumChildren( NumChildren );
TMap<FName, TSharedPtr< IPropertyHandle > > PropertyHandles;
for( uint32 ChildIndex = 0; ChildIndex < NumChildren; ++ChildIndex )
{
TSharedRef<IPropertyHandle> ChildHandle = StructPropertyHandle->GetChildHandle( ChildIndex ).ToSharedRef();
const FName PropertyName = ChildHandle->GetProperty()->GetFName();
PropertyHandles.Add(PropertyName, ChildHandle);
}
// We'll set up reset to default ourselves
const bool bDisplayResetToDefault = false;
const FString DisplayNameOverride = TEXT("");
AttenuationShapeHandle = PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, AttenuationShape));
DistanceAlgorithmHandle = PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, DistanceAlgorithm));
TSharedRef<IPropertyHandle> AttenuationExtentsHandle = PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, AttenuationShapeExtents)).ToSharedRef();
uint32 NumExtentChildren;
AttenuationExtentsHandle->GetNumChildren( NumExtentChildren );
TSharedPtr< IPropertyHandle > ExtentXHandle;
TSharedPtr< IPropertyHandle > ExtentYHandle;
TSharedPtr< IPropertyHandle > ExtentZHandle;
for( uint32 ExtentChildIndex = 0; ExtentChildIndex < NumExtentChildren; ++ExtentChildIndex )
{
TSharedRef<IPropertyHandle> ChildHandle = AttenuationExtentsHandle->GetChildHandle( ExtentChildIndex ).ToSharedRef();
const FName PropertyName = ChildHandle->GetProperty()->GetFName();
if (PropertyName == GET_MEMBER_NAME_CHECKED(FVector, X))
{
ExtentXHandle = ChildHandle;
}
else if (PropertyName == GET_MEMBER_NAME_CHECKED(FVector, Y))
{
ExtentYHandle = ChildHandle;
}
else
{
check(PropertyName == GET_MEMBER_NAME_CHECKED(FVector, Z));
ExtentZHandle = ChildHandle;
}
}
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, bAttenuate)).ToSharedRef());
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, bSpatialize)).ToSharedRef());
ChildBuilder.AddChildProperty( DistanceAlgorithmHandle.ToSharedRef() );
IDetailPropertyRow& dbAttenuationRow = ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, dBAttenuationAtMax)).ToSharedRef());
dbAttenuationRow.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsNaturalSoundSelected));
IDetailPropertyRow& AttenuationShapeRow = ChildBuilder.AddChildProperty( AttenuationShapeHandle.ToSharedRef() );
ChildBuilder.AddChildProperty(AttenuationExtentsHandle)
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsBoxSelected))
.DisplayName(TEXT("Extents"))
.ToolTip(NSLOCTEXT("AttenuationSettings", "BoxExtents", "The dimensions of the of the box.").ToString());
ChildBuilder.AddChildContent(TEXT("Radius"))
.NameContent()
[
SNew(STextBlock)
.Text(NSLOCTEXT("AttenuationSettings", "RadiusLabel", "Radius"))
.ToolTipText(NSLOCTEXT("AttenuationSettings", "RadiusToolTip", "The distance from the location of the sound at which falloff begins."))
.Font(StructCustomizationUtils.GetRegularFont())
]
.ValueContent()
[
ExtentXHandle->CreatePropertyValueWidget()
]
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsSphereSelected));
ChildBuilder.AddChildContent(TEXT("CapsuleHalfHeight"))
.NameContent()
[
SNew(STextBlock)
.Text(NSLOCTEXT("AttenuationSettings", "CapsuleHalfHeightLabel", "Capsule Half Height"))
.ToolTipText(NSLOCTEXT("AttenuationSettings", "CapsuleHalfHeightToolTip", "The attenuation capsule's half height."))
.Font(StructCustomizationUtils.GetRegularFont())
]
.ValueContent()
[
ExtentXHandle->CreatePropertyValueWidget()
]
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsCapsuleSelected));
ChildBuilder.AddChildContent(TEXT("CapsuleRadius"))
.NameContent()
[
SNew(STextBlock)
.Text(NSLOCTEXT("AttenuationSettings", "CapsuleRadiusLabel", "Capsule Radius"))
.ToolTipText(NSLOCTEXT("AttenuationSettings", "CapsuleRadiusToolTip", "The attenuation capsule's radius."))
.Font(StructCustomizationUtils.GetRegularFont())
]
.ValueContent()
[
ExtentYHandle->CreatePropertyValueWidget()
]
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsCapsuleSelected));
ChildBuilder.AddChildContent(TEXT("ConeRadius"))
.NameContent()
[
SNew(STextBlock)
.Text(NSLOCTEXT("AttenuationSettings", "ConeRadiusLabel", "Cone Radius"))
.ToolTipText(NSLOCTEXT("AttenuationSettings", "ConeRadiusToolTip", "The attenuation cone's radius."))
.Font(StructCustomizationUtils.GetRegularFont())
]
.ValueContent()
[
ExtentXHandle->CreatePropertyValueWidget()
]
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsConeSelected));
ChildBuilder.AddChildContent(TEXT("ConeAngle"))
.NameContent()
[
SNew(STextBlock)
.Text(NSLOCTEXT("AttenuationSettings", "ConeAngleLabel", "Cone Angle"))
.ToolTipText(NSLOCTEXT("AttenuationSettings", "ConeAngleToolTip", "The angle of the inner edge of the attenuation cone's falloff. Inside this angle sounds will be at full volume."))
.Font(StructCustomizationUtils.GetRegularFont())
]
.ValueContent()
[
ExtentYHandle->CreatePropertyValueWidget()
]
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsConeSelected));
ChildBuilder.AddChildContent(TEXT("ConeFalloffAngle"))
.NameContent()
[
SNew(STextBlock)
.Text(NSLOCTEXT("AttenuationSettings", "ConeFalloffAngleLabel", "Cone Falloff Angle"))
.ToolTipText(NSLOCTEXT("AttenuationSettings", "ConeFalloffAngleToolTip", "The angle of the outer edge of the attenuation cone's falloff. Outside this angle sounds will be inaudible."))
.Font(StructCustomizationUtils.GetRegularFont())
]
.ValueContent()
[
ExtentZHandle->CreatePropertyValueWidget()
]
.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsConeSelected));
IDetailPropertyRow& ConeOffsetRow = ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, ConeOffset)).ToSharedRef());
ConeOffsetRow.Visibility(TAttribute<EVisibility>(this, &FAttenuationSettingsCustomization::IsConeSelected));
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, FalloffDistance)).ToSharedRef());
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, OmniRadius)).ToSharedRef());
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, bAttenuateWithLPF)).ToSharedRef());
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, LPFRadiusMin)).ToSharedRef());
ChildBuilder.AddChildProperty(PropertyHandles.FindChecked(GET_MEMBER_NAME_CHECKED(FAttenuationSettings, LPFRadiusMax)).ToSharedRef());
if (PropertyHandles.Num() != 12)
{
FString PropertyList;
for (auto It(PropertyHandles.CreateConstIterator()); It; ++It)
{
PropertyList += It.Key().ToString() + TEXT(", ");
}
ensureMsgf(false, TEXT("Unexpected property handle(s) customizing FAttenuationSettings: %s"), *PropertyList);
}
}
EVisibility FAttenuationSettingsCustomization::IsConeSelected() const
{
uint8 AttenuationShapeValue;
AttenuationShapeHandle->GetValue(AttenuationShapeValue);
const EAttenuationShape::Type AttenuationShape = (EAttenuationShape::Type)AttenuationShapeValue;
return (AttenuationShape == EAttenuationShape::Cone ? EVisibility::Visible : EVisibility::Hidden);
}
EVisibility FAttenuationSettingsCustomization::IsSphereSelected() const
{
uint8 AttenuationShapeValue;
AttenuationShapeHandle->GetValue(AttenuationShapeValue);
const EAttenuationShape::Type AttenuationShape = (EAttenuationShape::Type)AttenuationShapeValue;
return (AttenuationShape == EAttenuationShape::Sphere ? EVisibility::Visible : EVisibility::Hidden);
}
EVisibility FAttenuationSettingsCustomization::IsBoxSelected() const
{
uint8 AttenuationShapeValue;
AttenuationShapeHandle->GetValue(AttenuationShapeValue);
const EAttenuationShape::Type AttenuationShape = (EAttenuationShape::Type)AttenuationShapeValue;
return (AttenuationShape == EAttenuationShape::Box ? EVisibility::Visible : EVisibility::Hidden);
}
EVisibility FAttenuationSettingsCustomization::IsCapsuleSelected() const
{
uint8 AttenuationShapeValue;
AttenuationShapeHandle->GetValue(AttenuationShapeValue);
const EAttenuationShape::Type AttenuationShape = (EAttenuationShape::Type)AttenuationShapeValue;
return (AttenuationShape == EAttenuationShape::Capsule ? EVisibility::Visible : EVisibility::Hidden);
}
EVisibility FAttenuationSettingsCustomization::IsNaturalSoundSelected() const
{
uint8 DistanceAlgorithmValue;
DistanceAlgorithmHandle->GetValue(DistanceAlgorithmValue);
const ESoundDistanceModel DistanceAlgorithm = (ESoundDistanceModel)DistanceAlgorithmValue;
return (DistanceAlgorithm == ATTENUATION_NaturalSound ? EVisibility::Visible : EVisibility::Hidden);
}