Example #1
0
    private void PatchLeftovers()
    {
        for (int j = 0; j < gridWidthHeight; j++)
        {
            for (int i = 0; i < gridWidthHeight; i++)
            {
                if (RoomGrid[j, i] != null)
                {
                    continue;
                }

                Dictionary <string, Vector2Int> positionDict = new Dictionary <string, Vector2Int>();

                foreach (var direction in directionsDelta)
                {
                    var deltaVector = _controller.DirectionToDeltaGridVector(direction.name);
                    positionDict[direction.name] = new Vector2Int(i + deltaVector.x, j + deltaVector.y);
                }

                List <string> unconnectedNeighbors = FindUnconnectedNeighbors(new Vector2Int(i, j));

                if (unconnectedNeighbors.Count == 0)
                {
                    continue;
                }

                var availableRooms = FindGameObjectRoomsWithExits(unconnectedNeighbors);
                var pickedRoom     = availableRooms[Random.Range(0, availableRooms.Count)];

                Door oldConnectionDoor;
                Room connectRoom;

                try
                {
                    var connectedRoomLocation = positionDict[unconnectedNeighbors[0]];

                    connectRoom       = RoomGrid[connectedRoomLocation.y, connectedRoomLocation.x];
                    oldConnectionDoor = FindConnectionDoor(connectRoom.Doors,
                                                           _controller.GetOppositeDirection(unconnectedNeighbors[0]));
                }
                catch (Exception e)
                {
                    return;
                }

                //create clone room from template room
                var clonedRoom = Instantiate(pickedRoom, _gridGameObject.transform, true);
                clonedRoom.transform.Find("Flags").gameObject.tag = "Flag";
                //reverse original transition
                clonedRoom.transform.Translate(ReverseRoomMove);

                var newDoors       = DoorSearch(clonedRoom.transform.Find("Flags").GetComponent <Tilemap>());
                var oppositeSprite = _controller.FindSpriteWithString(unconnectedNeighbors[0]);

                Door newConnectionDoor = null;
                try
                {
                    newConnectionDoor = FindConnectionDoor(newDoors, _controller.FindSpriteWithString(unconnectedNeighbors[0]));
                }
                catch
                {
                    //Debug.LogWarning("Wanted connection for room not found!!!!");
                }

                var doorTilesNew = newConnectionDoor.Tiles[0];
                var doorTilesOld = oldConnectionDoor.Tiles[0];
                var deltaTiles   = doorTilesOld - doorTilesNew;

                Vector3 deltaTilesMid = new Vector3(
                    Mathf.Clamp(deltaTiles.x, -1, 1) * (-1) + deltaTiles.x,
                    Mathf.Clamp(deltaTiles.y, -1, 1) * (-1) + deltaTiles.y,
                    deltaTiles.z);


                clonedRoom.transform.Translate(new Vector3(modifier.x * deltaTilesMid.x + connectRoom.RealPosition.x,
                                                           modifier.y * deltaTilesMid.y + connectRoom.RealPosition.y,
                                                           modifier.z * deltaTilesMid.z + connectRoom.RealPosition.z), Space.World);

                bool bossRoom = false;
                if (madeBossRoom == false)
                {
                    //Is it a hallway?
                    if (!pickedRoom.name.EndsWith("_2") && !pickedRoom.name.EndsWith("_5") && !pickedRoom.name.EndsWith("_8"))
                    {
                        bossRoom = true;
                        Debug.Log("Made boss room");
                        madeBossRoom = true;
                    }
                }

                var newRoom = new Room(newDoors, clonedRoom, new Vector2Int(i, j), bossRoom);
                RoomGrid[newRoom.GridPosition.y, newRoom.GridPosition.x] = newRoom;
            }
        }
    }