From f8da0708e1f0645b40d7527bfc9b0389b491f2a5 Mon Sep 17 00:00:00 2001
From: Ruan Lucas <79365912+RuanLucasGD@users.noreply.github.com>
Date: Fri, 21 Jul 2023 22:11:15 -0400
Subject: [PATCH] add suport to loop spline on set tangent linear
---
.../CustomEditors/Dedicated/SplineEditor.cs | 30 +++++++++++--------
Source/Editor/SceneGraph/Actors/SplineNode.cs | 1 +
2 files changed, 19 insertions(+), 12 deletions(-)
diff --git a/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs b/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
index d83aa1acc..ca442d66f 100644
--- a/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
+++ b/Source/Editor/CustomEditors/Dedicated/SplineEditor.cs
@@ -109,17 +109,6 @@ namespace FlaxEditor.CustomEditors.Dedicated
///
public override void OnSelectTangent(Spline spline, int index) { }
-
- private void SetKeyframeLinear(Spline spline, int index)
- {
- var tangentIn = spline.GetSplineTangent(index, true);
- var tangentOut = spline.GetSplineTangent(index, false);
- tangentIn.Translation = spline.GetSplinePoint(index);
- tangentOut.Translation = spline.GetSplinePoint(index);
- spline.SetSplineTangent(index, tangentIn, true, false);
- spline.SetSplineTangent(index, tangentOut, false, false);
- spline.UpdateSpline();
- }
}
///
@@ -330,7 +319,6 @@ namespace FlaxEditor.CustomEditors.Dedicated
}
var index = _lastPointSelected.Index;
-
var currentTangentInPosition = SelectedSpline.GetSplineLocalTangent(index, true).Translation;
var currentTangentOutPosition = SelectedSpline.GetSplineLocalTangent(index, false).Translation;
@@ -621,6 +609,24 @@ namespace FlaxEditor.CustomEditors.Dedicated
return keyframe.TangentOut.Translation.Length > 0 && keyframe.TangentIn.Translation.Length == 0;
}
+ private static void SetKeyframeLinear(Spline spline, int index)
+ {
+ var keyframe = spline.GetSplineKeyframe(index);
+ keyframe.TangentIn.Translation = Vector3.Zero;
+ keyframe.TangentOut.Translation = Vector3.Zero;
+
+ var lastSplineIndex = spline.SplinePointsCount - 1;
+ if (index == lastSplineIndex && spline.IsLoop)
+ {
+ var lastPoint = spline.GetSplineKeyframe(lastSplineIndex);
+ lastPoint.TangentIn.Translation = Vector3.Zero;
+ lastPoint.TangentOut.Translation = Vector3.Zero;
+ spline.SetSplineKeyframe(lastSplineIndex, lastPoint);
+ }
+
+ spline.SetSplineKeyframe(index, keyframe);
+ }
+
private static void SetTangentSmoothIn(Spline spline, int index)
{
var keyframe = spline.GetSplineKeyframe(index);
diff --git a/Source/Editor/SceneGraph/Actors/SplineNode.cs b/Source/Editor/SceneGraph/Actors/SplineNode.cs
index 3ba1d14c3..1c47c7d98 100644
--- a/Source/Editor/SceneGraph/Actors/SplineNode.cs
+++ b/Source/Editor/SceneGraph/Actors/SplineNode.cs
@@ -257,6 +257,7 @@ namespace FlaxEditor.SceneGraph.Actors
public override void OnDebugDraw(ViewportDebugDrawData data)
{
+ Debug.Log(Name);
// Draw spline and spline point
ParentNode.OnDebugDraw(data);