Compare commits

..

No commits in common. "main" and "4.27" have entirely different histories.
main ... 4.27

18 changed files with 261 additions and 271 deletions

View file

@ -1,7 +1,7 @@
{
"FileVersion": 3,
"Version": 2,
"VersionName": "3.0",
"Version": 1,
"VersionName": "2.0",
"FriendlyName": "Mirror Animation System",
"Description": "Incorporates functionalities that allow the mirroring of animations with their root motion at runtime, as well as inside the editor.",
"Category": "Animation",
@ -10,27 +10,27 @@
"DocsURL": "https://github.com/Rexocrates/Mirror_Animation_System/blob/main/Mirror%20Animation%20System%20Documentation.pdf",
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/content/36b1fe6319794a25ab6dfffb82e1b29b",
"SupportURL": "https://github.com/Rexocrates/Mirror_Animation_System/issues",
"EngineVersion": "5.4.0",
"CanContainContent": true,
"EngineVersion": "4.27.0",
"CanContainContent": false,
"Installed": true,
"Modules": [
{
"Name": "MirrorAnimationSystem",
"Type": "Runtime",
"LoadingPhase": "PreDefault",
"WhitelistPlatforms": [ "Win64" ]
"WhitelistPlatforms": [ "Win64", "Win32", "PS4", "XboxOne", "Mac" ]
},
{
"Name": "MirrorAnimationSystemDev",
"Type": "DeveloperTool",
"LoadingPhase": "PreDefault",
"WhitelistPlatforms": [ "Win64" ]
"WhitelistPlatforms": [ "Win64", "Win32", "PS4", "XboxOne", "Mac" ]
},
{
"Name": "MirrorAnimationSystemEditor",
"Type": "Editor",
"LoadingPhase": "PreDefault",
"WhitelistPlatforms": [ "Win64" ]
"WhitelistPlatforms": [ "Win64", "Win32", "PS4", "XboxOne", "Mac" ]
}
]
}

View file

