// Copyright Epic Games, Inc. All Rights Reserved. #include "PhysicsControlAssetProfileDetailsCustomization.h" #include "PhysicsControlAssetEditor.h" #include "PhysicsControlAsset.h" #include "PhysicsControlComponent.h" #include "PhysicsControlAssetEditorData.h" #include "DetailLayoutBuilder.h" #include "PropertyHandle.h" #define LOCTEXT_NAMESPACE "PhysicsControlAssetProfileDetailsCustomization" //====================================================================================================================== TSharedRef FPhysicsControlAssetProfileDetailsCustomization::MakeInstance( TWeakPtr InPhysicsControlAssetEditor) { return MakeShared(InPhysicsControlAssetEditor); } //====================================================================================================================== void FPhysicsControlAssetProfileDetailsCustomization::CustomizeDetails( const TSharedPtr& InDetailBuilder) { DetailLayoutBuilderWeak = InDetailBuilder; FPhysicsControlAssetProfileDetailsCustomization::CustomizeDetails(*InDetailBuilder); } //====================================================================================================================== void FPhysicsControlAssetProfileDetailsCustomization::CustomizeDetails(IDetailLayoutBuilder& DetailLayoutBuilder) { DetailLayoutBuilder.HideCategory(TEXT("PreviewMesh")); DetailLayoutBuilder.HideCategory(TEXT("Actions")); DetailLayoutBuilder.HideCategory(TEXT("Inheritance")); DetailLayoutBuilder.HideCategory(TEXT("Setup")); DetailLayoutBuilder.HideCategory(TEXT("SetupEditing")); const TSharedRef ProfilesProperty = DetailLayoutBuilder.GetProperty( GET_MEMBER_NAME_CHECKED(UPhysicsControlAsset, MyProfiles)); ProfilesProperty->SetOnPropertyValueChanged(FSimpleDelegate::CreateSP( this, &FPhysicsControlAssetProfileDetailsCustomization::OnProfilesChanged)); ProfilesProperty->SetOnChildPropertyValueChanged(FSimpleDelegate::CreateSP( this, &FPhysicsControlAssetProfileDetailsCustomization::OnProfileDetailsChanged)); } //====================================================================================================================== // This is called when a parameter in one of the profiles changes void FPhysicsControlAssetProfileDetailsCustomization::OnProfileDetailsChanged() { if (TSharedPtr PCAE = PhysicsControlAssetEditor.Pin()) { UPhysicsControlAsset* PhysicsControlAsset = PCAE->GetEditorData()->PhysicsControlAsset.Get(); if (PhysicsControlAsset->bAutoCompileProfiles) { TArray DirtyProfiles; if (PhysicsControlAsset->bAutoInvokeProfiles && PCAE->IsRunningSimulation()) { DirtyProfiles = PhysicsControlAsset->GetDirtyProfiles(); } PhysicsControlAsset->Compile(); for (FName DirtyProfile : DirtyProfiles) { InvokeControlProfile(DirtyProfile); } } } } //====================================================================================================================== // This is called when the list of profiles changes (i.e. profile added/removed) void FPhysicsControlAssetProfileDetailsCustomization::OnProfilesChanged() { if (TSharedPtr PCAE = PhysicsControlAssetEditor.Pin()) { UPhysicsControlAsset* PhysicsControlAsset = PCAE->GetEditorData()->PhysicsControlAsset.Get(); if (PhysicsControlAsset->bAutoCompileProfiles) { PhysicsControlAsset->Compile(); } } } //====================================================================================================================== FReply FPhysicsControlAssetProfileDetailsCustomization::InvokeControlProfile(FName ProfileName) { if (TSharedPtr PCAE = PhysicsControlAssetEditor.Pin()) { // Danny TODO handle the RBWC mode UPhysicsControlComponent* PCC = PCAE->GetEditorData()->PhysicsControlComponent.Get(); if (PCC) { PCC->InvokeControlProfile(ProfileName); } } return FReply::Handled(); } #undef LOCTEXT_NAMESPACE