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

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

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