public void ChooseSmallRoomLayout(int sourceRoomPosition) { //Choose layout roomLayout = Random.Range(0, noOfSmallLayouts); bool reset = false; //Setting what positions will remain valid after layout selection if (roomLayout == 0) { //In default layout, all odds will be same and all evens too. But challenge variants will be affected differently int randRot = Random.Range(0, 8); transform.GetChild(0).GetChild(roomLayout).Rotate(0, 45 * randRot, 0); } if (roomLayout == 1) { for (int i = 0; i < validRGPositions.Length; i++) { if (i == 1 || i == 3 || i == 5 || i == 7) { validRGPositions[i] = true; } else { validRGPositions[i] = false; //If source room position is set to invalid, reset if (i == sourceRoomPosition) { reset = true; break; } } } int randRot = Random.Range(0, 4); transform.GetChild(0).GetChild(roomLayout).Rotate(0, 90 * randRot, 0); } if (roomLayout == 2) { if (Roll(50)) { transform.GetChild(0).GetChild(roomLayout).Rotate(0, 90, 0); validRGPositions[0] = false; validRGPositions[8] = false; } else { validRGPositions[2] = false; validRGPositions[6] = false; } if (!validRGPositions[sourceRoomPosition]) { reset = true; } } if (roomLayout == 3) { int randRot = Random.Range(0, 4); if (randRot == 1) { validRGPositions[8] = false; } else if (randRot == 2) { validRGPositions[6] = false; } else if (randRot == 3) { validRGPositions[0] = false; } else if (randRot == 0) { validRGPositions[2] = false; } if (!validRGPositions[sourceRoomPosition]) { reset = true; } else { transform.GetChild(0).GetChild(roomLayout).Rotate(0, 90 * randRot, 0); } } if (roomLayout == 4) { int randRot = Random.Range(0, 8); transform.GetChild(0).GetChild(roomLayout).Rotate(0, 45 * randRot, 0); } //Layout is incompatible with source room position, try again if (reset) { for (int i = 0; i < validRGPositions.Length; i++) { validRGPositions[i] = true; } roomLayout = -1; reset = false; ChooseSmallRoomLayout(sourceRoomPosition); return; } //Activate the selected layout and store it in RoomScript Transform layoutTransform = transform.GetChild(0).GetChild(roomLayout); layoutTransform.gameObject.SetActive(true); //Set up enemy spawning in room if (roomScript != null) { roomScript.SetEnemySpawnPoints(layoutTransform); StartCoroutine(roomScript.SelectEnemies()); } else { Debug.LogError("Room Script of" + gameObject.name + "is null"); } }