@ -1,17 +1,17 @@
// Copyright 2017-2021 Rexocrates. All Rights Reserved.
#include "AnimNode_FullMirror.h"
#include "AnimNode_Mirror.h"
#include "MirrorAnimationSystem.h"
//#include "AnimationRuntime.h"
FAnimNode_FullMirror::FAnimNode_FullMirror()
FAnimNode_Mirror::FAnimNode_Mirror()
:
MirrorTable(NULL)
{
}
void FAnimNode_FullMirror::Initialize_AnyThread(const FAnimationInitializeContext & Context)
void FAnimNode_Mirror::Initialize_AnyThread(const FAnimationInitializeContext & Context)
{
FAnimNode_Base::Initialize_AnyThread(Context);
@ -19,20 +19,20 @@ void FAnimNode_FullMirror::Initialize_AnyThread(const FAnimationInitializeContex
BasePose.Initialize(Context);
}
void FAnimNode_FullMirror::CacheBones_AnyThread(const FAnimationCacheBonesContext & Context)
void FAnimNode_Mirror::CacheBones_AnyThread(const FAnimationCacheBonesContext & Context)
{
BasePose.CacheBones(Context);
}
void FAnimNode_FullMirror::Update_AnyThread(const FAnimationUpdateContext & Context)
void FAnimNode_Mirror::Update_AnyThread(const FAnimationUpdateContext & Context)
{
GetEvaluateGraphExposedInputs().Execute(Context);
BasePose.Update(Context);
}
void FAnimNode_FullMirror::Evaluate_AnyThread(FPoseContext & Output)
void FAnimNode_Mirror::Evaluate_AnyThread(FPoseContext & Output)
{
// Evaluate the input
@ -143,7 +143,7 @@ void FAnimNode_FullMirror::Evaluate_AnyThread(FPoseContext & Output)
}
void FAnimNode_FullMirror::GatherDebugData(FNodeDebugData & DebugData)
void FAnimNode_Mirror::GatherDebugData(FNodeDebugData & DebugData)
{
FString DebugLine = DebugData.GetNodeName(this);

View file

@ -1,5 +1,5 @@
// Copyright 2017-2021 Rexocrates. All Rights Reserved.
#include "AnimNode_FullMirrorCS.h"
#include "AnimNode_MirrorCS.h"
#include "MirrorAnimationSystem.h"
#include "AnimationRuntime.h"
@ -8,16 +8,16 @@
#include "MASUtils.h"
/////////////////////////////////////////////////////
// FAnimNode_FullMirrorCS
// FAnimNode_MirrorCS
FAnimNode_FullMirrorCS::~FAnimNode_FullMirrorCS()
FAnimNode_MirrorCS::~FAnimNode_MirrorCS()
{
TwinPairs.Empty();
NonTwinIDs.Empty();
NonTwinFlipAxis.Empty();
}
FAnimNode_FullMirrorCS::FAnimNode_FullMirrorCS() :
FAnimNode_MirrorCS::FAnimNode_MirrorCS() :
CompletlySymmetrical(false)
{
TwinPairs.Empty();
@ -25,12 +25,12 @@ CompletlySymmetrical(false)
NonTwinFlipAxis.Empty();
}
void FAnimNode_FullMirrorCS::GatherDebugData(FNodeDebugData& DebugData)
void FAnimNode_MirrorCS::GatherDebugData(FNodeDebugData& DebugData)
{
Super::GatherDebugData(DebugData);
}
void FAnimNode_FullMirrorCS::EvaluateSkeletalControl_AnyThread(FComponentSpacePoseContext& Output, TArray<FBoneTransform>& OutBoneTransforms)
void FAnimNode_MirrorCS::EvaluateSkeletalControl_AnyThread(FComponentSpacePoseContext& Output, TArray<FBoneTransform>& OutBoneTransforms)
{
check(OutBoneTransforms.Num() == 0);
@ -88,7 +88,7 @@ void FAnimNode_FullMirrorCS::EvaluateSkeletalControl_AnyThread(FComponentSpacePo
// twin 1<EFBFBD>
// twin 1º
{
const FTransform MirrRef = RefTM * TwinMirrorModTM;
const FTransform Delta = TwinRefTM.GetRelativeTransform(MirrRef);
@ -126,7 +126,7 @@ void FAnimNode_FullMirrorCS::EvaluateSkeletalControl_AnyThread(FComponentSpacePo
NewCSTMs[TwinBoneIndex] = MirrTM;
}
// twin 2<EFBFBD>
// twin 2º
{
FTransform TwinMirrRef = TwinRefTM * TwinMirrorModTM;
const FQuat TwinDeltaQuat = TwinMirrRef.GetRotation().Inverse() * RefTM.GetRotation();
@ -171,25 +171,25 @@ void FAnimNode_FullMirrorCS::EvaluateSkeletalControl_AnyThread(FComponentSpacePo
}
}
bool FAnimNode_FullMirrorCS::IsValidToEvaluate(const USkeleton* Skeleton, const FBoneContainer& RequiredBones)
bool FAnimNode_MirrorCS::IsValidToEvaluate(const USkeleton* Skeleton, const FBoneContainer& RequiredBones)
{
return true;
}
void FAnimNode_FullMirrorCS::InitializeBoneReferences(const FBoneContainer& RequiredBones)
void FAnimNode_MirrorCS::InitializeBoneReferences(const FBoneContainer& RequiredBones)
{
Super::InitializeBoneReferences(RequiredBones);
SetMirrorDataIfDirty(RequiredBones.GetReferenceSkeleton());
}
void FAnimNode_FullMirrorCS::Initialize_AnyThread(const FAnimationInitializeContext& Context)
void FAnimNode_MirrorCS::Initialize_AnyThread(const FAnimationInitializeContext& Context)
{
Super::Initialize_AnyThread(Context);
}
void FAnimNode_FullMirrorCS::SetMirrorDataIfDirty(const FReferenceSkeleton& RefSkeleton)
void FAnimNode_MirrorCS::SetMirrorDataIfDirty(const FReferenceSkeleton& RefSkeleton)
{
if (RefSkeleton.GetNum() == LastBoneNum) return;

View file

@ -243,12 +243,12 @@ void UExtCharacterMovementComponent::PerformMovement(float DeltaSeconds)
FTransform TmpRootMootTr = RootMotionParams.GetRootMotionTransform();
TmpRootMootTr.Mirror(MirrorAxis, FlipAxis);
TmpRootMootTr.SetScale3D(TmpRootMootTr.GetScale3D().GetAbs());
RootMotionParams.Set(ConvertLocalRootMotionToWorld(TmpRootMootTr,DeltaSeconds));
RootMotionParams.Set(ConvertLocalRootMotionToWorld(TmpRootMootTr));
}
else
{
// Convert Local Space Root Motion to world space. Do it right before used by physics to make sure we use up to date transforms, as translation is relative to rotation.
RootMotionParams.Set(ConvertLocalRootMotionToWorld(RootMotionParams.GetRootMotionTransform(),DeltaSeconds));
RootMotionParams.Set(ConvertLocalRootMotionToWorld(RootMotionParams.GetRootMotionTransform()));
}
}
@ -320,7 +320,7 @@ void UExtCharacterMovementComponent::PerformMovement(float DeltaSeconds)
// Update character state based on change from movement
UpdateCharacterStateAfterMovement(DeltaSeconds);
if ((bAllowPhysicsRotationDuringAnimRootMotion || !HasAnimRootMotion()) ) //@TODO: check if not owned by Levelsequence
if ((bAllowPhysicsRotationDuringAnimRootMotion || !HasAnimRootMotion()) && !CharacterOwner->IsMatineeControlled())
{
PhysicsRotation(DeltaSeconds);
}

View file

@ -4,14 +4,14 @@
#include "Animation/AnimNodeBase.h"
#include "Animation/AnimInstanceProxy.h"
#include "MirrorTable.h"
#include "AnimNode_FullMirror.generated.h"
#include "AnimNode_Mirror.generated.h"
/**
*
*/
/*Runtime code for the AnimGraph Node Mirror Pose,
takes in a pose in local space and Mirrors each bone according to a Mirror Table*/
USTRUCT(BlueprintInternalUseOnly)
struct MIRRORANIMATIONSYSTEM_API FAnimNode_FullMirror : public FAnimNode_Base
struct MIRRORANIMATIONSYSTEM_API FAnimNode_Mirror : public FAnimNode_Base
{
GENERATED_BODY()
@ -22,7 +22,7 @@ struct MIRRORANIMATIONSYSTEM_API FAnimNode_FullMirror : public FAnimNode_Base
UMirrorTable* MirrorTable;
public:
FAnimNode_FullMirror();
FAnimNode_Mirror();
// FAnimNode_Base interface
virtual void Initialize_AnyThread(const FAnimationInitializeContext& Context) override;

View file

@ -10,12 +10,12 @@
#include "MirrorTable.h"
#include "AnimNode_FullMirrorCS.generated.h"
#include "AnimNode_MirrorCS.generated.h"
// Component Space version of the Mirror Pose node.
USTRUCT(BlueprintInternalUseOnly)
struct MIRRORANIMATIONSYSTEM_API FAnimNode_FullMirrorCS : public FAnimNode_SkeletalControlBase
struct MIRRORANIMATIONSYSTEM_API FAnimNode_MirrorCS : public FAnimNode_SkeletalControlBase
{
GENERATED_BODY()
@ -29,8 +29,8 @@ struct MIRRORANIMATIONSYSTEM_API FAnimNode_FullMirrorCS : public FAnimNode_Skele
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = MirrorBones)
FString Substring_B;
~FAnimNode_FullMirrorCS();
FAnimNode_FullMirrorCS();
~FAnimNode_MirrorCS();
FAnimNode_MirrorCS();
// FAnimNode_Base interface
virtual void GatherDebugData(FNodeDebugData& DebugData) override;

View file

@ -15,25 +15,25 @@ struct MIRRORANIMATIONSYSTEM_API FMirrorBone
GENERATED_BODY()
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
FName BoneName;
FName BoneName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
TEnumAsByte<EAxis::Type> MirrorAxis = EAxis::None;
TEnumAsByte<EAxis::Type> MirrorAxis;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
TEnumAsByte<EAxis::Type> FlipAxis = EAxis::None;
TEnumAsByte<EAxis::Type> FlipAxis;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
FRotator RotationOffset = FRotator::ZeroRotator;
FRotator RotationOffset;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
bool IsTwinBone = false;
bool IsTwinBone;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
FName TwinBoneName;
FName TwinBoneName;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorAnimation")
bool MirrorTranslation = false;
bool MirrorTranslation;
};
/*Data asset class that holds the MirrorBone's parameters for an entire skeleton,
@ -42,8 +42,8 @@ UCLASS(BlueprintType)
class MIRRORANIMATIONSYSTEM_API UMirrorTable : public UDataAsset
{
GENERATED_BODY()
public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorBoneSettings")
TArray<FMirrorBone> MirrorBones;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MirrorBoneSettings")
TArray <FMirrorBone> MirrorBones;
};

View file

@ -11,7 +11,8 @@
#if WITH_EDITOR
#include "AssetToolsModule.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "AssetRegistryModule.h"
#include "Toolkits/AssetEditorManager.h"
#include "Framework/Notifications/NotificationManager.h"
#include "Widgets/Notifications/SNotificationList.h"
@ -152,13 +153,8 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
int NumMirrorBones = MirrorTable->MirrorBones.Num();
int NumFrames = MirrorSequence->GetNumberOfFrames();
IAnimationDataController& MirrorSequenceController = MirrorSequence->GetController();
TArray<FBoneAnimationTrack> SourceBoneAnimData = MirrorSequenceController.GetModel()->GetBoneAnimationTracks();
/************* SourceRawAnimDatas should be replaced by SourceBoneAnimData ************/
// TArray<FRawAnimSequenceTrack> SourceRawAnimDatas = MirrorSequence->GetRawAnimationData();
TArray<FName> TrackNames;
MirrorSequenceController.GetModel()->GetBoneTrackNames(TrackNames);
TArray<FRawAnimSequenceTrack> SourceRawAnimDatas = MirrorSequence->GetRawAnimationData();
const auto& TrackNames = MirrorSequence->GetAnimationTrackNames();
for (int i = 0; i < NumMirrorBones; i++)
{
@ -184,67 +180,66 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
continue;
}
TArray <FVector3f> MirrorPosKeys;
TArray <FQuat4f> MirrorRotKeys;
TArray <FVector3f> MirrorScaleKeys;
TArray <FVector> MirrorPosKeys;
TArray <FQuat> MirrorRotKeys;
TArray <FVector> MirrorScaleKeys;
TArray <FVector3f> TwinMirrorPosKeys;
TArray <FQuat4f> TwinMirrorRotKeys;
TArray <FVector3f> TwinMirrorScaleKeys;
TArray <FVector> TwinMirrorPosKeys;
TArray <FQuat> TwinMirrorRotKeys;
TArray <FVector> TwinMirrorScaleKeys;
// Original Bone
if (TrackIndex != INDEX_NONE)
{
auto& MirroredRawTrack = SourceBoneAnimData[TrackIndex];
auto& MirroredRawTrack = SourceRawAnimDatas[TrackIndex];
for (int u = 0; u < NumFrames; u++)
{
FTransform3f MirrorTM;
FTransform MirrorTM;
bool bSetPos = false;
bool bSetRot = false;
bool bSetScale = false;
if (MirroredRawTrack.InternalTrackData.PosKeys.IsValidIndex(u))
if (MirroredRawTrack.PosKeys.IsValidIndex(u))
{
MirrorTM.SetTranslation(MirroredRawTrack.InternalTrackData.PosKeys[u]);
MirrorTM.SetTranslation(MirroredRawTrack.PosKeys[u]);
bSetPos = true;
}
if (MirroredRawTrack.InternalTrackData.RotKeys.IsValidIndex(u))
if (MirroredRawTrack.RotKeys.IsValidIndex(u))
{
MirrorTM.SetRotation(MirroredRawTrack.InternalTrackData.RotKeys[u]);
MirrorTM.SetRotation(MirroredRawTrack.RotKeys[u]);
bSetRot = true;
}
if (MirroredRawTrack.InternalTrackData.ScaleKeys.IsValidIndex(u))
if (MirroredRawTrack.ScaleKeys.IsValidIndex(u))
{
MirrorTM.SetScale3D(MirroredRawTrack.InternalTrackData.ScaleKeys[u]);
MirrorTM.SetScale3D(MirroredRawTrack.ScaleKeys[u]);
bSetScale = true;
}
MirrorTM.Mirror(CurrentBone.MirrorAxis, CurrentBone.FlipAxis);
FRotator3f BoneNewRotation = MirrorTM.Rotator(); // quaternion to rotator
FRotator BoneNewRotation = MirrorTM.Rotator();
BoneNewRotation.Yaw += CurrentBone.RotationOffset.Yaw;
BoneNewRotation.Roll += CurrentBone.RotationOffset.Roll;
BoneNewRotation.Pitch += CurrentBone.RotationOffset.Pitch;
MirrorTM.SetRotation(BoneNewRotation.Quaternion());
MirrorTM.SetRotation(FQuat(BoneNewRotation));
MirrorTM.SetScale3D(MirrorTM.GetScale3D().GetAbs());
MirrorTM.NormalizeRotation();
if (bSetPos)
{
MirrorPosKeys.Add(FVector3f(MirrorTM.GetTranslation()));
MirrorPosKeys.Add(MirrorTM.GetTranslation());
}
if (bSetRot)
{
MirrorRotKeys.Add(FQuat4f(MirrorTM.GetRotation()));
MirrorRotKeys.Add(MirrorTM.GetRotation());
}
if (bSetScale)
{
MirrorScaleKeys.Add(FVector3f(MirrorTM.GetScale3D()));
MirrorScaleKeys.Add(MirrorTM.GetScale3D());
}
}
}
@ -264,62 +259,62 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
RefTM.SetScale3D(RefTM.GetScale3D().GetAbs());
RefTM.NormalizeRotation();
MirrorPosKeys.Add(FVector3f(RefTM.GetTranslation()));
MirrorRotKeys.Add(FQuat4f(RefTM.GetRotation()));
MirrorPosKeys.Add(RefTM.GetTranslation());
MirrorRotKeys.Add(RefTM.GetRotation());
}
// Twin Bone
if (TwinTrackIndex != INDEX_NONE)
{
auto& TwinMirroredRawTrack = SourceBoneAnimData[TwinTrackIndex];
auto& TwinMirroredRawTrack = SourceRawAnimDatas[TwinTrackIndex];
for (int u = 0; u < NumFrames; u++)
{
FTransform3f TwinMirrorTM;
FTransform TwinMirrorTM;
bool TwinbSetPos = false;
bool TwinbSetRot = false;
bool TwinbSetScale = false;
if (TwinMirroredRawTrack.InternalTrackData.PosKeys.IsValidIndex(u))
if (TwinMirroredRawTrack.PosKeys.IsValidIndex(u))
{
TwinMirrorTM.SetTranslation(TwinMirroredRawTrack.InternalTrackData.PosKeys[u]);
TwinMirrorTM.SetTranslation(TwinMirroredRawTrack.PosKeys[u]);
TwinbSetPos = true;
}
if (TwinMirroredRawTrack.InternalTrackData.RotKeys.IsValidIndex(u))
if (TwinMirroredRawTrack.RotKeys.IsValidIndex(u))
{
TwinMirrorTM.SetRotation(TwinMirroredRawTrack.InternalTrackData.RotKeys[u]);
TwinMirrorTM.SetRotation(TwinMirroredRawTrack.RotKeys[u]);
TwinbSetRot = true;
}
if (TwinMirroredRawTrack.InternalTrackData.ScaleKeys.IsValidIndex(u))
if (TwinMirroredRawTrack.ScaleKeys.IsValidIndex(u))
{
TwinMirrorTM.SetScale3D(TwinMirroredRawTrack.InternalTrackData.ScaleKeys[u]);
TwinMirrorTM.SetScale3D(TwinMirroredRawTrack.ScaleKeys[u]);
TwinbSetScale = true;
}
TwinMirrorTM.Mirror(CurrentBone.MirrorAxis, CurrentBone.FlipAxis);
FRotator3f TwinBoneNewRotation = TwinMirrorTM.Rotator();
FRotator TwinBoneNewRotation = TwinMirrorTM.Rotator();
TwinBoneNewRotation.Yaw += CurrentBone.RotationOffset.Yaw;
TwinBoneNewRotation.Roll += CurrentBone.RotationOffset.Roll;
TwinBoneNewRotation.Pitch += CurrentBone.RotationOffset.Pitch;
TwinMirrorTM.SetRotation(TwinBoneNewRotation.Quaternion());
TwinMirrorTM.SetRotation(FQuat(TwinBoneNewRotation));
TwinMirrorTM.SetScale3D(TwinMirrorTM.GetScale3D().GetAbs());
TwinMirrorTM.NormalizeRotation();
if (TwinbSetPos)
{
TwinMirrorPosKeys.Add(FVector3f(TwinMirrorTM.GetTranslation()));
TwinMirrorPosKeys.Add(TwinMirrorTM.GetTranslation());
}
if (TwinbSetRot)
{
TwinMirrorRotKeys.Add(FQuat4f(TwinMirrorTM.GetRotation()));
TwinMirrorRotKeys.Add(TwinMirrorTM.GetRotation());
}
if (TwinbSetScale)
{
TwinMirrorScaleKeys.Add(FVector3f(TwinMirrorTM.GetScale3D()));
TwinMirrorScaleKeys.Add(TwinMirrorTM.GetScale3D());
}
}
}
@ -339,8 +334,8 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
RefTM.SetScale3D(RefTM.GetScale3D().GetAbs());
RefTM.NormalizeRotation();
TwinMirrorPosKeys.Add(FVector3f(RefTM.GetTranslation()));
TwinMirrorRotKeys.Add(FQuat4f(RefTM.GetRotation()));
TwinMirrorPosKeys.Add(RefTM.GetTranslation());
TwinMirrorRotKeys.Add(RefTM.GetRotation());
}
// Original Bone -> Twin Bone
@ -351,9 +346,7 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
NewTrack.RotKeys = MirrorRotKeys;
NewTrack.ScaleKeys = MirrorScaleKeys;
//MirrorSequence->AddNewRawTrack(CurrentBone.TwinBoneName, &NewTrack);
MirrorSequenceController.AddBoneTrack(CurrentBone.TwinBoneName);
MirrorSequenceController.SetBoneTrackKeys(CurrentBone.BoneName,NewTrack.PosKeys,NewTrack.RotKeys,NewTrack.ScaleKeys);
MirrorSequence->AddNewRawTrack(CurrentBone.TwinBoneName, &NewTrack);
}
// Twin Bone -> Original Bone
@ -364,8 +357,7 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
NewTrack.RotKeys = TwinMirrorRotKeys;
NewTrack.ScaleKeys = TwinMirrorScaleKeys;
MirrorSequenceController.AddBoneTrack(CurrentBone.BoneName);
MirrorSequenceController.SetBoneTrackKeys(CurrentBone.BoneName,NewTrack.PosKeys,NewTrack.RotKeys,NewTrack.ScaleKeys);
MirrorSequence->AddNewRawTrack(CurrentBone.BoneName, &NewTrack);
}
}
else
@ -377,47 +369,47 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
continue;
}
FBoneAnimationTrack MirroredRawTrack = SourceBoneAnimData[TrackIndex];
FRawAnimSequenceTrack MirroredRawTrack = SourceRawAnimDatas[TrackIndex];
//MirrorAllFrames
TArray <FVector3f> MirrorPosKeys;
TArray <FQuat4f> MirrorRotKeys;
TArray <FVector3f> MirrorScaleKeys;
TArray <FVector> MirrorPosKeys;
TArray <FQuat> MirrorRotKeys;
TArray <FVector> MirrorScaleKeys;
for (int u = 0; u < NumFrames; u++)
{
//Mirror Transform
FTransform3f MirrorTM;
FTransform MirrorTM;
bool bSetPos = false;
bool bSetRot = false;
bool bSetScale = false;
if (MirroredRawTrack.InternalTrackData.PosKeys.IsValidIndex(u))
if (MirroredRawTrack.PosKeys.IsValidIndex(u))
{
MirrorTM.SetTranslation(MirroredRawTrack.InternalTrackData.PosKeys[u]);
MirrorTM.SetTranslation(MirroredRawTrack.PosKeys[u]);
bSetPos = true;
}
if (MirroredRawTrack.InternalTrackData.RotKeys.IsValidIndex(u))
if (MirroredRawTrack.RotKeys.IsValidIndex(u))
{
MirrorTM.SetRotation(MirroredRawTrack.InternalTrackData.RotKeys[u]);
MirrorTM.SetRotation(MirroredRawTrack.RotKeys[u]);
bSetRot = true;
}
if (MirroredRawTrack.InternalTrackData.ScaleKeys.IsValidIndex(u))
if (MirroredRawTrack.ScaleKeys.IsValidIndex(u))
{
MirrorTM.SetScale3D(MirroredRawTrack.InternalTrackData.ScaleKeys[u]);
MirrorTM.SetScale3D(MirroredRawTrack.ScaleKeys[u]);
bSetScale = true;
}
MirrorTM.Mirror(CurrentBone.MirrorAxis, CurrentBone.FlipAxis);
FRotator3f BoneNewRotation = MirrorTM.Rotator();
FRotator BoneNewRotation = MirrorTM.Rotator();
BoneNewRotation.Yaw += CurrentBone.RotationOffset.Yaw;
BoneNewRotation.Roll += CurrentBone.RotationOffset.Roll;
BoneNewRotation.Pitch += CurrentBone.RotationOffset.Pitch;
MirrorTM.SetRotation(BoneNewRotation.Quaternion());
MirrorTM.SetRotation(FQuat(BoneNewRotation));
//MirrorTM.NormalizeRotation();
MirrorTM.SetScale3D(MirrorTM.GetScale3D().GetAbs());
@ -440,43 +432,44 @@ void UMASFunctionLibrary::CreateMirrorSequenceFromAnimSequence(UAnimSequence* Mi
/////////////////////////////////
}
MirroredRawTrack.InternalTrackData.PosKeys = MirrorPosKeys;
MirroredRawTrack.InternalTrackData.RotKeys = MirrorRotKeys;
MirroredRawTrack.InternalTrackData.ScaleKeys = MirrorScaleKeys;
MirroredRawTrack.PosKeys = MirrorPosKeys;
MirroredRawTrack.RotKeys = MirrorRotKeys;
MirroredRawTrack.ScaleKeys = MirrorScaleKeys;
//Finally Setting it in the AnimSequence
//MirrorSequenceController.AddBoneTrack(CurrentBone.BoneName, &MirroredRawTrack);
MirrorSequenceController.AddBoneCurve(CurrentBone.BoneName);
MirrorSequenceController.SetBoneTrackKeys(CurrentBone.BoneName,MirroredRawTrack.InternalTrackData.PosKeys,MirroredRawTrack.InternalTrackData.RotKeys,MirroredRawTrack.InternalTrackData.ScaleKeys);
MirrorSequence->AddNewRawTrack(CurrentBone.BoneName, &MirroredRawTrack);
}
}
//MirrorSequence->ClearBakedTransformData();
MirrorSequenceController.RemoveAllCurvesOfType(ERawCurveTrackTypes::RCT_Transform);
MirrorSequence->ClearBakedTransformData();
MirrorSequence->RawCurveData.TransformCurves.Empty();
MirrorSequence->bNeedsRebake = false;
MirrorSequence->MarkRawDataAsModified();
MirrorSequence->OnRawDataChanged();
MirrorSequence->MarkPackageDirty();
}
}
static FTransform3f GetAnimBoneTM(UAnimSequence* AnimSeq, const int32 BoneTreeIndex, const float AnimTime)
static FTransform GetAnimBoneTM(UAnimSequence* AnimSeq, const int32 BoneTreeIndex, const float AnimTime)
{
USkeleton* Skeleton = AnimSeq->GetSkeleton();
//int32 BoneTreeIndex = Skeleton->GetSkeletonBoneIndexFromMeshBoneIndex(SkelMesh, BoneTreeIndex);
int32 BoneTrackIndex = Skeleton->GetRawAnimationTrackIndex(BoneTreeIndex, AnimSeq);
if (BoneTrackIndex == INDEX_NONE)
{
return FTransform3f(Skeleton->GetReferenceSkeleton().GetRefBonePose()[BoneTreeIndex]);
return Skeleton->GetReferenceSkeleton().GetRefBonePose()[BoneTreeIndex];
}
FTransform BoneTM = FTransform::Identity;
AnimSeq->GetBoneTransform(BoneTM, BoneTrackIndex, AnimTime, true);
return FTransform3f(BoneTM);
return BoneTM;
}
static FTransform3f GetAnimBoneCSTM(UAnimSequence* AnimSeq, const int32 BoneTreeIndex, const float AnimTime)
static FTransform GetAnimBoneCSTM(UAnimSequence* AnimSeq, const int32 BoneTreeIndex, const float AnimTime)
{
USkeleton* Skeleton = AnimSeq->GetSkeleton();
const auto& RefSkeleton = Skeleton->GetReferenceSkeleton();
FTransform3f BoneTMWS = GetAnimBoneTM(AnimSeq, BoneTreeIndex, AnimTime);
FTransform BoneTMWS = GetAnimBoneTM(AnimSeq, BoneTreeIndex, AnimTime);
int32 CurrBone = BoneTreeIndex;
while (true)
{
@ -500,16 +493,15 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
const FString Substring_B,
const bool Symmetrical)
{
IAnimationDataController& Controller = MirrorSequence->GetController();
const int32 NumFrames = Controller.GetModel()->GetNumberOfFrames();
const float DT = MirrorSequence->GetPlayLength() / NumFrames;
const int32 NumFrames = MirrorSequence->GetRawNumberOfFrames();
const float DT = MirrorSequence->SequenceLength / NumFrames;
USkeleton* Skeleton = MirrorSequence->GetSkeleton();
const auto& RefSkeleton = Skeleton->GetReferenceSkeleton();
TArray <bool> Already; Already.SetNumZeroed(Skeleton->GetReferenceSkeleton().GetRawBoneNum());
TArray <bool> Already; Already.SetNumZeroed(Skeleton->GetBoneTree().Num());
TArray<FIntPoint> TwinPairs;
TArray<int32> NonTwinIDs;
@ -518,7 +510,7 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
const bool DeltaStep = !Symmetrical;
FVector3f TwinMirrorScale = FVector3f(1.f);
FVector TwinMirrorScale = FVector(1.f);
FVector TargetAxis = FVector::ZeroVector;
check(MirrorAxis != EAxis::None);
@ -526,7 +518,7 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
TwinMirrorScale[MirrorAxis - 1] = -1.f;
TargetAxis[MirrorAxis - 1] = 1.f;
}
FTransform3f TwinMirrorModTM(FQuat4f::Identity, FVector3f::ZeroVector, TwinMirrorScale);
FTransform TwinMirrorModTM(FQuat::Identity, FVector::ZeroVector, TwinMirrorScale);
TMap<int32, FRawAnimSequenceTrack> BoneTracks;
@ -538,7 +530,7 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
for (int32 j = 0; j < NumFrames; j++)
{
TArray <FTransform3f> NewCSTMs; NewCSTMs.SetNum(RefSkeleton.GetNum());
TArray <FTransform> NewCSTMs; NewCSTMs.SetNum(RefSkeleton.GetNum());
for (int32 i = 0; i < NonTwinIDs.Num(); i++)
{
@ -550,17 +542,17 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
const int32 ParentIndex = RefSkeleton.GetParentIndex(BoneTreeIndex);
if (ParentIndex != INDEX_NONE)
{
NewCSTMs[BoneTreeIndex] = FTransform3f(RefSkeleton.GetRefBonePose()[BoneTreeIndex]) * NewCSTMs[ParentIndex];
NewCSTMs[BoneTreeIndex] = RefSkeleton.GetRefBonePose()[BoneTreeIndex] * NewCSTMs[ParentIndex];
}
else
{
NewCSTMs[BoneTreeIndex] = FTransform3f(RefSkeleton.GetRefBonePose()[BoneTreeIndex]);
NewCSTMs[BoneTreeIndex] = RefSkeleton.GetRefBonePose()[BoneTreeIndex];
}
continue;
}
FTransform3f CSTM = GetAnimBoneCSTM(MirrorSequence, BoneTreeIndex, DT * j);
FTransform CSTM = GetAnimBoneCSTM(MirrorSequence, BoneTreeIndex, DT * j);
CSTM.Mirror(MirrorAxis, NonTwinFlipAxis[i]);
NewCSTMs[BoneTreeIndex] = CSTM;
@ -576,12 +568,12 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
const FCompactPoseBoneIndex TwinCmptBoneIndex(TwinBoneIndex);
const FTransform3f RefTM = FTransform3f(FAnimationRuntime::GetComponentSpaceTransformRefPose(RefSkeleton, BoneIndex));
const FTransform3f TwinRefTM = FTransform3f(FAnimationRuntime::GetComponentSpaceTransformRefPose(RefSkeleton, TwinBoneIndex));
const FTransform RefTM = FAnimationRuntime::GetComponentSpaceTransformRefPose(RefSkeleton, BoneIndex);
const FTransform TwinRefTM = FAnimationRuntime::GetComponentSpaceTransformRefPose(RefSkeleton, TwinBoneIndex);
const FTransform3f TM = GetAnimBoneCSTM(MirrorSequence, BoneIndex, DT * j);
const FTransform TM = GetAnimBoneCSTM(MirrorSequence, BoneIndex, DT * j);
//Output.Pose.GetComponentSpaceTransform(CmptBoneIndex);
const FTransform3f TwinTM = GetAnimBoneCSTM(MirrorSequence, TwinBoneIndex, DT * j);
const FTransform TwinTM = GetAnimBoneCSTM(MirrorSequence, TwinBoneIndex, DT * j);
//Output.Pose.GetComponentSpaceTransform(TwinCmptBoneIndex);
const int32 ParentIndex = RefSkeleton.GetParentIndex(BoneIndex);
@ -589,49 +581,49 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
const bool SameParent = ParentIndex == TwinParentIndex;
// twin 1<EFBFBD>
// twin 1º
{
const UE::Math::TTransform<float> MirrRef = RefTM * TwinMirrorModTM;
const FTransform3f Delta = TwinRefTM.GetRelativeTransform(MirrRef);
const FQuat4f DeltaQuat = Delta.GetRotation();
const FTransform MirrRef = RefTM * TwinMirrorModTM;
const FTransform Delta = TwinRefTM.GetRelativeTransform(MirrRef);
const FQuat DeltaQuat = Delta.GetRotation();
FTransform3f MirrTM = TM * TwinMirrorModTM;
FTransform MirrTM = TM * TwinMirrorModTM;
MirrTM.SetRotation(MirrTM.GetRotation() * FQuat4f(DeltaQuat));
MirrTM.SetRotation(MirrTM.GetRotation() * DeltaQuat);
MirrTM.SetScale3D(TwinTM.GetScale3D());
if (DeltaStep)
{
if (SameParent)
{
FTransform3f RefBS = RefTM;
FTransform RefBS = RefTM;
RefBS = RefBS * TwinMirrorModTM;
const FVector3f PosDelta = MirrTM.GetLocation() - RefBS.GetLocation();
MirrTM.SetLocation(FVector3f(TwinRefTM.GetLocation()) + PosDelta);
const FVector PosDelta = MirrTM.GetLocation() - RefBS.GetLocation();
MirrTM.SetLocation(TwinRefTM.GetLocation() + PosDelta);
}
else
{
const FTransform3f& ParentTwinTM = NewCSTMs[RefSkeleton.GetParentIndex(TwinBoneIndex)];
const FTransform3f& IParentTM =// Output.Pose.GetComponentSpaceTransform(FCompactPoseBoneIndex(ParentIndex));
const FTransform& ParentTwinTM = NewCSTMs[RefSkeleton.GetParentIndex(TwinBoneIndex)];
const FTransform& IParentTM =// Output.Pose.GetComponentSpaceTransform(FCompactPoseBoneIndex(ParentIndex));
GetAnimBoneCSTM(MirrorSequence, ParentIndex, DT * j);
FTransform3f RefBS = FTransform3f(RefSkeleton.GetRefBonePose()[BoneIndex]) * IParentTM;
FTransform RefBS = RefSkeleton.GetRefBonePose()[BoneIndex] * IParentTM;
RefBS = RefBS * TwinMirrorModTM;
RefBS.SetRotation(RefBS.GetRotation() * DeltaQuat);
RefBS.SetScale3D(TwinTM.GetScale3D());
MirrTM = (MirrTM.GetRelativeTransform(RefBS) * FTransform3f(RefSkeleton.GetRefBonePose()[TwinBoneIndex])) * ParentTwinTM;
MirrTM = (MirrTM.GetRelativeTransform(RefBS) * RefSkeleton.GetRefBonePose()[TwinBoneIndex]) * ParentTwinTM;
}
}
NewCSTMs[TwinBoneIndex] = MirrTM;
}
// twin 2<EFBFBD>
// twin 2º
{
FTransform3f TwinMirrRef = TwinRefTM * TwinMirrorModTM;
const FQuat4f TwinDeltaQuat = TwinMirrRef.GetRotation().Inverse() * RefTM.GetRotation();
FTransform TwinMirrRef = TwinRefTM * TwinMirrorModTM;
const FQuat TwinDeltaQuat = TwinMirrRef.GetRotation().Inverse() * RefTM.GetRotation();
FTransform3f TwinMirrTM = TwinTM * TwinMirrorModTM;
FTransform TwinMirrTM = TwinTM * TwinMirrorModTM;
TwinMirrTM.SetRotation(TwinMirrTM.GetRotation() * TwinDeltaQuat);
TwinMirrTM.SetScale3D(TM.GetScale3D());
@ -640,22 +632,22 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
{
if (SameParent)
{
FTransform3f TwinRefBS = TwinRefTM;
FTransform TwinRefBS = TwinRefTM;
TwinRefBS = TwinRefBS * TwinMirrorModTM;
const FVector3f PosDelta = TwinMirrTM.GetLocation() - TwinRefBS.GetLocation();
const FVector PosDelta = TwinMirrTM.GetLocation() - TwinRefBS.GetLocation();
TwinMirrTM.SetLocation(RefTM.GetLocation() + PosDelta);
}
else
{
const FTransform3f& ParentTM = NewCSTMs[RefSkeleton.GetParentIndex(BoneIndex)];
const FTransform3f& IParentTwinTM = //Output.Pose.GetComponentSpaceTransform(FCompactPoseBoneIndex(TwinParentIndex));
const FTransform& ParentTM = NewCSTMs[RefSkeleton.GetParentIndex(BoneIndex)];
const FTransform& IParentTwinTM = //Output.Pose.GetComponentSpaceTransform(FCompactPoseBoneIndex(TwinParentIndex));
GetAnimBoneCSTM(MirrorSequence, TwinParentIndex, DT * j);
FTransform3f TwinRefBS = FTransform3f(RefSkeleton.GetRefBonePose()[TwinBoneIndex]) * IParentTwinTM;
FTransform TwinRefBS = RefSkeleton.GetRefBonePose()[TwinBoneIndex] * IParentTwinTM;
TwinRefBS = TwinRefBS * TwinMirrorModTM;
TwinRefBS.SetRotation(TwinRefBS.GetRotation() * TwinDeltaQuat);
TwinRefBS.SetScale3D(TM.GetScale3D());
TwinMirrTM = (TwinMirrTM.GetRelativeTransform(TwinRefBS) * FTransform3f(RefSkeleton.GetRefBonePose()[BoneIndex]) * ParentTM);
TwinMirrTM = (TwinMirrTM.GetRelativeTransform(TwinRefBS) * RefSkeleton.GetRefBonePose()[BoneIndex]) * ParentTM;
}
}
@ -667,7 +659,7 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
for (int32 i = 0; i < NewCSTMs.Num(); i++)
{
const int32 ParentIndex = RefSkeleton.GetParentIndex(i);
FTransform3f BSTM;
FTransform BSTM;
if (ParentIndex != INDEX_NONE) BSTM = NewCSTMs[i].GetRelativeTransform(NewCSTMs[ParentIndex]);
else BSTM = NewCSTMs[i];
@ -681,13 +673,11 @@ MIRRORANIMATIONSYSTEMDEV_API void UMASFunctionLibrary::CreateMirrorSequenceFromA
for (auto Pair : BoneTracks)
{
const FName TrackName = Skeleton->GetReferenceSkeleton().GetBoneName(Pair.Key);
//MirrorSequence->AddNewRawTrack(TrackName, &Pair.Value);
Controller.AddBoneCurve(TrackName);
Controller.SetBoneTrackKeys(TrackName,Pair.Value.PosKeys,Pair.Value.RotKeys,Pair.Value.ScaleKeys);
MirrorSequence->AddNewRawTrack(TrackName, &Pair.Value);
}
// Have to also apply to pelvis and spine_01
MirrorSequence->MarkRawDataAsModified();
MirrorSequence->OnRawDataChanged();
MirrorSequence->MarkPackageDirty();
}

View file

@ -1,34 +0,0 @@
// Copyright 2017-2021 Rexocrates. All Rights Reserved.
#include "AnimGraphNode_FullMirror.h"
#include "MirrorAnimationSystemEditor.h"
#define LOCTEXT_NAMESPACE "A3Nodes"
UAnimGraphNode_FullMirror::UAnimGraphNode_FullMirror(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
}
FLinearColor UAnimGraphNode_FullMirror::GetNodeTitleColor() const
{
return FLinearColor::Red;
}
FText UAnimGraphNode_FullMirror::GetTooltipText() const
{
return LOCTEXT("Mirrors_the_designated_bones", "Mirrors the pose based on the designated Mirror Table");
}
FText UAnimGraphNode_FullMirror::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
return LOCTEXT("FullMirror_Pose", "Full Mirror Pose");
}
FString UAnimGraphNode_FullMirror::GetNodeCategory() const
{
return TEXT("Tools");
}
#undef LOCTEXT_NAMESPACE

View file

@ -1,53 +0,0 @@
// Copyright 2017-2021 Rexocrates. All Rights Reserved.
#include "AnimGraphNode_FullMirrorCS.h"
#include "MirrorAnimationSystemEditor.h"
#define LOCTEXT_NAMESPACE "A3Nodes"
UAnimGraphNode_FullMirrorCS::UAnimGraphNode_FullMirrorCS(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
FLinearColor UAnimGraphNode_FullMirrorCS::GetNodeTitleColor() const
{
return FLinearColor::Blue;
}
FText UAnimGraphNode_FullMirrorCS::GetControllerDescription() const
{
return LOCTEXT("AnimGraphNode_FullMirrorCS", "Full Mirror Pose CS");
}
FText UAnimGraphNode_FullMirrorCS::GetTooltipText() const
{
return LOCTEXT("AnimGraphNode_FullMirrorCS_Tooltip", "Full Mirror the pose in Component Space.");
}
FText UAnimGraphNode_FullMirrorCS::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
FText NodeTitle;
if (TitleType == ENodeTitleType::ListView || TitleType == ENodeTitleType::MenuTitle)
{
NodeTitle = GetControllerDescription();
}
else
{
NodeTitle = FText(LOCTEXT("AnimGraphNode_FullMirrorCS_Title", "Full Mirror Pose CS"));
}
return NodeTitle;
}
void UAnimGraphNode_FullMirrorCS::ValidateAnimNodePostCompile(class FCompilerResultsLog& MessageLog, class UAnimBlueprintGeneratedClass* CompiledClass, int32 CompiledNodeIndex)
{
Super::ValidateAnimNodePostCompile(MessageLog, CompiledClass, CompiledNodeIndex);
}
bool UAnimGraphNode_FullMirrorCS::IsCompatibleWithGraph(const UEdGraph* TargetGraph) const
{
return Super::IsCompatibleWithGraph(TargetGraph);
}
#undef LOCTEXT_NAMESPACE

View file

@ -0,0 +1,34 @@
// Copyright 2017-2021 Rexocrates. All Rights Reserved.
#include "AnimGraphNode_Mirror.h"
#include "MirrorAnimationSystemEditor.h"
#define LOCTEXT_NAMESPACE "A3Nodes"
UAnimGraphNode_Mirror::UAnimGraphNode_Mirror(const FObjectInitializer& ObjectInitializer)
:Super(ObjectInitializer)
{
}
FLinearColor UAnimGraphNode_Mirror::GetNodeTitleColor() const
{
return FLinearColor::Red;
}
FText UAnimGraphNode_Mirror::GetTooltipText() const
{
return LOCTEXT("Mirrors_the_designated_bones", "Mirrors the pose based on the designated Mirror Table");
}
FText UAnimGraphNode_Mirror::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
return LOCTEXT("Mirror_Pose", "Mirror Pose");
}
FString UAnimGraphNode_Mirror::GetNodeCategory() const
{
return TEXT("Tools");
}
#undef LOCTEXT_NAMESPACE

View file

@ -0,0 +1,53 @@
// Copyright 2017-2021 Rexocrates. All Rights Reserved.
#include "AnimGraphNode_MirrorCS.h"
#include "MirrorAnimationSystemEditor.h"
#define LOCTEXT_NAMESPACE "A3Nodes"
UAnimGraphNode_MirrorCS::UAnimGraphNode_MirrorCS(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
}
FLinearColor UAnimGraphNode_MirrorCS::GetNodeTitleColor() const
{
return FLinearColor::Blue;
}
FText UAnimGraphNode_MirrorCS::GetControllerDescription() const
{
return LOCTEXT("AnimGraphNode_MirrorCS", "Mirror Pose CS");
}
FText UAnimGraphNode_MirrorCS::GetTooltipText() const
{
return LOCTEXT("AnimGraphNode_MirrorCS_Tooltip", "Mirror the pose in Component Space.");
}
FText UAnimGraphNode_MirrorCS::GetNodeTitle(ENodeTitleType::Type TitleType) const
{
FText NodeTitle;
if (TitleType == ENodeTitleType::ListView || TitleType == ENodeTitleType::MenuTitle)
{
NodeTitle = GetControllerDescription();
}
else
{
NodeTitle = FText(LOCTEXT("AnimGraphNode_MirrorCS_Title", "Mirror Pose CS"));
}
return NodeTitle;
}
void UAnimGraphNode_MirrorCS::ValidateAnimNodePostCompile(class FCompilerResultsLog& MessageLog, class UAnimBlueprintGeneratedClass* CompiledClass, int32 CompiledNodeIndex)
{
Super::ValidateAnimNodePostCompile(MessageLog, CompiledClass, CompiledNodeIndex);
}
bool UAnimGraphNode_MirrorCS::IsCompatibleWithGraph(const UEdGraph* TargetGraph) const
{
return Super::IsCompatibleWithGraph(TargetGraph);
}
#undef LOCTEXT_NAMESPACE

View file

@ -195,11 +195,11 @@ public:
for (auto AssetIt = SelectedAssets.CreateConstIterator(); AssetIt; ++AssetIt)
{
const FAssetData& Asset = *AssetIt;
bShowButton = bShowButton || (Asset.AssetClassPath == UAnimSequence::StaticClass()->GetClassPathName()) || (Asset.AssetClassPath == USkeleton::StaticClass()->GetClassPathName());
bIsSkeletonAsset = (Asset.AssetClassPath == USkeleton::StaticClass()->GetClassPathName());
bShowButton = bShowButton || (Asset.AssetClass == UAnimSequence::StaticClass()->GetFName()) || (Asset.AssetClass == USkeleton::StaticClass()->GetFName());
bIsSkeletonAsset = (Asset.AssetClass == USkeleton::StaticClass()->GetFName());
}
if (bShowButton) //@TODO: This should be true !!
if (bShowButton)
{
if (bIsSkeletonAsset)
{

View file

@ -20,7 +20,7 @@
#include "Framework/Docking/TabManager.h"
#include "EditorStyleSet.h"
#include "CanvasItem.h"
#include "AssetRegistry/AssetRegistryModule.h"
#include "AssetRegistryModule.h"
#include "PropertyEditorModule.h"
#include "IContentBrowserSingleton.h"
#include "ContentBrowserModule.h"

View file

@ -2,18 +2,18 @@
#pragma once
#include "AnimGraphNode_Base.h"
#include "AnimNode_FullMirror.h"
#include "AnimGraphNode_FullMirror.generated.h"
#include "AnimNode_Mirror.h"
#include "AnimGraphNode_Mirror.generated.h"
/**
*
*/
/*class that holds Editor version of the AnimGraph Node Mirror Pose, along its tittle, tooltip, Node Color, and the category of the node*/
UCLASS()
class MIRRORANIMATIONSYSTEMEDITOR_API UAnimGraphNode_FullMirror : public UAnimGraphNode_Base
class MIRRORANIMATIONSYSTEMEDITOR_API UAnimGraphNode_Mirror : public UAnimGraphNode_Base
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, Category = Settings)
FAnimNode_FullMirror Node;
FAnimNode_Mirror Node;
//~ Begin UEdGraphNode Interface.
virtual FLinearColor GetNodeTitleColor() const override;
@ -25,5 +25,5 @@ class MIRRORANIMATIONSYSTEMEDITOR_API UAnimGraphNode_FullMirror : public UAnimGr
virtual FString GetNodeCategory() const override;
//~ End UAnimGraphNode_Base Interface
UAnimGraphNode_FullMirror(const FObjectInitializer& ObjectInitializer);
UAnimGraphNode_Mirror(const FObjectInitializer& ObjectInitializer);
};

View file

@ -3,19 +3,19 @@
#pragma once
//#include "AnimGraphNode_Base.h"
#include "AnimGraphNode_SkeletalControlBase.h"
#include "AnimNode_FullMirrorCS.h"
#include "AnimGraphNode_FullMirrorCS.generated.h"
#include "AnimNode_MirrorCS.h"
#include "AnimGraphNode_MirrorCS.generated.h"
/**
*
*/
/*class that holds Editor version of the AnimGraph Node Mirror Pose, along its tittle, tooltip, Node Color, and the category of the node*/
UCLASS()
class MIRRORANIMATIONSYSTEMEDITOR_API UAnimGraphNode_FullMirrorCS : public UAnimGraphNode_SkeletalControlBase
class MIRRORANIMATIONSYSTEMEDITOR_API UAnimGraphNode_MirrorCS : public UAnimGraphNode_SkeletalControlBase
{
GENERATED_BODY()
UPROPERTY(EditAnywhere, Category = Settings)
FAnimNode_FullMirrorCS Node;
FAnimNode_MirrorCS Node;
/*
//~ Begin UEdGraphNode Interface.
virtual FLinearColor GetNodeTitleColor() const override;
@ -27,12 +27,12 @@ class MIRRORANIMATIONSYSTEMEDITOR_API UAnimGraphNode_FullMirrorCS : public UAnim
virtual FString GetNodeCategory() const override;
//~ End UAnimGraphNode_Base Interface
UAnimGraphNode_FullMirrorCS(const FObjectInitializer& ObjectInitializer);
UAnimGraphNode_MirrorCS(const FObjectInitializer& ObjectInitializer);
*/
public:
UAnimGraphNode_FullMirrorCS(const FObjectInitializer& ObjectInitializer);
UAnimGraphNode_MirrorCS(const FObjectInitializer& ObjectInitializer);
// UEdGraphNode interface
virtual FLinearColor GetNodeTitleColor() const override;