Files
UnrealEngineUWP/Engine/Source/Editor/Persona/Private/PersonaModule.cpp
Martin Wilson c3f66a67de Filtering of anim assets by skeleton in anim blueprints
[CL 2244196 by Martin Wilson in Main branch]
2014-08-05 08:29:26 -04:00

97 lines
4.2 KiB
C++

// Copyright 1998-2014 Epic Games, Inc. All Rights Reserved.
#include "PersonaPrivatePCH.h"
#include "PersonaModule.h"
#include "Persona.h"
#include "BlueprintUtilities.h"
#include "AnimGraphDefinitions.h"
#include "Toolkits/ToolkitManager.h"
#include "Runtime/AssetRegistry/Public/AssetRegistryModule.h"
#include "PropertyEditorModule.h"
#include "SkeletalMeshSocketDetails.h"
#include "AnimNotifyDetails.h"
#include "AnimGraphNodeDetails.h"
#include "AnimInstanceDetails.h"
IMPLEMENT_MODULE( FPersonaModule, Persona );
const FName PersonaAppName = FName(TEXT("PersonaApp"));
void FPersonaModule::StartupModule()
{
MenuExtensibilityManager = MakeShareable(new FExtensibilityManager);
ToolBarExtensibilityManager = MakeShareable(new FExtensibilityManager);
// Load all blueprint animnotifies from asset registry so they are available from drop downs in anim segment detail views
{
FAssetRegistryModule& AssetRegistryModule = FModuleManager::LoadModuleChecked<FAssetRegistryModule>(TEXT("AssetRegistry"));
// Collect a full list of assets with the specified class
TArray<FAssetData> AssetData;
AssetRegistryModule.Get().GetAssetsByClass(UBlueprint::StaticClass()->GetFName(), AssetData);
const FName BPParentClassName( TEXT( "ParentClass" ) );
const FString BPAnimNotify( TEXT("Class'/Script/Engine.AnimNotify'" ));
for (int32 AssetIndex = 0; AssetIndex < AssetData.Num(); ++AssetIndex)
{
bool FoundBPNotify = false;
for (TMap<FName, FString>::TConstIterator TagIt(AssetData[ AssetIndex ].TagsAndValues); TagIt; ++TagIt)
{
FString TagValue = AssetData[ AssetIndex ].TagsAndValues.FindRef(BPParentClassName);
if(TagValue == BPAnimNotify)
{
FoundBPNotify = true;
break;
}
}
if(FoundBPNotify)
{
FString BlueprintPath = AssetData[AssetIndex].ObjectPath.ToString();
LoadObject<UBlueprint>(NULL, *BlueprintPath, NULL, 0, NULL);
}
}
}
{
FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
PropertyModule.RegisterCustomClassLayout( "SkeletalMeshSocket", FOnGetDetailCustomizationInstance::CreateStatic( &FSkeletalMeshSocketDetails::MakeInstance ) );
PropertyModule.RegisterCustomClassLayout( "AnimNotify", FOnGetDetailCustomizationInstance::CreateStatic( &FAnimNotifyDetails::MakeInstance ) );
PropertyModule.RegisterCustomClassLayout( "AnimNotifyState", FOnGetDetailCustomizationInstance::CreateStatic(&FAnimNotifyDetails::MakeInstance));
PropertyModule.RegisterCustomClassLayout( "AnimGraphNode_Base", FOnGetDetailCustomizationInstance::CreateStatic( &FAnimGraphNodeDetails::MakeInstance ) );
PropertyModule.RegisterCustomClassLayout( "AnimInstance", FOnGetDetailCustomizationInstance::CreateStatic(&FAnimInstanceDetails::MakeInstance));
PropertyModule.RegisterCustomPropertyTypeLayout( "InputScaleBias", FOnGetPropertyTypeCustomizationInstance::CreateStatic( &FInputScaleBiasCustomization::MakeInstance ) );
PropertyModule.RegisterCustomPropertyTypeLayout( "BoneReference", FOnGetPropertyTypeCustomizationInstance::CreateStatic( &FBoneReferenceCustomization::MakeInstance ) );
}
}
void FPersonaModule::ShutdownModule()
{
MenuExtensibilityManager.Reset();
ToolBarExtensibilityManager.Reset();
// unregsiter when shut down
if(FModuleManager::Get().IsModuleLoaded("PropertyEditor"))
{
FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
PropertyModule.UnregisterCustomClassLayout("SkeletalMeshSocket");
PropertyModule.UnregisterCustomClassLayout("AnimNotify");
PropertyModule.UnregisterCustomClassLayout("AnimNotifyState");
PropertyModule.UnregisterCustomClassLayout("AnimGraphNode_Base");
PropertyModule.UnregisterCustomPropertyTypeLayout("InputScaleBias");
PropertyModule.UnregisterCustomPropertyTypeLayout("BoneReference");
}
}
TSharedRef<IBlueprintEditor> FPersonaModule::CreatePersona( const EToolkitMode::Type Mode, const TSharedPtr< IToolkitHost >& InitToolkitHost, class USkeleton* Skeleton, class UAnimBlueprint* Blueprint, class UAnimationAsset* AnimationAsset, class USkeletalMesh * Mesh )
{
TSharedRef< FPersona > NewPersona( new FPersona() );
NewPersona->InitPersona( Mode, InitToolkitHost, Skeleton, Blueprint, AnimationAsset, Mesh );
return NewPersona;
}