public void ProcessChanges()
{
TimeSpan timeSpan = DateTime.Now - lastTime;
double step = timeSpan.TotalSeconds;
lastTime = DateTime.Now;
double x = Sprite.X;
double y = Sprite.Y;
double dx = step * Sprite.Speed;
if (Sprite.IsWalkingLeft)
{
x -= dx;
Scene.ScrollRightt(x, dx);
}
else if (Sprite.IsWalkingRight)
{
x += dx;
Scene.ScrollLeft(x, dx);
}
if (Map.CanMoveTo(x, Sprite.Y, Sprite.Width, Sprite.Height))
{
Sprite.X = x;
}
if (Sprite.IsJumping)
{
y -= (1 - Sprite.JumpTime) * step * 400;
if (Sprite.JumpTime < 1 && Map.CanMoveTo(Sprite.X, y, Sprite.Width, Sprite.Height))
{
Sprite.Y = y;
Sprite.JumpTime += step;
}
else
{
Sprite.IsJumping = false;
Sprite.IsFalling = true;
Sprite.JumpTime = 0;
}
}
else if (Sprite.IsFalling)
{
y += 800 * Sprite.FallTime * step;
if (Map.CanMoveTo(Sprite.X, y, Sprite.Width, Sprite.Height))
{
Sprite.Y = y;
Sprite.FallTime += step;
}
else
{
Sprite.IsFalling = false;
Sprite.FallTime = 0;
}
}
else
{
y += 1;
if (Map.CanMoveTo(Sprite.X, y, Sprite.Width, Sprite.Height))
{
Sprite.Y = y;
Sprite.IsFalling = true;
Sprite.FallTime = step;
}
}
}