/// <param name="up">Above.</param>\r
/// <param name="down">Below.</param>\r
/// <returns>The neighbor cell coordinates.</returns>\r
- public static Point GetNeighborCell(Point point, bool left, bool right, bool up, bool down)\r
+ public static Point GetNeighbor(Point point, bool left, bool right, bool up, bool down)\r
{\r
if (left) point.X--;\r
if (right) point.X++;\r
return point;\r
}\r
\r
+ /// <summary>\r
+ /// Helper method to get the two neighbor cells of two nearby cells.\r
+ /// </summary>\r
+ /// <param name="a">A point.</param>\r
+ /// <param name="b">Another point.</param>\r
+ /// <returns>An array of two points representing the neighbor cells.</returns>\r
+ public static Point[] GetNeighbors(Point a, Point b)\r
+ {\r
+ Point[] neighbors = new Point[2];\r
+ neighbors[0] = new Point(a.X, b.Y);\r
+ neighbors[1] = new Point(b.X, a.Y);\r
+ return neighbors;\r
+ }\r
+\r
+\r
/// <summary>\r
/// Helper method to get a Direction type from directions.\r
/// </summary>\r
void UpdateCoordinates(bool moveLeft, bool moveRight, bool moveUp, bool moveDown)\r
{\r
mLastCoordinates = mCoordinates;\r
- mCoordinates = GetNeighborCell(mCoordinates, moveLeft, moveRight, moveUp, moveDown);\r
+ mCoordinates = GetNeighbor(mCoordinates, moveLeft, moveRight, moveUp, moveDown);\r
\r
if ((moveLeft && moveUp) || (moveUp && moveRight) || (moveRight && moveDown) || (moveDown && moveLeft))\r
{\r
bool moveRight = keysPressed.Contains(Keys.Right);\r
bool moveUp = keysPressed.Contains(Keys.Up);\r
bool moveDown = keysPressed.Contains(Keys.Down);\r
- Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);\r
- if (!keysPressed.Contains(Keys.LeftControl))\r
+\r
+ List<Point> possibleDestinations = new List<Point>();\r
+ possibleDestinations.Add(MovementManager.GetNeighbor(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown));\r
+ possibleDestinations.AddRange(MovementManager.GetNeighbors(mMotion.Coordinates, possibleDestinations[0]));\r
+\r
+ Direction direction = Direction.None;\r
+ foreach (Point destination in possibleDestinations)\r
{\r
if (game.IsCellOpen(destination))\r
{\r
- mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
- }\r
- else\r
- {\r
- mMotion.Update(timeSpan);\r
+ direction = MovementManager.GetDirection(mMotion.Coordinates, destination);\r
+ break;\r
}\r
}\r
- else\r
- {\r
- mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
- }\r
+\r
+ if (direction != Direction.None && !keysPressed.Contains(Keys.LeftControl)) mMotion.Update(timeSpan, direction);\r
+ else mMotion.LockUpdate(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
}\r
\r
public void powerUp(int amount)\r
moveDown = true;\r
else if (velocity.Y < 0)\r
moveUp = true;\r
- Point destination = MovementManager.GetNeighborCell(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);\r
+ Point destination = MovementManager.GetNeighbor(mMotion.Coordinates, moveLeft, moveRight, moveUp, moveDown);\r
mMotion.Update(timeSpan, moveLeft, moveRight, moveUp, moveDown);\r
\r
\r