Add epsilon clamping for keyframes adding in timeline

This commit is contained in:
Wojtek Figat
2021-09-01 14:42:59 +02:00
parent 75cc7cbc4e
commit adadde0aa9
2 changed files with 21 additions and 3 deletions

View File

@@ -1026,15 +1026,21 @@ namespace FlaxEditor.GUI
/// <returns>The index of the keyframe.</returns>
public int AddKeyframe(LinearCurve<T>.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
/// <returns>The index of the keyframe.</returns>
public int AddKeyframe(BezierCurve<T>.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();