public List<Tile> AvailableNeighbours(Tile center)
 {
     var listToReturn = new List<Tile>();
     var neighbours = center.GetNeighbours();
     foreach (var tile in neighbours)
     {
         if (tile.Available)
         {
             listToReturn.Add(tile);
         }
     }
     return listToReturn;
 }
        public Dictionary<TileMetrics.HexCoordinate, Tile> TilesInRange(Tile center, double range)
        {
            ClearMarkTilesInRange();

            var visited = new Dictionary<TileMetrics.HexCoordinate, bool>();
            visited.Add(center.Coordinate, center);

            var queueTiles = new Queue<Tile>();

            var neighbours = center.GetNeighbours();

            foreach (var tile in neighbours)
            {
                if (tile.Available)
                {
                    if (center.Drag / 2 + tile.Drag / 2 <= range)
                    {
                        tilesInRange_.Add(tile.Coordinate, tile);
                        tile.DistanceFromStart = center.Drag / 2 + tile.Drag / 2;
                        queueTiles.Enqueue(tile);
                    }
                }
                else
                {
                    if (tile.Champion && !tilesWithEnemies_.ContainsKey(tile.Coordinate))
                    {
                        tilesWithEnemies_.Add(tile.Coordinate, tile);
                    }
                }
            }

            while (queueTiles.Count != 0)
            {
                var currentTile = queueTiles.Dequeue();
                neighbours = currentTile.GetNeighbours();
                foreach (var tile in neighbours)
                {
                    if (tile.Available)
                    {
                        if (tilesInRange_.ContainsKey(tile.Coordinate))
                        {
                            if (currentTile.DistanceFromStart + currentTile.Drag / 2 + tile.Drag / 2 <
                                tile.DistanceFromStart)
                            {
                                tile.DistanceFromStart =
                                    currentTile.DistanceFromStart + currentTile.Drag / 2 + tile.Drag / 2;
                                queueTiles.Enqueue(tile);
                            }
                        }
                        else if (currentTile.DistanceFromStart + currentTile.Drag / 2 + tile.Drag / 2 <= range)
                        {
                            tilesInRange_.Add(tile.Coordinate, tile);
                            tile.DistanceFromStart =
                                currentTile.DistanceFromStart + currentTile.Drag / 2 + tile.Drag / 2;
                            queueTiles.Enqueue(tile);
                        }
                    }
                    else
                    {
                        if (tile.Champion && !tilesWithEnemies_.ContainsKey(tile.Coordinate))
                        {

                            tilesWithEnemies_.Add(tile.Coordinate, tile);
                        }
                    }
                }
            }
            tilesInRange_.Remove(center.Coordinate);
            tilesWithEnemies_.Remove(center.Coordinate);
            markTilesInRange();
            return tilesInRange_;
        }