private void UpdateAfterimages(TimeSpan time)
{
var afterImagePositions = scene.GetAfterImages(time).ToArray();
var visibleFrom = scene.MaxAfterimageCount - afterImagePositions.Length;
var opacityInterval = 1.0 / scene.MaxAfterimageCount;
var opacityFrom = (1.0 -
(time.Ticks % scene.AfterimageInterval.Ticks) / (double)scene.AfterimageInterval.Ticks) *
opacityInterval;
var i = 0;
for (; i < visibleFrom; i++)
{
GetAfterimage(i).Visibility = Visibility.Hidden;
}
for (; i < scene.MaxAfterimageCount; i++)
{
var afterimage = GetAfterimage(i);
var position = afterImagePositions[i - visibleFrom];
afterimage.Visibility = Visibility.Visible;
afterimage.SetValue(Canvas.LeftProperty, position.X);
afterimage.SetValue(Canvas.TopProperty, position.Y);
afterimage.Opacity = (opacityFrom + i * opacityInterval) * 0.2;
}
}