/// <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>()); }
/// <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); }
/// <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); }
/// <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); } }
/// <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); } }
/// <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}]"; }
/// <summary> /// /// </summary> /// <param name="direction"></param> /// <returns></returns> public bool HasConnection(RoomConnection.DirectionType direction) { return(m_connections.ContainsKey(direction)); }