Esempio n. 1
0
    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);
            }
        }
    }