Beispiel #1
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="direction"></param>
    /// <returns></returns>
    public BaseConnector GetConnector(RoomConnection.DirectionType direction)
    {
        RoomConnection connection;

        if (!m_connections.TryGetValue(direction, out connection))
        {
            Debug.LogError($"Failed to find a room connection for the direction '{direction}' within the room '{name}'.");
            return(null);
        }

        return(connection.transform.GetChild(0).GetComponent <BaseConnector>());
    }
Beispiel #2
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="room"></param>
    /// <param name="direction"></param>
    /// <returns></returns>
    private BaseRoom GetAdjacentRoom(BaseRoom room, RoomConnection.DirectionType direction)
    {
        for (var x = 0; x < GridSize; ++x)
        {
            for (var y = 0; y < GridSize; ++y)
            {
                if (GetRoom(x, y) == room)
                {
                    return(GetAdjacentRoom(x, y, direction));
                }
            }
        }

        return(null);
    }
Beispiel #3
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="room"></param>
    /// <param name="direction"></param>
    public void OpenDoor(BaseRoom room, RoomConnection.DirectionType direction)
    {
        var door = room.GetConnector(direction) as DoorConnector;

        if (door == null)
        {
            return;
        }
        door.OpenDoor(true, m_playerController);

        var adjecentRoom = GetAdjacentRoom(room, direction);
        var adjacnetDoor = adjecentRoom?.GetConnector(direction.GetOpposite()) as DoorConnector;

        adjacnetDoor?.OpenDoor(true, m_playerController);
    }
Beispiel #4
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="room"></param>
    /// <param name="direction"></param>
    public void UnlockDoor(BaseRoom room, RoomConnection.DirectionType direction)
    {
        var door = room.GetConnector(direction) as DoorConnector;

        if (door == null)
        {
            return;
        }
        door.UnlockDoor(true);

        var adjecentRoom = GetAdjacentRoom(room, direction);
        var adjacnetDoor = adjecentRoom?.GetConnector(direction.GetOpposite()) as DoorConnector;

        adjacnetDoor?.UnlockDoor(true);
    }
    public static RoomConnection.DirectionType GetOpposite(this RoomConnection.DirectionType direction)
    {
        switch (direction)
        {
        case RoomConnection.DirectionType.North:
            return(RoomConnection.DirectionType.South);

        case RoomConnection.DirectionType.East:
            return(RoomConnection.DirectionType.West);

        case RoomConnection.DirectionType.South:
            return(RoomConnection.DirectionType.North);

        case RoomConnection.DirectionType.West:
            return(RoomConnection.DirectionType.East);

        default:
            throw new ArgumentOutOfRangeException(nameof(direction), direction, null);
        }
    }
Beispiel #6
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="row"></param>
    /// <param name="column"></param>
    /// <param name="direction"></param>
    /// <returns></returns>
    private BaseRoom GetAdjacentRoom(int row, int column, RoomConnection.DirectionType direction)
    {
        switch (direction)
        {
        case RoomConnection.DirectionType.North:
            return(GetRoom(row + 1, column));

        case RoomConnection.DirectionType.East:
            return(GetRoom(row, column + 1));

        case RoomConnection.DirectionType.South:
            return(GetRoom(row - 1, column));

        case RoomConnection.DirectionType.West:
            return(GetRoom(row, column - 1));

        default:
            Debug.LogError($"Failed to located adjacent room for the direction '{direction}'.");
            return(null);
        }
    }
Beispiel #7
0
    /// <summary>
    ///
    /// </summary>
    /// <param name="direction"></param>
    /// <param name="connector"></param>
    public void SetConnection(RoomConnection.DirectionType direction, BaseConnector connector)
    {
        RoomConnection connection;

        if (!m_connections.TryGetValue(direction, out connection))
        {
            Debug.LogError($"Failed to find a room connection for the direction '{direction}' within the room '{name}'.");
            return;
        }

        if (connection.transform.childCount > 0)
        {
            Debug.LogError($"The connection for direction '{direction}' within the room '{name}' already has a connector.");
            return;
        }

        var newConnection = Instantiate(connector.gameObject, connection.transform);

        newConnection.transform.localPosition = Vector3.zero;
        newConnection.transform.localRotation = Quaternion.identity;
        newConnection.transform.localScale    = Vector3.one;
        newConnection.name = $"{name} - {connector.name} [{direction}]";
    }
Beispiel #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="direction"></param>
 /// <returns></returns>
 public bool HasConnection(RoomConnection.DirectionType direction)
 {
     return(m_connections.ContainsKey(direction));
 }