internal void GenerateEnvorionment( ushort[,] map, MeshGenerator.SquareGrid squareGrid, ICollection <MapGenerator.Room> rooms, ICollection <MapGenerator.Passage> passages) { Init(); PrepareMainRoom(rooms); foreach (MapGenerator.Passage passage in passages) { foreach (MapGenerator.Coord coord in passage.passageCoords) { MeshGenerator.ControlNode stoneNode = squareGrid.controlNodes[coord.tileX, coord.tileY]; Vector3 stonePosition = stoneNode.position; GameObject stoneObject = Instantiate(stonePrefab, stonePosition + stonePrefab.transform.position, stonePrefab.transform.rotation); stoneObject.transform.parent = environment.transform; stoneObject.layer = environment.layer; stoneObject.isStatic = environment.isStatic; map[stoneNode.mapCoords.tileX, stoneNode.mapCoords.tileY] = (ushort)EnvironmentObjectType.Stone; } } PreparePlayerStartPosition(map, squareGrid); }
private void PreparePlayerStartPosition(ushort[,] map, MeshGenerator.SquareGrid squareGrid) { if (mainRoom == null) { return; } int tries = 0; bool valid = false; do { MapGenerator.Coord playerStartCoord = mainRoom.tiles[UnityEngine.Random.Range(0, mainRoom.tiles.Count - 1)]; playerStartNode = squareGrid.controlNodes[playerStartCoord.tileX, playerStartCoord.tileY]; valid = playerStartNode != null && !playerStartNode.active && // active means wall map[playerStartNode.mapCoords.tileX, playerStartNode.mapCoords.tileY] == (ushort)EnvironmentObjectType.Void; } while (!valid && tries++ <= mainRoom.tiles.Count); if (playerStartNode == null || playerStartNode.active) { Debug.Log("Can't find player start node"); } else { map[playerStartNode.mapCoords.tileX, playerStartNode.mapCoords.tileY] = (ushort)EnvironmentObjectType.PlayerStart; } }
internal void InitSpawn( ushort[,] map, MeshGenerator.SquareGrid squareGrid, List <MapGenerator.Room> rooms, HashSet <MapGenerator.Passage> passages) { foreach (MapGenerator.Room room in rooms) { MapGenerator.Coord enemySpawnCoord = default(MapGenerator.Coord); int tries = 0; bool match = false; do { MapGenerator.Coord curCoord = room.tiles[UnityEngine.Random.Range(0, room.tiles.Count)]; if (map[curCoord.tileX, curCoord.tileY] == (ushort)EnvironmentObjectType.Void) { enemySpawnCoord = curCoord; match = true; break; } } while (tries++ <= 5); if (!match) { continue; } Vector3 enemyPosition = squareGrid.controlNodes[enemySpawnCoord.tileX, enemySpawnCoord.tileY].position; GameObject enemyObject = Instantiate(enemyPrefab, enemyPosition + enemyPrefab.transform.position, enemyPrefab.transform.rotation); enemyObject.transform.parent = enemiesHolder.transform; enemyObject.layer = enemiesHolder.layer; } }