Files
UnrealEngine/Engine/Plugins/Chooser/Source/ChooserEditor/Private/ChooserEditorModule.cpp
2025-05-18 13:04:45 +08:00

111 lines
4.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "ChooserEditorModule.h"
#include "AnimNode_ChooserPlayer.h"
#include "BoolColumnEditor.h"
#include "ChooserEditorStyle.h"
#include "ChooserPropertyAccess.h"
#include "ChooserTableEditor.h"
#include "ChooserTableEditorCommands.h"
#include "CurveOverrideCustomization.h"
#include "EnumColumnEditor.h"
#include "Features/IModularFeatures.h"
#include "FloatDistanceColumnEditor.h"
#include "FloatRangeColumnEditor.h"
#include "FrameTimeCustomization.h"
#include "GameplayTagColumnEditor.h"
#include "GameplayTagQueryColumnEditor.h"
#include "IAssetTools.h"
#include "MultiEnumColumnEditor.h"
#include "ObjectColumnEditor.h"
#include "ObjectClassColumnEditor.h"
#include "OutputFloatColumnEditor.h"
#include "OutputObjectColumnEditor.h"
#include "OutputStructColumnEditor.h"
#include "PropertyAccessChainCustomization.h"
#include "PropertyEditorModule.h"
#include "RandomizeColumnEditor.h"
#include "ChooserTrack.h"
#include "Kismet2/EnumEditorUtils.h"
#include "EnumColumn.h"
#include "UObject/UObjectIterator.h"
#define LOCTEXT_NAMESPACE "ChooserEditorModule"
namespace UE::ChooserEditor
{
FChoosersTrackCreator GChoosersTrackCreator;
void FEnumChangedListener::PostChange(const UUserDefinedEnum* Changed, FEnumEditorUtils::EEnumEditorChangeInfo ChangedType)
{
// iterate over all loaded choosers
for (TObjectIterator<UChooserTable> It; It; ++It)
{
UChooserTable* Chooser = *It;
for (FInstancedStruct& ColumnData : Chooser->ColumnsStructs)
{
if (FEnumColumnBase* EnumColumn = ColumnData.GetMutablePtr<FEnumColumnBase>())
{
EnumColumn->EnumChanged(Changed);
}
}
}
}
void FModule::StartupModule()
{
FChooserEditorStyle::Initialize();
FChooserTableEditor::RegisterWidgets();
RegisterGameplayTagWidgets();
RegisterGameplayTagQueryWidgets();
RegisterFloatDistanceWidgets();
RegisterFloatRangeWidgets();
RegisterOutputFloatWidgets();
RegisterBoolWidgets();
RegisterEnumWidgets();
RegisterMultiEnumWidgets();
RegisterObjectWidgets();
RegisterObjectClassWidgets();
RegisterOutputObjectWidgets();
RegisterStructWidgets();
RegisterRandomizeWidgets();
FChooserTableEditorCommands::Register();
FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
PropertyModule.RegisterCustomPropertyTypeLayout("FloatProperty", FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FFrameTimeCustomization>(); }), MakeShared<FFrameTimePropertyTypeIdentifier>());
PropertyModule.RegisterCustomPropertyTypeLayout(FAnimCurveOverride::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FCurveOverrideCustomization>(); }));
PropertyModule.RegisterCustomPropertyTypeLayout(FAnimCurveOverrideList::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FCurveOverrideListCustomization>(); }));
PropertyModule.RegisterCustomPropertyTypeLayout(FChooserPropertyBinding::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FPropertyAccessChainCustomization>(); }));
PropertyModule.RegisterCustomPropertyTypeLayout(FChooserEnumPropertyBinding::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FPropertyAccessChainCustomization>(); }));
PropertyModule.RegisterCustomPropertyTypeLayout(FChooserObjectPropertyBinding::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FPropertyAccessChainCustomization>(); }));
PropertyModule.RegisterCustomPropertyTypeLayout(FChooserStructPropertyBinding::StaticStruct()->GetFName(), FOnGetPropertyTypeCustomizationInstance::CreateLambda([] { return MakeShared<FPropertyAccessChainCustomization>(); }));
IModularFeatures::Get().RegisterModularFeature( IRewindDebuggerExtension::ModularFeatureName, &RewindDebuggerChooser);
IModularFeatures::Get().RegisterModularFeature(RewindDebugger::IRewindDebuggerTrackCreator::ModularFeatureName, &GChoosersTrackCreator);
IModularFeatures::Get().RegisterModularFeature(TraceServices::ModuleFeatureName, &ChooserTraceModule);
FEnumEditorUtils::FEnumEditorManager::Get().AddListener(&EnumChanged);
}
void FModule::ShutdownModule()
{
IModularFeatures::Get().UnregisterModularFeature( IRewindDebuggerExtension::ModularFeatureName, &RewindDebuggerChooser);
IModularFeatures::Get().UnregisterModularFeature(RewindDebugger::IRewindDebuggerTrackCreator::ModularFeatureName, &GChoosersTrackCreator);
IModularFeatures::Get().UnregisterModularFeature(TraceServices::ModuleFeatureName, &ChooserTraceModule);
FChooserTableEditorCommands::Unregister();
FChooserEditorStyle::Shutdown();
FEnumEditorUtils::FEnumEditorManager::Get().RemoveListener(&EnumChanged);
}
}
IMPLEMENT_MODULE(UE::ChooserEditor::FModule, ChooserEditor);
#undef LOCTEXT_NAMESPACE