protected virtual void MoveCamera()
{
int pos = _camera.CurrentPosition.X;
int t;
Actor a = null;
bool snapToX = /*_snapScroll ||*/ VariableCameraFastX.HasValue && _variables[VariableCameraFastX.Value] != 0;
_camera.CurrentPosition.X = (_camera.CurrentPosition.X & 0xFFF8);
if (VariableCameraMinX.HasValue && _camera.CurrentPosition.X < _variables[VariableCameraMinX.Value])
{
if (snapToX)
_camera.CurrentPosition.X = _variables[VariableCameraMinX.Value];
else
_camera.CurrentPosition.X += 8;
CameraMoved();
return;
}
if (VariableCameraMaxX.HasValue && _camera.CurrentPosition.X > _variables[VariableCameraMaxX.Value])
{
if (snapToX)
_camera.CurrentPosition.X = _variables[VariableCameraMaxX.Value];
else
_camera.CurrentPosition.X -= 8;
CameraMoved();
return;
}
if (_camera.Mode == CameraMode.FollowActor)
{
a = Actors[_camera.ActorToFollow];
int actorx = a.Position.X;
t = actorx / 8 - _screenStartStrip;
if (t < _camera.LeftTrigger || t > _camera.RightTrigger)
{
if (snapToX)
{
if (t > 40 - 5)
_camera.DestinationPosition.X = (actorx + 80);
if (t < 5)
_camera.DestinationPosition.X = (actorx - 80);
}
else
_camera.MovingToActor = true;
}
}
if (_camera.MovingToActor)
{
a = Actors[_camera.ActorToFollow];
_camera.DestinationPosition.X = a.Position.X;
}
if (VariableCameraMinX.HasValue && _camera.DestinationPosition.X < _variables[VariableCameraMinX.Value])
_camera.DestinationPosition.X = _variables[VariableCameraMinX.Value];
if (VariableCameraMaxX.HasValue && _camera.DestinationPosition.X > _variables[VariableCameraMaxX.Value])
_camera.DestinationPosition.X = _variables[VariableCameraMaxX.Value];
if (snapToX)
{
_camera.CurrentPosition.X = _camera.DestinationPosition.X;
}
else
{
if (_camera.CurrentPosition.X < _camera.DestinationPosition.X)
_camera.CurrentPosition.X += 8;
if (_camera.CurrentPosition.X > _camera.DestinationPosition.X)
_camera.CurrentPosition.X -= 8;
}
/* Actor 'a' is set a bit above */
if (_camera.MovingToActor && (_camera.CurrentPosition.X / 8) == (a.Position.X / 8))
{
_camera.MovingToActor = false;
}
CameraMoved();
if (VariableScrollScript.HasValue && _variables[VariableScrollScript.Value] != 0 && pos != _camera.CurrentPosition.X)
{
_variables[VariableCameraPosX.Value] = _camera.CurrentPosition.X;
RunScript(_variables[VariableScrollScript.Value], false, false, new int[0]);
}
}