public void CreateRoomsOutLine(Vector3 roomPosition, RoomConditions conditions) { //Debug.Log("RoomPosition " + roomPosition.ToString() + " room condition " + conditions.ToString()); bool roomAbove = false; bool roomBelow = false; bool roomLeft = false; bool roomRight = false; Vector3 postionAbove = roomPosition + new Vector3(0, yOffset, 0); Vector3 postionBelow = roomPosition + new Vector3(0, -yOffset, 0); Vector3 postionLeft = roomPosition + new Vector3(-xOffset, 0, 0); Vector3 postionRight = roomPosition + new Vector3(xOffset, 0, 0); for (int i = 0; i < roomPositions.Count; i++) { if (postionAbove == roomPositions[i]) { roomAbove = true; } if (postionBelow == roomPositions[i]) { roomBelow = true; } if (postionLeft == roomPositions[i]) { roomLeft = true; } if (postionRight == roomPositions[i]) { roomRight = true; } } int directionCount = 0; if (roomAbove) { directionCount++; } if (roomBelow) { directionCount++; } if (roomLeft) { directionCount++; } if (roomRight) { directionCount++; } //Debug.Log("create room at " + roomPosition + " roomAbove: " + roomAbove + " roomBelow: " + roomBelow + " roomleft: " + roomLeft + " roomRight: " + roomRight); switch (directionCount) { case 1: if (roomAbove) { roomList.Add(RandomRoom(RoomTypes.singleUp, roomPosition, conditions)); } else if (roomBelow) { roomList.Add(RandomRoom(RoomTypes.singleDown, roomPosition, conditions)); } else if (roomLeft) { roomList.Add(RandomRoom(RoomTypes.singleLeft, roomPosition, conditions)); } else { //right room roomList.Add(RandomRoom(RoomTypes.singleRight, roomPosition, conditions)); } break; case 2: if (roomAbove && roomBelow) { roomList.Add(RandomRoom(RoomTypes.DoubleUpDown, roomPosition, conditions)); } else if (roomLeft && roomRight) { roomList.Add(RandomRoom(RoomTypes.DoubleLeftRight, roomPosition, conditions)); } else if (roomAbove && roomLeft) { roomList.Add(RandomRoom(RoomTypes.DoubleUpLeft, roomPosition, conditions)); } else if (roomAbove && roomRight) { roomList.Add(RandomRoom(RoomTypes.DoubleUpRight, roomPosition, conditions)); } else if (roomBelow && roomLeft) { roomList.Add(RandomRoom(RoomTypes.DoubleDownLeft, roomPosition, conditions)); } else if (roomBelow && roomRight) { roomList.Add(RandomRoom(RoomTypes.DoubleDownRight, roomPosition, conditions)); } else { Debug.LogError("three way room error no logic found"); } break; case 3: if (roomAbove && roomBelow && roomLeft) { roomList.Add(RandomRoom(RoomTypes.trippleUpDownLeft, roomPosition, conditions)); } else if (roomAbove && roomBelow && roomRight) { roomList.Add(RandomRoom(RoomTypes.trippleUpDownRight, roomPosition, conditions)); } else if (roomAbove && roomLeft && roomRight) { roomList.Add(RandomRoom(RoomTypes.trippleUpLeftRight, roomPosition, conditions)); } else if (roomBelow && roomLeft && roomRight) { roomList.Add(RandomRoom(RoomTypes.trippleDownLeftRight, roomPosition, conditions)); } break; case 4: roomList.Add(RandomRoom(RoomTypes.Fourway, roomPosition, conditions)); break; default: //Debug.LogError("found no room exisits"); break; } }
private GameObject RandomRoom(RoomPrefabSubTypes selection, Vector3 position, RoomConditions conditions) { GameObject roomType = null; //make it so the enterance and exit will never be a hallway switch (conditions) { case RoomConditions.StairRoom: roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.OpenRoom); break; case RoomConditions.TreasureRoom: roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.TreasureRoom); break; case RoomConditions.CombatRoom: //roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.CombatRoom); //this is save time on create new room set with space for combat roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.OpenRoom); Debug.Log("CombatRoom: " + roomType.name); //roomType.GetComponent<RoomPlacementLogic>().combatRoom = true; break; case RoomConditions.DefaultRoom: //everything but treasure room and hidden rooms int rand = Random.Range(0, 2); if (rand == 1) { roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.OpenRoom); } else { roomType = RoomTypes.getRandomRoom(selection, RoomPlacementLogic.RoomType.Hallway); } break; } if (roomType == null) { Debug.LogError("Room creation returned Null. Issue with setup " + selection.ToString() + " conditions " + conditions.ToString()); } GameObject room = Instantiate(roomType); room.transform.parent = RoomParent.transform; room.transform.localPosition = position; return(room); }
public void GenterateDungeon() { DungeonTracker.instance.finishedLoadingLevel = false; Debug.Log("GenterateDungeon: Entered"); roomList = new List <GameObject>(); int roomIndex = 0; //help to figure out if certain room should be special treasureRoomIndexs = new List <int>(); combatRoomIndexs = new List <int>(); calcuateSpecailRooms(); //build out the rooms CreateRoomsOutLine(Vector3.zero, RoomConditions.StairRoom); //starting room for (int i = 1; i < roomPositions.Count - 1; i++) { RoomConditions conditions = RoomConditions.DefaultRoom; if (treasureRoomIndexs.Contains(roomIndex)) { conditions = RoomConditions.TreasureRoom; } if (combatRoomIndexs.Contains(roomIndex)) { conditions = RoomConditions.CombatRoom; } CreateRoomsOutLine(roomPositions[i], conditions); roomIndex++; } CreateRoomsOutLine(endRoom.transform.position, RoomConditions.StairRoom); doorList = new List <GameObject>(); //creating props for the room for (int i = 0; i < roomList.Count; i++) { RoomPlacementLogic rp = roomList[i].GetComponent <RoomPlacementLogic>(); if (i == 0) //if (roomList[i].transform.position == Vector3.zero) { //start position upStairs = Instantiate(RoomObjPrefabs.StairsUp, RoomProps.transform).GetComponent <DungeonStairs>(); upStairs.transform.position = rp.StairPositions[0].position; } else if (i == roomList.Count - 1) //(roomList[i].transform.position == endRoom.transform.position) { //end room downStairs = Instantiate(RoomObjPrefabs.StairsDown, RoomProps.transform).GetComponent <DungeonStairs>(); downStairs.transform.position = rp.StairPositions[0].position; } else { //all other room types } //door logic //AddDoorLogic(rp); } //DungeonTracker.instance.finishedLoadingLevel = true; StartCoroutine(buildMesh()); //Debug.Log("levelGenerator: finished adding stairs and doors"); }