void AAudioVolume::PostEditChangeProperty(FPropertyChangedEvent& PropertyChangedEvent)
{
	Super::PostEditChangeProperty(PropertyChangedEvent);

	Settings.Volume = FMath::Clamp<float>( Settings.Volume, 0.0f, 1.0f );
	AmbientZoneSettings.InteriorTime = FMath::Max<float>( 0.01f, AmbientZoneSettings.InteriorTime );
	AmbientZoneSettings.InteriorLPFTime = FMath::Max<float>( 0.01f, AmbientZoneSettings.InteriorLPFTime );
	AmbientZoneSettings.ExteriorTime = FMath::Max<float>( 0.01f, AmbientZoneSettings.ExteriorTime );
	AmbientZoneSettings.ExteriorLPFTime = FMath::Max<float>( 0.01f, AmbientZoneSettings.ExteriorLPFTime );

	if (PropertyChangedEvent.Property && PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(AAudioVolume, Priority))
	{
		GetWorld()->AudioVolumes.Sort([](const AAudioVolume& A, const AAudioVolume& B) { return (A.GetPriority() > B.GetPriority()); });
	}

	if (PropertyChangedEvent.Property && PropertyChangedEvent.Property->GetFName() == GET_MEMBER_NAME_CHECKED(AAudioVolume, bEnabled))
	{
		if (bEnabled)
		{
			AddProxy();
		}
		else
		{
			RemoveProxy();
		}
	}
	else if (bEnabled)
	{
		UpdateProxy();
	}

}
dgCollisionScene::~dgCollisionScene(void)
{
	for (dgList<dgProxy*>::dgListNode* node = m_list.GetFirst(); node; ) {
		dgList<dgProxy*>::dgListNode* const proxyNode = node;
		node = node->GetNext();
		RemoveProxy(proxyNode);
	}
}
void AAudioVolume::OnRep_bEnabled()
{
	if (bEnabled)
	{
		AddProxy();
	}
	else
	{
		RemoveProxy();
	}
}
void AAudioVolume::PostUnregisterAllComponents()
{
	// Route clear to super first.
	Super::PostUnregisterAllComponents();

	GetRootComponent()->TransformUpdated.RemoveAll(this);
	RemoveProxy();

	if (UWorld* World = GetWorld())
	{
		World->AudioVolumes.Remove(this);
	}
}
void AAudioVolume::SetEnabled(const bool bNewEnabled)
{
	if (bNewEnabled != bEnabled)
	{
		bEnabled = bNewEnabled;
		if (bEnabled)
		{
			AddProxy();
		}
		else
		{
			RemoveProxy();
		}
	}
}