Пример #1
0
        /// <summary>
        /// Moves the beekeeper.
        /// </summary>
        /// <returns>Returns a vector indicating the beekeeper's movement direction.
        /// </returns>
        private Vector2 SetMotion(InputState input)
        {
            // Calculate the beekeeper location, if allow moving
            Rectangle safeArea = SafeArea;

            PlayerIndex playerIndex;

            Vector2 leftThumbstick = VirtualThumbsticks.LeftThumbstick;

            // If we have no phone directional input, try the gamepad
            if (leftThumbstick == Vector2.Zero)
            {
                leftThumbstick = input.LeftThumbstick(ControllingPlayer, out playerIndex) * new Vector2(1, -1);
            }

            // Move on to keyboard input if we still have nothing
            if (leftThumbstick == Vector2.Zero)
            {
                float vecX = 0;
                float vecY = 0;

                if (input.IsKeyDown(Keys.Left, ControllingPlayer, out playerIndex))
                {
                    vecX--;
                }
                if (input.IsKeyDown(Keys.Right, ControllingPlayer, out playerIndex))
                {
                    vecX++;
                }
                if (input.IsKeyDown(Keys.Up, ControllingPlayer, out playerIndex))
                {
                    vecY--;
                }
                if (input.IsKeyDown(Keys.Down, ControllingPlayer, out playerIndex))
                {
                    vecY++;
                }

                leftThumbstick = new Vector2(vecX, vecY);
            }

            Vector2 movementVector = leftThumbstick * 12f * ScreenManager.SpriteBatch.ScaleVector;

            Rectangle futureBounds = beeKeeper.Bounds;

            futureBounds.X += (int)movementVector.X;
            futureBounds.Y += (int)movementVector.Y;

            if (futureBounds.Left <= safeArea.Left || futureBounds.Right >= safeArea.Right)
            {
                movementVector.X = 0;
            }
            if (futureBounds.Top <= safeArea.Top || futureBounds.Bottom >= safeArea.Bottom)
            {
                movementVector.Y = 0;
            }

            if (movementVector == Vector2.Zero)
            {
                IsInMotion = false;
                beeKeeper.SetMovement(Vector2.Zero);
            }
            else
            {
                Vector2 beekeeperCalculatedPosition =
                    new Vector2(beeKeeper.CentralCollisionArea.X, beeKeeper.CentralCollisionArea.Y) + movementVector;

                if (!CheckBeehiveCollision(beekeeperCalculatedPosition))
                {
                    beeKeeper.SetMovement(movementVector);
                    IsInMotion = true;
                }
            }

            return(movementVector);
        }