Files
UnrealEngine/Engine/Plugins/Experimental/PhysicsControl/Source/PhysicsControlEditor/Private/PhysicsControlAssetSetupDetailsCustomization.cpp
Brandyn / Techy fcc1b09210 init
2026-04-04 15:40:51 -05:00

88 lines
3.2 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "PhysicsControlAssetSetupDetailsCustomization.h"
#include "PhysicsControlAssetActions.h"
#include "PhysicsControlAssetEditor.h"
#include "PhysicsControlAsset.h"
#include "PhysicsControlAssetEditorData.h"
#include "DetailLayoutBuilder.h"
#include "PropertyHandle.h"
#define LOCTEXT_NAMESPACE "PhysicsControlAssetSetupDetailsCustomization"
//======================================================================================================================
TSharedRef<IDetailCustomization> FPhysicsControlAssetSetupDetailsCustomization::MakeInstance(
TWeakPtr<FPhysicsControlAssetEditor> InPhysicsControlAssetEditor)
{
return MakeShared<FPhysicsControlAssetSetupDetailsCustomization>(InPhysicsControlAssetEditor);
}
//======================================================================================================================
void FPhysicsControlAssetSetupDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailLayoutBuilder)
{
DetailLayoutBuilder.HideCategory(TEXT("Profiles"));
DetailLayoutBuilder.HideCategory(TEXT("ProfileEditing"));
TArray<TSharedRef<IPropertyHandle>> Properties;
Properties.Push(DetailLayoutBuilder.GetProperty(
GET_MEMBER_NAME_CHECKED(UPhysicsControlAsset, MyCharacterSetupData)));
Properties.Push(DetailLayoutBuilder.GetProperty(
GET_MEMBER_NAME_CHECKED(UPhysicsControlAsset, MyAdditionalControlsAndModifiers)));
Properties.Push(DetailLayoutBuilder.GetProperty(
GET_MEMBER_NAME_CHECKED(UPhysicsControlAsset, MyAdditionalSets)));
Properties.Push(DetailLayoutBuilder.GetProperty(
GET_MEMBER_NAME_CHECKED(UPhysicsControlAsset, MyInitialControlAndModifierUpdates)));
for (TSharedRef<IPropertyHandle> Property : Properties)
{
Property->SetOnPropertyValueChanged(FSimpleDelegate::CreateSP(
this, &FPhysicsControlAssetSetupDetailsCustomization::OnSetupChanged));
Property->SetOnChildPropertyValueChanged(FSimpleDelegate::CreateSP(
this, &FPhysicsControlAssetSetupDetailsCustomization::OnSetupDetailsChanged));
}
}
//======================================================================================================================
// This is called when a parameter in one of the profiles changes
void FPhysicsControlAssetSetupDetailsCustomization::OnSetupDetailsChanged()
{
if (TSharedPtr<FPhysicsControlAssetEditor> PCAE = PhysicsControlAssetEditor.Pin())
{
UPhysicsControlAsset* PhysicsControlAsset = PCAE->GetEditorData()->PhysicsControlAsset.Get();
bool bNeedToReinitialize = false;
if (PhysicsControlAsset->bAutoReinitSetup && PCAE->IsRunningSimulation())
{
bNeedToReinitialize = PhysicsControlAsset->IsSetupDirty();
}
if (PhysicsControlAsset->bAutoCompileSetup)
{
PhysicsControlAsset->Compile();
}
if (bNeedToReinitialize)
{
PCAE->RecreateControlsAndModifiers();
if (PhysicsControlAsset->bAutoInvokeProfileAfterSetup)
{
PCAE->ReinvokeControlProfile();
}
}
}
}
//======================================================================================================================
// This is called when the list of profiles changes (i.e. profile added/removed)
void FPhysicsControlAssetSetupDetailsCustomization::OnSetupChanged()
{
OnSetupDetailsChanged();
}
#undef LOCTEXT_NAMESPACE