diff --git a/Source/Editor/GUI/CurveEditor.cs b/Source/Editor/GUI/CurveEditor.cs index b4f1d9333..e60b0554b 100644 --- a/Source/Editor/GUI/CurveEditor.cs +++ b/Source/Editor/GUI/CurveEditor.cs @@ -1026,15 +1026,21 @@ namespace FlaxEditor.GUI /// The index of the keyframe. public int AddKeyframe(LinearCurve.Keyframe k) { + var eps = Mathf.Epsilon; if (FPS.HasValue) { float fps = FPS.Value; k.Time = Mathf.Floor(k.Time * fps) / fps; + eps = 1.0f / fps; } + int pos = 0; while (pos < _keyframes.Count && _keyframes[pos].Time < k.Time) pos++; - _keyframes.Insert(pos, k); + if (_keyframes.Count > pos && Mathf.Abs(_keyframes[pos].Time - k.Time) < eps) + _keyframes[pos] = k; + else + _keyframes.Insert(pos, k); OnKeyframesChanged(); OnEdited(); @@ -1513,15 +1519,21 @@ namespace FlaxEditor.GUI /// The index of the keyframe. public int AddKeyframe(BezierCurve.Keyframe k) { + var eps = Mathf.Epsilon; if (FPS.HasValue) { float fps = FPS.Value; k.Time = Mathf.Floor(k.Time * fps) / fps; + eps = 1.0f / fps; } + int pos = 0; while (pos < _keyframes.Count && _keyframes[pos].Time < k.Time) pos++; - _keyframes.Insert(pos, k); + if (_keyframes.Count > pos && Mathf.Abs(_keyframes[pos].Time - k.Time) < eps) + _keyframes[pos] = k; + else + _keyframes.Insert(pos, k); OnKeyframesChanged(); OnEdited(); diff --git a/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs b/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs index aa34657ee..a92998255 100644 --- a/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs +++ b/Source/Editor/GUI/Timeline/GUI/KeyframesEditor.cs @@ -837,15 +837,21 @@ namespace FlaxEditor.GUI /// The keyframe to add. public void AddKeyframe(Keyframe k) { + var eps = Mathf.Epsilon; if (FPS.HasValue) { float fps = FPS.Value; k.Time = Mathf.Floor(k.Time * fps) / fps; + eps = 1.0f / fps; } + int pos = 0; while (pos < _keyframes.Count && _keyframes[pos].Time < k.Time) pos++; - _keyframes.Insert(pos, k); + if (_keyframes.Count > pos && Mathf.Abs(_keyframes[pos].Time - k.Time) < eps) + _keyframes[pos] = k; + else + _keyframes.Insert(pos, k); OnKeyframesChanged(); OnEdited();