20{
21 FTransform WarpedRootMotion = Super::ProcessRootMotion(InRootMotion, DeltaSeconds);
22
24 {
25 return WarpedRootMotion;
26 }
27
28 const float WarpDuration = EndTime - ActualStartTime;
31
32 if (bWarpTranslation)
33 {
34
35
36 const FVector OriginalTranslation = InRootMotion.GetTranslation();
37 const FVector TranslationWarpDelta = WarpedRootMotion.GetTranslation() - OriginalTranslation;
38 WarpedRootMotion.SetTranslation(OriginalTranslation + TranslationWarpDelta * WarpMultiplier);
39 }
40
41 if (bWarpRotation)
42 {
43 const FQuat OriginalRotation = InRootMotion.GetRotation();
44 const FQuat RotationWarpDelta = WarpedRootMotion.GetRotation() * OriginalRotation.Inverse();
45 const FQuat ScaledRotationWarpDelta = FQuat::Slerp(FQuat::Identity, RotationWarpDelta, WarpMultiplier).GetNormalized();
46 WarpedRootMotion.SetRotation(ScaledRotationWarpDelta * OriginalRotation);
47 }
48
49 return WarpedRootMotion;
50}
bool ShouldSkipRotationWarp() const
Definition RootMotionModifier_ControllableSkewWarp.cpp:65
float CalculateNormalizedProgress(float WarpDuration) const
Definition RootMotionModifier_ControllableSkewWarp.cpp:59