示例#1
0
 /**
  * Détruit un mur
  */
 public void DestroyWall(Cube.Direction direction)
 {
     if (walls[direction] != null)
     {
         walls.Remove(direction);
     }
 }
示例#2
0
    /**
     * Démarrer la génération de la map
     */
    public Map GenerateMap()
    {
        Tile tile;
        Tile neighbour;

        HashSet <Tile> tileGroup;
        HashSet <Tile> neighbourGroup;

        var grid = map.grid.Hexes;

        foreach (Cube position in grid)
        {
            tile          = map.MakeTile(position);
            tile.walkable = true;

            // Création d'un groupe unique pour cette tile
            tileGroup = new HashSet <Tile>();
            tileGroup.Add(tile);
            groups.Add(tileGroup);
        }

        // Retrouver toutes les tiles voisines des autres
        map.FindAllNeighbors();

        // Ouverture aléatoire de murs
        while (groups.Count > 1)
        {
            tile      = map.RandomTile();
            tileGroup = GetGroupOf(tile);

            Cube.Direction direction = Cube.Direction.GetRandom();

            if (tile.neighbors[direction] != null)
            {
                neighbour      = tile.neighbors[direction];
                neighbourGroup = GetGroupOf(neighbour);

                if (tileGroup != neighbourGroup)
                {
                    // Destruction des murs
                    map.DestroyWalls(tile, direction);

                    // Fusion des groupes
                    foreach (Tile neighbourGroupTile in neighbourGroup)
                    {
                        tileGroup.Add(neighbourGroupTile);
                    }

                    neighbourGroup.Clear();
                    groups.Remove(neighbourGroup);
                }
            }
        }

        Debug.Log("Map generation done, " + map.grid.Hexes.Count + " tiles created.");

        return(map);
    }
示例#3
0
    /**
     * Supprimer le mur entre deux tiles
     */
    public void DestroyWalls(Tile tile, Cube.Direction direction)
    {
        tile.DestroyWall(direction);

        if (tile.neighbors[direction] != null)
        {
            tile.neighbors[direction].DestroyWall(direction.Opposite());
        }
    }