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();