From what I can see, this code should only run 20 time but it keeps generating rooms forever.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RoomGeneration : MonoBehaviour
{
public int roomsGenerated; // How many rooms are generated
public GameObject[] rooms;
public GameObject doorTop;
public GameObject doorBottom;
public GameObject doorLeft;
public GameObject doorRight;
public GameObject rayUp;
public GameObject rayDown;
public GameObject rayLeft;
public GameObject rayRight;
int genX; // Room X coord
int genY; // Room Y coord
// Use this for initialization
void Start()
{
genX = 0;
genY = 0;
Instantiate(rooms[0], new Vector2(genX, genY), Quaternion.identity);
}
// Update is called once per frame
void Update()
{
for(int i = 0; i <= 20; i++)
{
CheckAndBuild();
}
}
void CheckAndBuild()
{
int randomRoomDir = Random.Range(0, 4);
int randomRoom = Random.Range(1, 6);
RaycastHit2D hitUp = Physics2D.Raycast(rayUp.transform.position, transform.up, 3f);
RaycastHit2D hitDown = Physics2D.Raycast(rayDown.transform.position, transform.up * -1, 3f);
RaycastHit2D hitLeft = Physics2D.Raycast(rayLeft.transform.position, transform.right * -1, 5f);
RaycastHit2D hitRight = Physics2D.Raycast(rayRight.transform.position, transform.right, 5f);
Debug.DrawRay(rayUp.transform.position, transform.up * 3f, Color.red, 1000f);
Debug.DrawRay(rayDown.transform.position, transform.up * -1 * 3f, Color.red, 1000f);
Debug.DrawRay(rayLeft.transform.position, transform.right * -1 * 5f, Color.red, 1000f);
Debug.DrawRay(rayRight.transform.position, transform.right * 5f, Color.red, 1000f);
if (randomRoomDir == 0 && hitUp.collider == null) // Generate room above
{
Instantiate(doorTop, new Vector2(genX, genY + 3.55f), Quaternion.identity);
genY += 10;
Vector2 roomGenPos = new Vector2(genX, genY);
transform.position = roomGenPos;
Instantiate(rooms[randomRoom], roomGenPos, Quaternion.identity);
Instantiate(doorBottom, new Vector2(genX, genY - 3.55f), Quaternion.identity);
print(hitUp.collider);
}
if (randomRoomDir == 1 && hitDown.collider == null) // Generate room below
{
Instantiate(doorBottom, new Vector2(genX, genY - 3.55f), Quaternion.identity);
genY -= 10;
Vector2 roomGenPos = new Vector2(genX, genY);
transform.position = roomGenPos;
Instantiate(rooms[randomRoom], roomGenPos, Quaternion.identity);
Instantiate(doorTop, new Vector2(genX, genY + 3.55f), Quaternion.identity);
print(hitUp.collider);
}
if (randomRoomDir == 2 && hitLeft.collider == null) // Generate room to the left
{
Instantiate(doorLeft, new Vector2(genX - 7.4f, genY), Quaternion.identity);
genX -= 20;
Vector2 roomGenPos = new Vector2(genX, genY);
transform.position = roomGenPos;
Instantiate(rooms[randomRoom], roomGenPos, Quaternion.identity);
Instantiate(doorRight, new Vector2(genX + 7.4f, genY), Quaternion.identity);
print(hitUp.collider);
}
if (randomRoomDir == 3 && hitRight.collider == null) // Generate room to the right
{
Instantiate(doorRight, new Vector2(genX + 7.4f, genY), Quaternion.identity);
genX += 20;
Instantiate(rooms[randomRoom], new Vector2(genX, genY), Quaternion.identity);
Instantiate(doorLeft, new Vector2(genX - 7.4f, genY), Quaternion.identity);
print(hitUp.collider);
}
}
}