You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
1) Root motion delta flow supported through all anim nodes deriving from FAnimNode_AssetPlayerBase and montages. 2) Stride/Orientation warping feature graph-driven evaluation modes which leverage root motion delta flow (graph-driven slope warping currently disabled). 3) Root motion flow connected to the Animation Warping plugin. 4) Pose Warping test map featuring various motion "styles" connected to pose warping (Motion Matching, Blend Space Graphs/Assets, Sequence Players, Evaluators). #preflight 6092380a58c4790001a3e9b6 #rb aaron.cox, braeden.shosa, thomas.sarkanen #jira none #fyi laurent.delayen [CL 16208667 by koray hagen in ue5-main branch]
184 lines
8.7 KiB
C++
184 lines
8.7 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "AnimGraphModule.h"
|
|
#include "Textures/SlateIcon.h"
|
|
#include "AnimGraphCommands.h"
|
|
#include "Modules/ModuleManager.h"
|
|
#include "AnimNodeEditModes.h"
|
|
#include "EditorModeRegistry.h"
|
|
#include "AnimNodeEditMode.h"
|
|
#include "Modules/ModuleManager.h"
|
|
#include "PropertyEditorModule.h"
|
|
#include "AnimGraphNode_PoseDriver.h"
|
|
#include "PoseDriverDetails.h"
|
|
#include "EditModes/TwoBoneIKEditMode.h"
|
|
#include "EditModes/ObserveBoneEditMode.h"
|
|
#include "EditModes/ModifyBoneEditMode.h"
|
|
#include "EditModes/FabrikEditMode.h"
|
|
#include "EditModes/PoseDriverEditMode.h"
|
|
#include "EditModes/SplineIKEditMode.h"
|
|
#include "EditModes/LookAtEditMode.h"
|
|
#include "EditModes/CCDIKEditMode.h"
|
|
#include "AnimBlueprintPinInfoDetails.h"
|
|
#include "BlueprintEditorModule.h"
|
|
#include "AnimGraphDetails.h"
|
|
#include "AnimationGraphSchema.h"
|
|
#include "AnimBlueprintCompiler.h"
|
|
#include "Animation/AnimAttributes.h"
|
|
#include "AnimGraphAttributes.h"
|
|
#include "Animation/AnimSync.h"
|
|
#include "Animation/AnimNode_Inertialization.h"
|
|
#include "Animation/AnimRootMotionProvider.h"
|
|
|
|
IMPLEMENT_MODULE(FAnimGraphModule, AnimGraph);
|
|
|
|
#define LOCTEXT_NAMESPACE "AnimGraphModule"
|
|
|
|
void FAnimGraphModule::StartupModule()
|
|
{
|
|
FAnimGraphCommands::Register();
|
|
|
|
FKismetCompilerContext::RegisterCompilerForBP(UAnimBlueprint::StaticClass(), [](UBlueprint* InBlueprint, FCompilerResultsLog& InMessageLog, const FKismetCompilerOptions& InCompileOptions)
|
|
{
|
|
return MakeShared<FAnimBlueprintCompilerContext>(CastChecked<UAnimBlueprint>(InBlueprint), InMessageLog, InCompileOptions);
|
|
});
|
|
|
|
// Register the editor modes
|
|
FEditorModeRegistry::Get().RegisterMode<FAnimNodeEditMode>(AnimNodeEditModes::AnimNode, LOCTEXT("AnimNodeEditMode", "Anim Node"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FTwoBoneIKEditMode>(AnimNodeEditModes::TwoBoneIK, LOCTEXT("TwoBoneIKEditMode", "2-Bone IK"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FObserveBoneEditMode>(AnimNodeEditModes::ObserveBone, LOCTEXT("ObserveBoneEditMode", "Observe Bone"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FModifyBoneEditMode>(AnimNodeEditModes::ModifyBone, LOCTEXT("ModifyBoneEditMode", "Modify Bone"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FFabrikEditMode>(AnimNodeEditModes::Fabrik, LOCTEXT("FabrikEditMode", "Fabrik"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FPoseDriverEditMode>(AnimNodeEditModes::PoseDriver, LOCTEXT("PoseDriverEditMode", "PoseDriver"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FSplineIKEditMode>(AnimNodeEditModes::SplineIK, LOCTEXT("SplineIKEditMode", "Spline IK"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FLookAtEditMode>(AnimNodeEditModes::LookAt, LOCTEXT("LookAtEditMode", "LookAt"), FSlateIcon(), false);
|
|
FEditorModeRegistry::Get().RegisterMode<FCCDIKEditMode>(AnimNodeEditModes::CCDIK, LOCTEXT("CCDIKEditMode", "CCD IK"), FSlateIcon(), false);
|
|
|
|
// Register details customization
|
|
FPropertyEditorModule& PropertyModule = FModuleManager::LoadModuleChecked<FPropertyEditorModule>("PropertyEditor");
|
|
PropertyModule.RegisterCustomClassLayout(UAnimGraphNode_PoseDriver::StaticClass()->GetFName(), FOnGetDetailCustomizationInstance::CreateStatic(&FPoseDriverDetails::MakeInstance));
|
|
|
|
PropertyModule.RegisterCustomPropertyTypeLayout("AnimBlueprintFunctionPinInfo", FOnGetPropertyTypeCustomizationInstance::CreateStatic(&FAnimBlueprintFunctionPinInfoDetails::MakeInstance));
|
|
|
|
// Register built-in graph attributes
|
|
UAnimGraphAttributes* AnimGraphAttributes = GetMutableDefault<UAnimGraphAttributes>();
|
|
AnimGraphAttributes->LoadConfig();
|
|
|
|
AnimGraphAttributes->Register(
|
|
FAnimGraphAttributeDesc(
|
|
UE::Anim::FAttributes::Pose,
|
|
EAnimGraphAttributeBlend::Blendable,
|
|
FSlateBrush(),
|
|
LOCTEXT("Pose", "Pose"),
|
|
LOCTEXT("PoseToolTip", "Pose: Transforms for all bones in the current LOD, blendable"),
|
|
FEditorStyle::GetSlateColor("AnimGraph.Attribute.Pose.Color"),
|
|
EAnimGraphAttributesDisplayMode::HideOnPins)
|
|
);
|
|
|
|
AnimGraphAttributes->Register(
|
|
FAnimGraphAttributeDesc(
|
|
UE::Anim::FAttributes::Curves,
|
|
EAnimGraphAttributeBlend::Blendable,
|
|
*FEditorStyle::GetBrush("AnimGraph.Attribute.Curves.Icon"),
|
|
LOCTEXT("Curves", "Curves"),
|
|
LOCTEXT("CurvesToolTip", "Curves: Floating point curve attributes, blendable"),
|
|
FEditorStyle::GetSlateColor("AnimGraph.Attribute.Curves.Color"),
|
|
EAnimGraphAttributesDisplayMode::Automatic)
|
|
);
|
|
|
|
AnimGraphAttributes->Register(
|
|
FAnimGraphAttributeDesc(
|
|
UE::Anim::FAttributes::Attributes,
|
|
EAnimGraphAttributeBlend::Blendable,
|
|
*FEditorStyle::GetBrush("AnimGraph.Attribute.Attributes.Icon"),
|
|
LOCTEXT("Attributes", "Attributes"),
|
|
LOCTEXT("AttributesToolTip", "Attributes: Misc. custom attributes, blendable"),
|
|
FEditorStyle::GetSlateColor("AnimGraph.Attribute.Attributes.Color"),
|
|
EAnimGraphAttributesDisplayMode::Automatic)
|
|
);
|
|
|
|
AnimGraphAttributes->Register(
|
|
FAnimGraphAttributeDesc(
|
|
UE::Anim::FAnimSync::Attribute,
|
|
EAnimGraphAttributeBlend::NonBlendable,
|
|
*FEditorStyle::Get().GetBrush("AnimGraph.Attribute.Sync.Icon"),
|
|
LOCTEXT("Sync", "Sync"),
|
|
LOCTEXT("SyncToolTip", "Sync: Synchronization between the playback of different assets present in the graph, not blendable"),
|
|
FEditorStyle::Get().GetSlateColor("AnimGraph.Attribute.Sync.Color"),
|
|
EAnimGraphAttributesDisplayMode::Automatic)
|
|
);
|
|
|
|
AnimGraphAttributes->Register(
|
|
FAnimGraphAttributeDesc(
|
|
UE::Anim::IAnimRootMotionProvider::RootMotionDeltaAttributeName,
|
|
EAnimGraphAttributeBlend::Blendable,
|
|
*FEditorStyle::Get().GetBrush("AnimGraph.Attribute.RootMotionDelta.Icon"),
|
|
LOCTEXT("RootMotionDelta", "Root Motion Delta"),
|
|
LOCTEXT("RootMotionDeltaToolTip", "Root Motion Delta: Per-frame root motion delta transform, blendable"),
|
|
FEditorStyle::Get().GetSlateColor("AnimGraph.Attribute.RootMotionDelta.Color"),
|
|
EAnimGraphAttributesDisplayMode::Automatic)
|
|
);
|
|
|
|
AnimGraphAttributes->Register(
|
|
FAnimGraphAttributeDesc(
|
|
UE::Anim::IInertializationRequester::Attribute,
|
|
EAnimGraphAttributeBlend::NonBlendable,
|
|
*FEditorStyle::Get().GetBrush("AnimGraph.Attribute.InertialBlending.Icon"),
|
|
LOCTEXT("InertialBlending", "Inertialize"),
|
|
LOCTEXT("InertialBlendingToolTip", "Inertial Blending: Used to blend between poses preserving bone velocities, not blendable"),
|
|
FEditorStyle::Get().GetSlateColor("AnimGraph.Attribute.InertialBlending.Color"),
|
|
EAnimGraphAttributesDisplayMode::Automatic)
|
|
);
|
|
|
|
// Register BP-editor function customization once the Kismet module is loaded.
|
|
if (FModuleManager::Get().IsModuleLoaded("Kismet"))
|
|
{
|
|
FBlueprintEditorModule& BlueprintEditorModule = FModuleManager::GetModuleChecked<FBlueprintEditorModule>("Kismet");
|
|
BlueprintEditorModule.RegisterGraphCustomization(GetDefault<UAnimationGraphSchema>(), FOnGetGraphCustomizationInstance::CreateStatic(&FAnimGraphDetails::MakeInstance));
|
|
}
|
|
else
|
|
{
|
|
FModuleManager::Get().OnModulesChanged().AddLambda([](FName InModuleName, EModuleChangeReason InReason)
|
|
{
|
|
if (InReason == EModuleChangeReason::ModuleLoaded && InModuleName == "Kismet")
|
|
{
|
|
FBlueprintEditorModule& BlueprintEditorModule = FModuleManager::LoadModuleChecked<FBlueprintEditorModule>("Kismet");
|
|
BlueprintEditorModule.RegisterGraphCustomization(GetDefault<UAnimationGraphSchema>(), FOnGetGraphCustomizationInstance::CreateStatic(&FAnimGraphDetails::MakeInstance));
|
|
}
|
|
});
|
|
}
|
|
}
|
|
|
|
void FAnimGraphModule::ShutdownModule()
|
|
{
|
|
// Unregister the editor modes
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::CCDIK);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::SplineIK);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::PoseDriver);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::Fabrik);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::ModifyBone);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::ObserveBone);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::TwoBoneIK);
|
|
FEditorModeRegistry::Get().UnregisterMode(AnimNodeEditModes::AnimNode);
|
|
|
|
// Unregister details customization
|
|
if (UObjectInitialized() && FModuleManager::Get().IsModuleLoaded(TEXT("PropertyEditor")))
|
|
{
|
|
// Unregister details customization
|
|
FPropertyEditorModule* PropertyModule = FModuleManager::GetModulePtr<FPropertyEditorModule>("PropertyEditor");
|
|
if (PropertyModule)
|
|
{
|
|
PropertyModule->UnregisterCustomClassLayout(UAnimGraphNode_PoseDriver::StaticClass()->GetFName());
|
|
PropertyModule->UnregisterCustomPropertyTypeLayout("AnimBlueprintFunctionPinInfo");
|
|
}
|
|
|
|
FBlueprintEditorModule* BlueprintEditorModule = FModuleManager::GetModulePtr<FBlueprintEditorModule>("Kismet");
|
|
if(BlueprintEditorModule)
|
|
{
|
|
BlueprintEditorModule->UnregisterGraphCustomization(GetDefault<UAnimationGraphSchema>());
|
|
}
|
|
}
|
|
}
|
|
|
|
#undef LOCTEXT_NAMESPACE
|