public GameObject GetRoom(RoomEntrances whichRoom) { return(doors[(int)whichRoom]); }
void GenerateMap() { roomMap[howManyRooms / 2, howManyRooms / 2] = initialRoom; var initialRoomEntrances = initialRoom.GetComponent <RoomEntrances>(); initialRoomEntrances.x = howManyRooms / 2; initialRoomEntrances.y = howManyRooms / 2; foreach (var exit in initialRoomEntrances.Exits) { exit.SetCoordinates(initialRoomEntrances.x, initialRoomEntrances.y); exit.level = 0; unspawnedExits.Enqueue(exit); } remainingExitsToCreate -= 4; unspawnedExits.Enqueue(null); while (unspawnedExits.Count > 0) { Exit curExit = unspawnedExits.Dequeue(); if (curExit == null) { Debug.Log("New Level"); continue; } // Debug.Log("Doing exit " + curExit.ExitDirection); if (roomMap[curExit.x, curExit.y] != null) // Room already created at exit position { // Debug.Log($"Room at ({curExit.x}, {curExit.y}) = {roomMap[curExit.x, curExit.y]}"); // Debug.Log($"Has direction {curExit.RequiredEntranceDirection}? {roomMap[curExit.x, curExit.y].GetComponent<RoomEntrances>().HasDirection(curExit.RequiredEntranceDirection)}"); ResolveExitCollision(curExit, roomMap[curExit.x, curExit.y].GetComponent <RoomEntrances>()); // Debug.Log($"ROOM COLLISION AT ({curExit.x}, {curExit.y})"); continue; } else { GameObject roomToSpawn = GetRoomForExit(curExit); // Add room at exit RoomEntrances newRoomEntrances = SpawnRoom(roomToSpawn, curExit); newRoomEntrances.level = curExit.level + 1; Room newRoom = newRoomEntrances.GetComponent <Room>(); newRoomEntrances.x = curExit.x; newRoomEntrances.y = curExit.y; roomMap[curExit.x, curExit.y] = newRoom; remainingExitsToCreate -= newRoomEntrances.NExits - 1; if (remainingExitsToCreate < 0) { Debug.LogError("smth went worng, negative exits to creat"); } foreach (var newRoomExit in newRoomEntrances.Exits) { newRoomExit.SetCoordinates(newRoomEntrances.x, newRoomEntrances.y); newRoomExit.level = newRoomEntrances.level; if (!newRoomExit.gameObject.activeSelf) { // if (roomMap[newRoomExit.x, newRoomExit.y] != null) // { // ResolveExitCollision(newRoomExit, roomMap[newRoomExit.x, newRoomExit.y].GetComponent<RoomEntrances>()); // } continue; } if (newRoomExit.ExitDirection == curExit.RequiredEntranceDirection) { SetupTeleporters(curExit.Teleporter, newRoomExit.Teleporter); continue; } unspawnedExits.Enqueue(newRoomExit); // Debug.Log("Exit in prevRoom: " + curExit.ExitDirection + " | Exit in nextRoom: " + exit.ExitDirection + " | reqDirection: " + curExit.RequiredEntranceDirection); } HandleNewRoomType(newRoomEntrances); } } }
void OnRoomEntered(RoomEntrances entrances) { entrances.StartCoroutine(OnRoomEnteredRoutine()); }