/** * Détruit un mur */ public void DestroyWall(Cube.Direction direction) { if (walls[direction] != null) { walls.Remove(direction); } }
/** * 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); }
/** * 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()); } }