protected override void MoveCamera()
{
Point old = Camera.CurrentPosition;
Actor a = null;
if (Camera.ActorToFollow != 0)
{
a = Actors[Camera.ActorToFollow];
if (Math.Abs(Camera.CurrentPosition.X - a.Position.X) > Variables[VariableCameraThresholdX.Value] ||
Math.Abs(Camera.CurrentPosition.Y - a.Position.Y) > Variables[VariableCameraThresholdY.Value])
{
Camera.MovingToActor = true;
if (Variables[VariableCameraThresholdX.Value] == 0)
Camera.CurrentPosition.X = a.Position.X;
if (Variables[VariableCameraThresholdY.Value] == 0)
Camera.CurrentPosition.Y = a.Position.Y;
Camera.CurrentPosition = ClampCameraPos(Camera.CurrentPosition);
}
}
else
{
Camera.MovingToActor = false;
}
if (Camera.MovingToActor)
{
Variables[VariableCameraDestX] = Camera.DestinationPosition.X = a.Position.X;
Variables[VariableCameraDestY] = Camera.DestinationPosition.Y = a.Position.Y;
}
Debug.Assert(Camera.CurrentPosition.X >= (ScreenWidth / 2) && Camera.CurrentPosition.Y >= (ScreenHeight / 2));
Camera.DestinationPosition = ClampCameraPos(Camera.DestinationPosition);
if (Camera.CurrentPosition.X < Camera.DestinationPosition.X)
{
Camera.CurrentPosition.X += (short)Variables[VariableCameraSpeedX];
if (Camera.CurrentPosition.X > Camera.DestinationPosition.X)
Camera.CurrentPosition.X = Camera.DestinationPosition.X;
}
if (Camera.CurrentPosition.X > Camera.DestinationPosition.X)
{
Camera.CurrentPosition.X -= (short)Variables[VariableCameraSpeedX];
if (Camera.CurrentPosition.X < Camera.DestinationPosition.X)
Camera.CurrentPosition.X = Camera.DestinationPosition.X;
}
if (Camera.CurrentPosition.Y < Camera.DestinationPosition.Y)
{
Camera.CurrentPosition.Y += (short)Variables[VariableCameraSpeedY];
if (Camera.CurrentPosition.Y > Camera.DestinationPosition.Y)
Camera.CurrentPosition.Y = Camera.DestinationPosition.Y;
}
if (Camera.CurrentPosition.Y > Camera.DestinationPosition.Y)
{
Camera.CurrentPosition.Y -= (short)Variables[VariableCameraSpeedY];
if (Camera.CurrentPosition.Y < Camera.DestinationPosition.Y)
Camera.CurrentPosition.Y = Camera.DestinationPosition.Y;
}
if (Camera.CurrentPosition.X == Camera.DestinationPosition.X && Camera.CurrentPosition.Y == Camera.DestinationPosition.Y)
{
Camera.MovingToActor = false;
Camera.Accel.X = Camera.Accel.Y = 0;
Variables[VariableCameraSpeedX] = Variables[VariableCameraSpeedY] = 0;
}
else
{
Camera.Accel.X += (short)Variables[VariableCameraAccelX.Value];
Camera.Accel.Y += (short)Variables[VariableCameraAccelY.Value];
Variables[VariableCameraSpeedX] += Camera.Accel.X / 100;
Variables[VariableCameraSpeedY] += Camera.Accel.Y / 100;
if (Variables[VariableCameraSpeedX] > 8)
Variables[VariableCameraSpeedX] = 8;
if (Variables[VariableCameraSpeedY] > 8)
Variables[VariableCameraSpeedY] = 8;
}
CameraMoved();
if (Camera.CurrentPosition.X != old.X || Camera.CurrentPosition.Y != old.Y)
{
Variables[VariableCameraPosX.Value] = Camera.CurrentPosition.X;
Variables[VariableCameraPosY.Value] = Camera.CurrentPosition.Y;
if (Variables[VariableScrollScript.Value] != 0)
RunScript(Variables[VariableScrollScript.Value], false, false, new int[0]);
}
}