private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.layer != LayerMask.NameToLayer("Player"))
        {
            return;
        }

        GameObject[,] minimapRealization = DungeonMinimapBuilder.GetMapRealization();
        int x = (int)roomBuilder.Position.x, y = (int)roomBuilder.Position.y;

        DungeonMinimapRoomBuilder minimapRoomBuilder =
            minimapRealization[x, y].gameObject.GetComponent <DungeonMinimapRoomBuilder>();

        minimapRoomBuilder.IsVisited          = true;
        minimapRoomBuilder.IsCurrentlyVisited = true;

        for (int i = 0, neighbours = 4; i < neighbours; i++)
        {
            if (minimapRoomBuilder.Neighbours[i] == null)
            {
                continue;
            }

            DungeonMinimapRoomBuilder neighbourMinimapRoomBuilder =
                minimapRoomBuilder.Neighbours[i].GetComponent <DungeonMinimapRoomBuilder>();
            neighbourMinimapRoomBuilder.IsCurrentlyVisited = false;
        }

        DungeonMinimapBuilder.Camera.transform.position =
            minimapRealization[x, y].gameObject.transform.position + new Vector3(0, 0, -10);

        OnUpdateMinimap.Raise();
    }
    private const int _ROOM_MINIMAP_WIDTH_ = 1; // == _ROOM_MINIMAP_HEIGHT_
    // private const int _ROOM_MINIMAP_HEIGHT_ = 1;

    // Start is called before the first frame update
    void Start()
    {
        mapBuilder = dungeonManager.GetComponent <DungeonMapRandomBuilder>();

        mapMatrix    = mapBuilder.RandomMap;
        rootPosition = mapBuilder.RootPosition;
        bossPosition = mapBuilder.BossPosition;

        minimapCamera = GameObject.Find("Minimap Camera");

        minimapRealization =
            new GameObject[mapMatrix.GetLength(0), mapMatrix.GetLength(1)];

        instantiateMinimapWithBFS();

        for (int i = 0; i < minimapRealization.GetLength(0); i++)
        {
            for (int j = 0; j < minimapRealization.GetLength(1); j++)
            {
                if (minimapRealization[i, j] == null)
                {
                    continue;
                }

                DungeonMinimapRoomBuilder minimapRoomBuilder =
                    minimapRealization[i, j].GetComponent <DungeonMinimapRoomBuilder>();
                minimapRoomBuilder.UpdateNeighbours();
            }
        }

        for (int i = 0; i < minimapRealization.GetLength(0); i++)
        {
            for (int j = 0; j < minimapRealization.GetLength(1); j++)
            {
                if (minimapRealization[i, j] == null)
                {
                    continue;
                }

                DungeonMinimapRoomBuilder minimapRoomBuilder =
                    minimapRealization[i, j].GetComponent <DungeonMinimapRoomBuilder>();
                minimapRoomBuilder.UpdateMinimapRoomAppearance();
            }
        }
    }
    private void UpdateVisibility()
    {
        if (isVisited || isCurrentlyVisited)
        {
            // Self
            gameObject.SetActive(true);

            // Neighbours
            foreach (GameObject neighbour in neighbours)
            {
                neighbour?.gameObject.SetActive(true);
            }
        }
        else
        {
            // Self
            gameObject.SetActive(false);

            // Neighbours
            foreach (GameObject neighbour in neighbours)
            {
                if (neighbour != null)
                {
                    DungeonMinimapRoomBuilder minimapRoomBuilder =
                        neighbour.gameObject.GetComponent <DungeonMinimapRoomBuilder>();

                    if (minimapRoomBuilder.isVisited ||
                        minimapRoomBuilder.isCurrentlyVisited)
                    {
                        gameObject.SetActive(true);
                        break;
                    }
                }
            }
        }
    }