bounds.intersect outcome not changing after first iteration of a loop
So I'm trying to write a simple brute force script to place rooms around an area and move rooms if they intersect with one another, however it seems that the outcome of the intersection check remains unchanged after the first iteration despite the room being moved (extensively tested and program always gets stuck the loop of checking intersection.
void Start()
{
floorLvl = 1;
int totalRooms = (11); //4 extra are 2 chest rooms, shop starting room and boss. 5 * floorLvl + 2
GameObject[] instRooms = new GameObject[totalRooms];
int maxPos = 25; //(11 * (4 * floorLvl + 1))/2;
bool overlap;
instRooms[0] = Instantiate(specialRooms[0],new Vector2(0,0), Quaternion.identity);
instRooms[1] = Instantiate(specialRooms[1], new Vector2(maxPos, maxPos), Quaternion.identity);
instRooms[2] = Instantiate(specialRooms[2], new Vector2(Random.Range(-maxPos, maxPos), Random.Range(-maxPos, maxPos)), Quaternion.identity);
do
{
overlap = false;
for (int j = 0; j < 2; j++)
{
Collider2D spawnedRoom = instRooms[2].GetComponent<Collider2D>();
Collider2D checkingRoom = instRooms[j].GetComponent<Collider2D>();
if (spawnedRoom.bounds.Intersects(checkingRoom.bounds))
{
overlap = true;
instRooms[2].transform.position = new Vector2(Random.Range(-maxPos, maxPos), Random.Range(-maxPos, maxPos));
j = 2;
}
}
} while (overlap);
for (int i = 0; i <2 ; i++)
{
instRooms[i + 3] = Instantiate(chestRooms[Random.Range(0, 2)], new Vector2(Random.Range(-maxPos, 0), Random.Range(-maxPos, maxPos)), Quaternion.identity);
do
{
overlap = false;
for (int j = 0; j < i + 3; j++)
{
Collider2D spawnedRoom = instRooms[i + 3].GetComponent<Collider2D>();
Collider2D checkingRoom = instRooms[j].GetComponent<Collider2D>();
if (spawnedRoom.bounds.Intersects(checkingRoom.bounds))
{
overlap = true;
instRooms[i + 3].transform.position = new Vector2(Random.Range(-maxPos, 0), Random.Range(-maxPos, maxPos));
j = i + 3;
}
}
} while (overlap);
}
for (int i = 0; i < 6; i++)
{
instRooms[i + 5] = Instantiate(rooms[i], new Vector2(Random.Range(-maxPos, maxPos), Random.Range(-maxPos, maxPos)), Quaternion.identity);
do
{
overlap = false;
for(int j = 0; j < i+5; j++)
{
Collider2D spawnedRoom = instRooms[i + 5].GetComponent<Collider2D>();
Collider2D checkingRoom = instRooms[j].GetComponent<Collider2D>();
if (spawnedRoom.bounds.Intersects(checkingRoom.bounds))
{
overlap = true;
instRooms[i + 5].transform.position = new Vector2(Random.Range(-maxPos, maxPos), Random.Range(-maxPos, maxPos));
j = i + 5;
}
}
} while (overlap);
}
}
Ignore the comments, they're self notes for the future.
I just don't understand why the outcome is forever the same even though the room is moved
Your answer
Follow this Question
Related Questions
why wont my ship fire alternating guns? 0 Answers
2D depth simulation in a sidescroller 1 Answer
Objects respawn out of bond ? 2 Answers
How do I make 2d movement with strafing? 0 Answers
Should i use big one scene, or divided scene for AI Navigation ? 0 Answers