public override void update(GameTime gameTime)
{
if (completed)
return;
elapsedTimeS += gameTime.ElapsedGameTime.TotalSeconds;
if (waiting)
{
if (elapsedTimeS > StartDelayS)
{
waiting = false;
elapsedTimeS = 0;
}
}
else
{
double angle = Math.Atan2(target.getPosition().Y - origin.Y, target.getPosition().X - origin.X);
double totalDistance = Vector2.Distance(origin, target.getPosition());
if (!returning)
{
if (elapsedTimeS < travelTimeS)
{
double currentDistance = totalDistance * (elapsedTimeS / travelTimeS);
Camera.X = origin.X + (float)(Math.Cos(angle) * currentDistance);
Camera.Y = origin.Y + (float)(Math.Sin(angle) * currentDistance);
}
else if (elapsedTimeS > travelTimeS + PauseDelayS)
{
returning = true;
elapsedTimeS = 0;
}
}
else
{
if (elapsedTimeS < ReturnTimeS)
{
double currentDistance = totalDistance * (elapsedTimeS / ReturnTimeS);
currentDistance = totalDistance - currentDistance;
Camera.X = origin.X + (float)(Math.Cos(angle) * currentDistance);
Camera.Y = origin.Y + (float)(Math.Sin(angle) * currentDistance);
}
else
{
completed = true;
}
}
}
}