private void FillPathInBlueprintRoom(Room room, Path path, int axis, int direction) { Vector2Int pathDirection = new Vector2Int((axis ^ 1), axis) * direction; BluePrintRoom bRoom = room as BluePrintRoom; Vector2Int pathStartPoint = pathDirection.x + pathDirection.y < 0 ? path.position : path.position + (path.GetSize() - Vector2Int.one) * new Vector2Int(axis ^ 1, axis); bool setPath = false; int iterator = 1; Vector2Int pos = Vector2Int.zero, blueprintIndex; do { setPath = false; for (int i = 0; i < pathWidth; i++) { pos = pathStartPoint + pathDirection * iterator + new Vector2Int(axis, axis ^ 1) * i; blueprintIndex = pos - bRoom.position; if (!bRoom.GetBlueprintPixel(blueprintIndex.x, blueprintIndex.y)) { setPath = true; } } iterator++; } while (setPath); if (pathDirection.x + pathDirection.y < 0) { path.size += new Vector2Int((axis ^ 1), axis) * (iterator - 1); path.SetPosition(path.position + pathDirection * (iterator - 1)); } else { path.size += (pathDirection * (iterator - 1)); } }
Room GenerateRoom() { Room newRoom; if (useNormalRooms && Random.Range(0, 1f) <= normalRoomProbability) { int sizeX = Random.Range(roomDimensionX.x, roomDimensionX.y); int sizeY = Random.Range(roomDimensionY.x, roomDimensionY.y); newRoom = new Room(new Vector2Int(sizeX, sizeY)); } else { int rng = Random.Range(0, roomLookup.Count); newRoom = new BluePrintRoom(Vector2Int.one, roomBlueprints[roomLookup[rng]].roomBluePrint, roomBlueprints[roomLookup[rng]].randomRotaion); } return(newRoom); }