public void PlaceKeysAndVictory() { List <GridSquare> Quad1 = grid.AllSquares.Where(s => s.quadrant == Quadrant.FirstQuadrant).ToList(); List <GridSquare> Quad2 = grid.AllSquares.Where(s => s.quadrant == Quadrant.SecondQuadrant).ToList(); List <GridSquare> Quad3 = grid.AllSquares.Where(s => s.quadrant == Quadrant.ThirdQuadrant).ToList(); List <GridSquare> Quad4 = grid.AllSquares.Where(s => s.quadrant == Quadrant.FourthQuadrant).ToList(); GridSquare q1key = null, q2key = null, q3key = null, q4key = null; GridSquare victorySquare = null; bool locker = true; while (locker) { locker = false; q1key = Quad1[random.Next(0, Quad1.Count)]; HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>(); quadBuffer = GatherNeighbors(q1key, 2); foreach (var cell in quadBuffer) { if (cell.quadrant != Quadrant.FirstQuadrant) { locker = true; foreach (var c in quadBuffer) { c.gatherTrigger = false; } break; } } } locker = true; while (locker) { locker = false; q2key = Quad2[random.Next(0, Quad2.Count)]; HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>(); quadBuffer = GatherNeighbors(q2key, 2); foreach (var cell in quadBuffer) { if (cell.quadrant != Quadrant.SecondQuadrant) { locker = true; foreach (var c in quadBuffer) { c.gatherTrigger = false; } break; } } } locker = true; while (locker) { locker = false; q3key = Quad3[random.Next(0, Quad3.Count)]; HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>(); quadBuffer = GatherNeighbors(q3key, 2); foreach (var cell in quadBuffer) { if (cell.quadrant != Quadrant.ThirdQuadrant) { locker = true; foreach (var c in quadBuffer) { c.gatherTrigger = false; } break; } } } locker = true; while (locker) { locker = false; q4key = Quad3[random.Next(0, Quad3.Count)]; HashSet <GridSquare> quadBuffer = new HashSet <GridSquare>(); quadBuffer = GatherNeighbors(q4key, 2); foreach (var cell in quadBuffer) { if (cell.quadrant != Quadrant.ThirdQuadrant) { locker = true; foreach (var c in quadBuffer) { c.gatherTrigger = false; } break; } } } locker = true; while (locker) { locker = false; victorySquare = Quad4[random.Next(0, Quad4.Count)]; if (victorySquare.Position == q4key.Position) { locker = true; } } GameObject key1 = Instantiate(keys[0], q1key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform); key1.transform.localScale = key1.transform.localScale / 2; key1.transform.localPosition = q1key.Position + new Vector3(0f, 1, 0f); q1key.RemoveAllWalls(gridHeight, gridWidth); GameObject key2 = Instantiate(keys[1], q2key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform); key2.transform.localScale = key2.transform.localScale / 2; key2.transform.localPosition = q2key.Position + new Vector3(0f, 1, 0f); q2key.RemoveAllWalls(gridHeight, gridWidth); GameObject key3 = Instantiate(keys[2], q3key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform); key3.transform.localScale = key3.transform.localScale / 2; key3.transform.localPosition = q3key.Position + new Vector3(0f, 1, 0f); q3key.RemoveAllWalls(gridHeight, gridWidth); GameObject key4 = Instantiate(keys[3], q4key.Position + new Vector3(0f, gridSize, 0f), Quaternion.identity, grid.transform); key4.transform.localScale = key4.transform.localScale / 2; key4.transform.localPosition = q4key.Position + new Vector3(0f, 1, 0f); q4key.RemoveAllWalls(gridHeight, gridWidth); GridSquare vs = Instantiate(victorySquarePrefab, grid.transform); vs.Position = victorySquare.Position; vs.transform.localPosition = victorySquare.Position; for (int i = 0; i < 4; i++) { if (!victorySquare.walls[i].activeSelf) { vs.walls[i].SetActive(false); } } victorySquare.gameObject.SetActive(false); // sq.RemoveFriction(); }