public static int GetDistance(MapCell p, MapCell q) { return((int)Heuristic.Octile(Math.Abs(p.X - q.X), Math.Abs(p.Y - q.Y))); }
public MapCell GetLastGoodPosition(short x, short y, MoveType type, ClientSession session) { var cell = new MapCell { X = x, Y = y }; switch (type) { case MoveType.Right: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.X -= 1; } return(cell); case MoveType.Left: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.X += 1; } return(cell); case MoveType.Up: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.Y += 1; } return(cell); case MoveType.Down: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.Y -= 1; } return(cell); case MoveType.DiagUpRight: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.Y += 1; cell.X -= 1; } return(cell); case MoveType.DiagUpLeft: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.Y += 1; cell.X += 1; } return(cell); case MoveType.DiagDownLeft: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.Y -= 1; cell.X += 1; } return(cell); case MoveType.DiagDownRight: while (!GetDefinedPosition(cell.X, cell.Y)) { cell.Y -= 1; cell.X -= 1; } return(cell); } return(cell); }