// Use this for initialization void Start() { mainRooms = new List <LegacyRoom>(); floor.transform.localScale *= tileSize; // Check if we're going to cut the map horizontal or vertically. bool horizontalCut = Random.Range(0, 100) < 50; float sizeFirstRoom; int firstRoomDivision = (int)Random.Range(roomNumber * 0.4f, roomNumber * 0.6f); if (horizontalCut) { sizeFirstRoom = Random.Range(mapSize.y * 0.4f, mapSize.y * 0.6f); LegacyRoom room = new LegacyRoom(new Vector3(0, 0, 0), new Vector3(mapSize.x, generationMode == MapGenerationMode.TwoD ? sizeFirstRoom : 0, generationMode == MapGenerationMode.ThreeD ? sizeFirstRoom : 0), firstRoomDivision, roomPercentage, "0"); mainRooms.Add(room); room = new LegacyRoom(new Vector3(0, generationMode == MapGenerationMode.TwoD ? sizeFirstRoom : 0, generationMode == MapGenerationMode.ThreeD ? sizeFirstRoom : 0), new Vector3(mapSize.x, generationMode == MapGenerationMode.TwoD ? mapSize.y - sizeFirstRoom : 0, generationMode == MapGenerationMode.ThreeD ? mapSize.y - sizeFirstRoom : 0), roomNumber - firstRoomDivision, roomPercentage, "1"); mainRooms.Add(room); } else { sizeFirstRoom = Random.Range(mapSize.x * 0.4f, mapSize.x * 0.6f); LegacyRoom room = new LegacyRoom(new Vector3(0, 0, 0), new Vector3(sizeFirstRoom, generationMode == MapGenerationMode.TwoD ? mapSize.y : 0, generationMode == MapGenerationMode.ThreeD ? mapSize.y : 0), firstRoomDivision, roomPercentage, "0"); mainRooms.Add(room); room = new LegacyRoom(new Vector3(sizeFirstRoom, 0, 0), new Vector3(mapSize.x - sizeFirstRoom, generationMode == MapGenerationMode.TwoD ? mapSize.y : 0, generationMode == MapGenerationMode.ThreeD ? mapSize.y : 0), roomNumber - firstRoomDivision, roomPercentage, "1"); mainRooms.Add(room); } }
public LegacyRoom(Vector3 startPoint, Vector3 roomSize, int roomDivisions, float roomPercentage, string previousGeneration = "") { this.startPoint = startPoint; this.roomSize = roomSize; this.numberOfRooms = roomDivisions; this.roomPercentage = roomPercentage; this.generationString = previousGeneration; if (this.numberOfRooms == 1) { this.startPoint = this.startPoint * (1 + (1 - roomPercentage)); this.roomSize = this.roomSize * roomPercentage; } else if (this.numberOfRooms > 1) { this.subRooms = new List <LegacyRoom>(); bool twoD = this.roomSize.z == 0; //Re-escalate the room for lesser size. Vector3 trueStartPoint = new Vector3(this.startPoint.x + 15, twoD ? this.startPoint.y + 15 : 0, twoD ? 0 : this.startPoint.z + 15); Vector3 trueRoomSize = new Vector3(this.roomSize.x - 15, twoD ? this.roomSize.y - 15 : 0, twoD?0:this.roomSize.z - 15); //* this.roomPercentage; bool horizontal = Random.Range(0, 100) < 50; int firstRooms; if (numberOfRooms > 2) { firstRooms = (int)Random.Range(this.numberOfRooms * 0.4f, this.numberOfRooms * 0.6f); } else { firstRooms = 1; } float sizeFirstRoom; if (horizontal) { sizeFirstRoom = twoD ? trueRoomSize.y : trueRoomSize.z; sizeFirstRoom = Random.Range(sizeFirstRoom * 0.4f, sizeFirstRoom * 0.6f); LegacyRoom room = new LegacyRoom(trueStartPoint, new Vector3(trueRoomSize.x, twoD ? sizeFirstRoom : 0, twoD ? 0 : sizeFirstRoom), firstRooms, roomPercentage, this.generationString + "0"); this.subRooms.Add(room); if ((this.numberOfRooms - firstRooms) != 0) { room = new LegacyRoom(trueStartPoint + (twoD ? Vector3.up * (sizeFirstRoom): Vector3.forward * (sizeFirstRoom)), new Vector3(trueRoomSize.x, twoD ? trueRoomSize.y - sizeFirstRoom : 0, twoD ? 0 : trueRoomSize.z - sizeFirstRoom), this.numberOfRooms - firstRooms, roomPercentage, this.generationString + "1"); this.subRooms.Add(room); } } else { sizeFirstRoom = Random.Range(trueRoomSize.x * 0.4f, trueRoomSize.x * 0.6f); LegacyRoom room = new LegacyRoom(trueStartPoint, new Vector3(sizeFirstRoom, twoD ? trueRoomSize.y : 0, twoD ? 0 : trueRoomSize.z), firstRooms, roomPercentage, this.generationString + "0"); this.subRooms.Add(room); if ((this.numberOfRooms - firstRooms) != 0) { room = new LegacyRoom(trueStartPoint + Vector3.right * (sizeFirstRoom), new Vector3(trueRoomSize.x - sizeFirstRoom, twoD ? trueRoomSize.y : 0, twoD ? 0 : trueRoomSize.z), this.numberOfRooms - firstRooms, roomPercentage, this.generationString + "1"); this.subRooms.Add(room); } } } }
private Vector3[] GenerateCorridor(int n1, int n2 = -1) { Vector3[] road = null; LegacyRoom room1 = allRooms[n1]; LegacyRoom room2; //First, we need to see if the rooms can have a road to create. //Check if is left. Vector3 startPoint = room1.StartPoint; if (generationMode == MapGenerationMode.ThreeD) { RaycastHit hit; startPoint = new Vector3(startPoint.x, 0.5f, startPoint.z); for (float z = 0; z <= room1.RoomSize.z; z += room1.RoomSize.z * 0.1f) { startPoint = new Vector3(startPoint.x, 0.5f, room1.StartPoint.z + z); Physics.Raycast(startPoint - Vector3.left, Vector3.left, out hit); if (hit.collider != null && hit.collider.gameObject != null) { int num; if (!int.TryParse(hit.collider.gameObject.name, out num)) { break; } room2 = allRooms[(num)]; if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(x => x == room2) == null) { print("room: " + n1 + " room2: " + n2 + " : " + hit.collider.gameObject.name + " left"); roomsConected.Add(room2); road = new Vector3[2]; road[0] = startPoint; road[1] = hit.point; room1.NumberCorridors += 1; room2.NumberCorridors += 1; return(road); } } } //Check if is right startPoint = new Vector3(room1.StartPoint.x + room1.RoomSize.x, 0.5f, room1.StartPoint.z); for (float z = 0; z <= room1.RoomSize.z; z += room1.RoomSize.z * 0.1f) { startPoint = new Vector3(startPoint.x, 0.5f, room1.StartPoint.z + z); Physics.Raycast(startPoint + Vector3.right, Vector3.right, out hit); if (hit.collider != null && hit.collider.gameObject != null) { int num; if (!int.TryParse(hit.collider.gameObject.name, out num)) { break; } room2 = allRooms[(num)]; if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(x => x == room2) == null) { roomsConected.Add(room2); road = new Vector3[2]; road[0] = startPoint; road[1] = hit.point; room1.NumberCorridors += 1; room2.NumberCorridors += 1; return(road); } } } //Check if is down startPoint = new Vector3(room1.StartPoint.x, 0.5f, room1.StartPoint.z); for (float x = 0; x <= room1.RoomSize.x; x += room1.RoomSize.x * 0.1f) { startPoint = new Vector3(room1.StartPoint.x + x, 0.5f, startPoint.z); Physics.Raycast(startPoint - Vector3.forward, -Vector3.forward, out hit); if (hit.collider != null && hit.collider.gameObject != null) { int num; if (!int.TryParse(hit.collider.gameObject.name, out num)) { break; } room2 = allRooms[(num)]; if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(z => z == room2) == null) { roomsConected.Add(room2); road = new Vector3[2]; road[0] = startPoint; road[1] = hit.point; room1.NumberCorridors += 1; room2.NumberCorridors += 1; return(road); } } } //Check if is up startPoint = new Vector3(room1.StartPoint.x, 0.5f, room1.StartPoint.z + room1.RoomSize.z); for (float x = 0; x <= room1.RoomSize.x; x += room1.RoomSize.x * 0.1f) { startPoint = new Vector3(room1.StartPoint.x + x, 0.5f, startPoint.z); Physics.Raycast(startPoint + Vector3.forward, Vector3.forward, out hit); if (hit.collider != null && hit.collider.gameObject != null) { int num; if (!int.TryParse(hit.collider.gameObject.name, out num)) { break; } room2 = allRooms[(num)]; if ((hit.collider.gameObject.name == n2.ToString() || n2 == -1) && roomsConected.Find(z => z == room2) == null) { roomsConected.Add(room2); road = new Vector3[2]; road[0] = startPoint; road[1] = hit.point; room1.NumberCorridors += 1; room2.NumberCorridors += 1; return(road); } } } } return(road); }
public override bool Equals(object obj) { LegacyRoom aux = obj as LegacyRoom; return(aux != null && this.generationString == aux.generationString); }