/// <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); }