NScumm.Scumm.ScummEngine7.MoveCamera C# (CSharp) Метод

MoveCamera() защищенный Метод

protected MoveCamera ( ) : void
Результат void
        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]);
            }
        }