Exemplo n.º 1
0
    /// <summary>
    /// Creates doors for the first room
    /// </summary>
    private void CreateRoomDoors(RoomDoor createdFromDoor, BaseRoom room)
    {
        if (room == null)
        {
            return;
        }

        // Ignore restrictions for the first room
        bool ignoreRestrictions = createdFromDoor == null;

        List <Vector2> possibleDirections = new List <Vector2>
        {
            Vector2.left,
            Vector2.right,
            Vector2.up,
            Vector2.down
        };

        List <Vector2> directions = new List <Vector2>();

        if (!ignoreRestrictions)
        {
            // Find furthest tiles in all directions except current door direction
            Vector2 excludedDirection = room.GetDoorExit(createdFromDoor) - room.GetDoorEntrance(createdFromDoor);

            possibleDirections.Remove(excludedDirection);

            for (int i = 0; i < Instance?.doorAmountPerRoom; ++i)
            {
                int randomNumber = UnityEngine.Random.Range(0, possibleDirections.Count);

                directions.Add(possibleDirections[randomNumber]);
                possibleDirections.RemoveAt(randomNumber);
            }
        }
        else
        {
            directions = possibleDirections;
        }

        for (int i = 0; i < directions.Count; ++i)
        {
            Vector2 direction = directions[i];

            Vector2 doorLocation = room.FindFurthestTileInDirection(direction);

            // Skip if no eligible location was found
            if (doorLocation == Vector2.zero)
            {
                continue;
            }

            Vector2 setLocation = doorLocation + (direction * 0.5f);

            if (roomLocations.ContainsKey(doorLocation + direction))
            {
                // Disabled creating new doors to old rooms for now
                continue;

                //BaseRoom room = RoomGenerator.roomLocations[doorLocation + direction];
                //if (room.roomWalls.ContainsKey(setLocation))
                //{
                //    GameObject destroyWall = room.roomWalls[setLocation];
                //    room.roomWalls.Remove(setLocation);
                //    Destroy(destroyWall);
                //}
            }

            RoomDoor newDoor = Instantiate(Instance?.roomDoorPrefab, room.transform);
            newDoor.transform.position  = setLocation;
            newDoor.transform.position += new Vector3(0, 0, -5);
            newDoor.transform.rotation  = Quaternion.Euler(0, 0, (direction.y != 0 ? 90 : 0));
            newDoor.connectedRooms.Add(doorLocation, room);
            newDoor.connectedRooms.Add(doorLocation + direction, null);
            room.roomDoors.Add(setLocation, newDoor);
        }
    }