public void decideTypes() { int neighbors = 4; if (up == null)//find neighbors { neighbors--; } if (down == null) { neighbors--; } if (right == null) { neighbors--; } if (left == null) { neighbors--; } if (type != RoomType.StartRoom) { if (neighbors == 4) { type = RoomType.Quad; } else if (neighbors == 3) { if (up == null) { type = RoomType.triDown; } else if (down == null) { type = RoomType.triUp; } else if (left == null) { type = RoomType.triRight; } else { type = RoomType.triLeft; } } else if (neighbors == 2) { if (up == null) { if (left == null) { type = RoomType.cornerUpLeft; } else if (right == null) { type = RoomType.cornerUpRight; } else if (down == null) { type = RoomType.hallwayUpDown; } } else if (down == null) { if (left == null) { type = RoomType.cornerDownLeft; } else if (right == null) { type = RoomType.cornerDownRight; } } else if (left == null) { if (right == null) { type = RoomType.hallwayLeftRight; } } } else { if (up != null) { type = RoomType.deadEndDown; } else if (down != null) { type = RoomType.deadEndUp; } else if (left != null) { type = RoomType.deadEndLeft; } else if (right != null) { type = RoomType.deadEndRight; } } } lock (lockObject) { lastList.Add(this); } if (up != null && !lastList.Contains(up)) { up.decideTypes(); } if (down != null && !lastList.Contains(down)) { down.decideTypes(); } if (right != null && !lastList.Contains(right)) { right.decideTypes(); } if (left != null && !lastList.Contains(left)) { left.decideTypes(); } }
// Use this for initialization void Start() { Floortile = bd; int rooms = 22; List <Vector2> Dungeon = new List <Vector2>(); while (Dungeon.Count < rooms) { Vector2 start = new Vector2(Random.Range(1, sizeX - 1), Random.Range(1, sizeY - 1)); Dungeon = Path(rooms, new Vector2(4, 4)); } for (int i = 0; i < Dungeon.Count; i++) { if (i == 0) { Rooms[(int)Dungeon[i].x][(int)Dungeon[i].y] = new RoomScript(); startRoom = Rooms[(int)Dungeon[i].x][(int)Dungeon[i].y]; startRoom.type = RoomScript.RoomType.StartRoom; Map[(int)Dungeon[i].x][(int)Dungeon[i].y] = 2; } else { Rooms[(int)Dungeon[i].x][(int)Dungeon[i].y] = new RoomScript(); Map[(int)Dungeon[i].x][(int)Dungeon[i].y] = 1; } } for (int x = 0; x < Rooms.Count; x++) { for (int y = 0; y < Rooms[x].Count; y++) { if (Rooms[x][y] != null) { if (x + 1 < Rooms.Count) { if (Rooms[x + 1][y] != null) { Rooms[x][y].right = Rooms[x + 1][y]; } } if (x - 1 >= 0) { if (Rooms[x - 1][y] != null) { Rooms[x][y].left = Rooms[x - 1][y]; } } if (y + 1 < Rooms[x].Count) { if (Rooms[x][y + 1] != null) { Rooms[x][y].up = Rooms[x][y + 1]; } } if (y - 1 >= 0) { if (Rooms[x][y - 1] != null) { Rooms[x][y].down = Rooms[x][y - 1]; } } } } } startRoom.decideTypes(); for (int i = 0; i < Rooms.Count; i++) { for (int t = 0; t < Rooms[i].Count; t++) { GameObject temp; if (Rooms[i][t] != null) { switch (Rooms[i][t].type) { case RoomScript.RoomType.deadEndUp: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180)); break; case RoomScript.RoomType.deadEndDown: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0)); break; case RoomScript.RoomType.deadEndRight: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270)); break; case RoomScript.RoomType.deadEndLeft: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/End/End1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90)); break; case RoomScript.RoomType.hallwayUpDown: if (Random.value > .5f) { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90)); } else { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270)); } break; case RoomScript.RoomType.hallwayLeftRight: if (Random.value > .5f) { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0)); } else { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Hallway/Hallway1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180)); } break; case RoomScript.RoomType.cornerUpLeft: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270)); break; case RoomScript.RoomType.cornerUpRight: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180)); break; case RoomScript.RoomType.cornerDownRight: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90)); break; case RoomScript.RoomType.cornerDownLeft: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Corner/Corner1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0)); break; case RoomScript.RoomType.triUp: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0)); break; case RoomScript.RoomType.triDown: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180)); break; case RoomScript.RoomType.triLeft: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90)); break; case RoomScript.RoomType.triRight: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Tri/Tri1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270)); break; case RoomScript.RoomType.Quad: float y = Random.value; if (y > .75f) { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 270)); } else if (y > .5f) { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 180)); } else if (y > .25f) { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 90)); } else { temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Quad/Quad1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0)); } break; case RoomScript.RoomType.StartRoom: temp = Instantiate <GameObject>(Resources.Load <GameObject>("Rooms/Spawn/Spawn1"), new Vector3(i * bd.transform.localScale.x, t * bd.transform.localScale.y, 0f), Quaternion.Euler(0, 0, 0)); GameObject Op = GameObject.FindGameObjectWithTag("Player"); Op.transform.position = temp.transform.position; //- new Vector3(temp.transform.localScale.x/2, temp.transform.localScale.y / 2, 0); break; default: break; } } } } PlaceWalls(); }