diff --git a/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs b/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
index e26a05f69..4df665b15 100644
--- a/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
+++ b/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
@@ -61,6 +61,15 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
private sealed class FreeTangentMode : EditTangentOptionBase
{
+ ///
+ public override void OnSetMode(Spline spline, int index)
+ {
+ if (IsLinearTangentMode(spline, index))
+ {
+ SetPointSmooth(spline, index);
+ }
+ }
+
///
public override void OnMoveTangentIn(Spline spline, int index) { }
@@ -72,9 +81,6 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
public override void OnSelectTangent(Spline spline, int index) { }
-
- ///
- public override void OnSetMode(Spline spline, int index) { }
}
///
@@ -82,18 +88,6 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
private sealed class LinearTangentMode : EditTangentOptionBase
{
- ///
- public override void OnMoveTangentIn(Spline spline, int index) { }
-
- ///
- public override void OnMoveTangentOut(Spline spline, int index) { }
-
- ///
- public override void OnSelectKeyframe(Spline spline, int index) { }
-
- ///
- public override void OnSelectTangent(Spline spline, int index) { }
-
///
public override void OnSetMode(Spline spline, int index)
{
@@ -108,6 +102,18 @@ namespace FlaxEditor.CustomEditors.Dedicated
}
}
+ ///
+ public override void OnMoveTangentIn(Spline spline, int index) { }
+
+ ///
+ public override void OnMoveTangentOut(Spline spline, int index) { }
+
+ ///
+ public override void OnSelectKeyframe(Spline spline, int index) { }
+
+ ///
+ public override void OnSelectTangent(Spline spline, int index) { }
+
private void SetKeyframeLinear(Spline spline, int index)
{
var tangentIn = spline.GetSplineTangent(index, true);
@@ -160,32 +166,6 @@ namespace FlaxEditor.CustomEditors.Dedicated
}
}
- private void SetPointSmooth(Spline spline, int index)
- {
- var keyframe = spline.GetSplineKeyframe(index);
- var tangentIn = keyframe.TangentIn;
- var tangentOut = keyframe.TangentOut;
- var tangentInSize = tangentIn.Translation.Length;
- var tangentOutSize = tangentOut.Translation.Length;
-
- var isLastKeyframe = index >= spline.SplinePointsCount - 1;
- var isFirstKeyframe = index <= 0;
-
- // force smooth it's linear point
- if (tangentInSize == 0f && !isFirstKeyframe) tangentInSize = 100;
- if (tangentOutSize == 0f && !isLastKeyframe) tangentOutSize = 100;
-
- var nextKeyframe = !isLastKeyframe ? spline.GetSplineKeyframe(index + 1) : keyframe;
- var previousKeyframe = !isFirstKeyframe ? spline.GetSplineKeyframe(index - 1) : keyframe;
-
- // calc form from Spline.cpp -> SetTangentsSmooth
- var slop = (keyframe.Value.Translation - previousKeyframe.Value.Translation + nextKeyframe.Value.Translation - keyframe.Value.Translation).Normalized;
-
- keyframe.TangentIn.Translation = -slop * tangentInSize;
- keyframe.TangentOut.Translation = slop * tangentOutSize;
- spline.SetSplineKeyframe(index, keyframe);
- }
-
private void SetPointAligned(Spline spline, int index, bool isIn)
{
var keyframe = spline.GetSplineKeyframe(index);
@@ -480,5 +460,31 @@ namespace FlaxEditor.CustomEditors.Dedicated
return false;
}
+
+ private static void SetPointSmooth(Spline spline, int index)
+ {
+ var keyframe = spline.GetSplineKeyframe(index);
+ var tangentIn = keyframe.TangentIn;
+ var tangentOut = keyframe.TangentOut;
+ var tangentInSize = tangentIn.Translation.Length;
+ var tangentOutSize = tangentOut.Translation.Length;
+
+ var isLastKeyframe = index >= spline.SplinePointsCount - 1;
+ var isFirstKeyframe = index <= 0;
+
+ // force smooth it's linear point
+ if (tangentInSize == 0f && !isFirstKeyframe) tangentInSize = 100;
+ if (tangentOutSize == 0f && !isLastKeyframe) tangentOutSize = 100;
+
+ var nextKeyframe = !isLastKeyframe ? spline.GetSplineKeyframe(index + 1) : keyframe;
+ var previousKeyframe = !isFirstKeyframe ? spline.GetSplineKeyframe(index - 1) : keyframe;
+
+ // calc form from Spline.cpp -> SetTangentsSmooth
+ var slop = (keyframe.Value.Translation - previousKeyframe.Value.Translation + nextKeyframe.Value.Translation - keyframe.Value.Translation).Normalized;
+
+ keyframe.TangentIn.Translation = -slop * tangentInSize;
+ keyframe.TangentOut.Translation = slop * tangentOutSize;
+ spline.SetSplineKeyframe(index, keyframe);
+ }
}
}