private void SplitRoom() { List <BaseTile> sameNeighborList = new List <BaseTile>(); foreach (var neighbor in Parent.Neighbors) { if (neighbor.RoomScript != null && neighbor.RoomScript.IsRoom() && neighbor.RoomScript.GetType() == GetType()) { sameNeighborList.Add(neighbor); } } if (sameNeighborList.Count > 1 && sameNeighborList.Count < 5) { List <BaseTile> checkList = new List <BaseTile>(sameNeighborList); List <BaseTile> roomList = new List <BaseTile>(); while (checkList.Count > 1) { roomList.Add(checkList[0]); List <BaseTile> swapList = new List <BaseTile>(); for (int i = 1; i < checkList.Count; i++) { if (!Astar.CanFindOwnNeighbor(checkList[0], checkList[i], new List <BaseTile>() { Parent })) { swapList.Add(checkList[i]); } } checkList = swapList; } roomList.AddRange(checkList); if (roomList.Count > 1) { roomList.RemoveAt(0); unitController.SplitUnitGroups(Parent, roomList); } } }