diff --git a/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs b/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
index 8f6dccd39..4ddf5c26c 100644
--- a/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
+++ b/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
@@ -19,7 +19,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
/// Basis for creating tangent manipulation types for bezier curves.
///
- public abstract class TangentModeBase
+ private abstract class TangentModeBase
{
///
/// Called when user set selected tangent mode.
@@ -60,7 +60,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
/// Edit curve options manipulate the curve as free mode
///
- public sealed class FreeTangentMode : TangentModeBase
+ private sealed class FreeTangentMode : TangentModeBase
{
///
public override void OnMoveTangentIn(Spline spline, int index) { }
@@ -81,7 +81,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
/// Edit curve options to set tangents to linear
///
- public sealed class LinearTangentMode : TangentModeBase
+ private sealed class LinearTangentMode : TangentModeBase
{
///
public override void OnMoveTangentIn(Spline spline, int index) { }
@@ -116,7 +116,7 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
/// Edit curve options to align tangents of selected spline
///
- public sealed class AlignedTangentMode : TangentModeBase
+ private sealed class AlignedTangentMode : TangentModeBase
{
///
public override void OnSetMode(Spline spline, int index)
@@ -167,18 +167,19 @@ namespace FlaxEditor.CustomEditors.Dedicated
var isLastKeyframe = index >= spline.SplinePointsCount - 1;
var isFirstKeyframe = index <= 0;
- if (!isLastKeyframe && !isFirstKeyframe)
- {
- var nextKeyframe = spline.GetSplineKeyframe(++index);
- var previousKeyframe = spline.GetSplineKeyframe(--index);
+ // force smooth it's linear point
+ if (tangentInSize == 0f && !isFirstKeyframe) tangentInSize = 100;
+ if (tangentOutSize == 0f && !isLastKeyframe) tangentOutSize = 100;
- // calc form from Spline.cpp -> SetTangentsSmooth
- var slop = (keyframe.Value.Translation - previousKeyframe.Value.Translation + nextKeyframe.Value.Translation - keyframe.Value.Translation).Normalized;
+ var nextKeyframe = !isLastKeyframe ? spline.GetSplineKeyframe(index + 1) : keyframe;
+ var previousKeyframe = !isFirstKeyframe ? spline.GetSplineKeyframe(index - 1) : keyframe;
- keyframe.TangentIn.Translation = -slop * tangentInSize;
- keyframe.TangentOut.Translation = slop * tangentOutSize;
- spline.SetSplineKeyframe(index, 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)