public override int GetHashCode() { return(RoomA.GetHashCode() + RoomB.GetHashCode()); }
private void ConnectCloseRoom(List <Room> Rooms, bool forceAccessibleFromMainRoom = false) { List <Room> roomListA = new List <Room>(); List <Room> roomListB = new List <Room>(); if (forceAccessibleFromMainRoom) { foreach (Room room in Rooms) { if (room.isAccessibleFromMainRoom) { roomListB.Add(room); } else { roomListA.Add(room); } } } else { roomListA = roomListB = Rooms; } int bestDistance = 0; Coord bestTileA = new Coord(); Coord bestTileB = new Coord(); Room bestRoomA = new Room(); Room bestRoomB = new Room(); bool bestConnectionFound = false; foreach (Room RoomA in roomListA) { if (!forceAccessibleFromMainRoom) { bestConnectionFound = false; if (RoomA.connectedRooms.Count > 0) { continue; } } foreach (Room RoomB in roomListB) { if (RoomA == RoomB || RoomA.IsConnected(RoomB)) { continue; } /* * if (RoomA.IsConnected(RoomB)) * { * bestConnectionFound = false; * break; * } */ for (int tileIndexA = 0; tileIndexA < RoomA.edgeTiles.Count; tileIndexA++) { for (int tileIndexB = 0; tileIndexB < RoomB.edgeTiles.Count; tileIndexB++) { Coord tileA = RoomA.edgeTiles[tileIndexA]; Coord tileB = RoomB.edgeTiles[tileIndexB]; int distanceBWRooms = (int)(Mathf.Pow(tileA.tileX - tileB.tileX, 2) + Mathf.Pow(tileA.tileY - tileB.tileY, 2)); if (distanceBWRooms < bestDistance || !bestConnectionFound) { bestDistance = distanceBWRooms; bestConnectionFound = true; bestTileA = tileA; bestTileB = tileB; bestRoomA = RoomA; bestRoomB = RoomB; } } } } if (bestConnectionFound && !forceAccessibleFromMainRoom) { CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB); } } if (bestConnectionFound && forceAccessibleFromMainRoom) { CreatePassage(bestRoomA, bestRoomB, bestTileA, bestTileB); ConnectCloseRoom(Rooms, true); } if (!forceAccessibleFromMainRoom) { ConnectCloseRoom(Rooms, true); } }