Refactor to fix InterpolateMovements=false

This commit is contained in:
smoogipoo 2021-08-13 12:10:33 +09:00
parent 5241029513
commit 7cc0a2a76f
2 changed files with 14 additions and 17 deletions

View File

@ -79,8 +79,13 @@ protected override void Update()
protected override bool OnMouseMove(MouseMoveEvent e)
{
if (!disjointTrail)
return base.OnMouseMove(e);
currentPosition = e.ScreenSpaceMousePosition;
return base.OnMouseMove(e);
// Intentionally block the base call as we're adding the trails ourselves.
return false;
}
}
}

View File

@ -146,33 +146,25 @@ private void resetTime()
protected override bool OnMouseMove(MouseMoveEvent e)
{
Vector2 position = e.ScreenSpaceMousePosition;
if (lastPosition == null)
{
lastPosition = position;
resampler.AddPosition(lastPosition.Value);
return base.OnMouseMove(e);
}
if (InterpolateMovements)
AddTrail(position);
AddTrail(e.ScreenSpaceMousePosition);
return base.OnMouseMove(e);
}
protected void AddTrail(Vector2 position)
{
if (!lastPosition.HasValue)
return;
if (InterpolateMovements)
{
if (!lastPosition.HasValue)
{
lastPosition = position;
resampler.AddPosition(lastPosition.Value);
return;
}
foreach (Vector2 pos2 in resampler.AddPosition(position))
{
Trace.Assert(lastPosition.HasValue);
// ReSharper disable once PossibleInvalidOperationException
Vector2 pos1 = lastPosition.Value;
Vector2 diff = pos2 - pos1;
float distance = diff.Length;