public void GeneratePassage(NODE lNode, NODE rNODE, MAP.DIVIDE divideDir)
    {
        MAP.DIRECTION lDir = MAP.DIRECTION.NONE;
        MAP.DIRECTION rDir = MAP.DIRECTION.NONE;

        switch (divideDir)
        {
        case MAP.DIVIDE.VERTICAL:
            lDir = MAP.DIRECTION.LEFT;
            rDir = MAP.DIRECTION.RIGHT;
            break;

        case MAP.DIVIDE.HORIZONTAL:
            lDir = MAP.DIRECTION.DOWN;
            rDir = MAP.DIRECTION.UP;
            break;
        }

        if (lDir != MAP.DIRECTION.NONE)
        {
            //Debug.Log(lDir + " , " + rDir);
            ConnectRoom(lNode.roomInfo, rNODE.roomInfo, lDir, rDir);
        }
    }
    private bool DivideBlock(NODE curNode)
    {
        //Set Basic Info
        curNode.left         = new NODE();
        curNode.left.parents = curNode;
        curNode.left.index   = curNode.index * 2;
        curNode.left.level   = curNode.level + 1;
        curNode.left.blockInfo.leftTop.SetVector2D(curNode.blockInfo.leftTop);

        curNode.right         = new NODE();
        curNode.right.parents = curNode;
        curNode.right.index   = (curNode.index * 2) + 1;
        curNode.right.level   = curNode.level + 1;
        curNode.right.blockInfo.rightBot.SetVector2D(curNode.blockInfo.rightBot);

        //Divide Random Coodinate
        int sizeX = curNode.blockInfo.rightBot.x - curNode.blockInfo.leftTop.x;
        int sizeY = curNode.blockInfo.rightBot.y - curNode.blockInfo.leftTop.y;

        //Set Random Divide Direction
        MAP.DIVIDE dir = MAP.DIVIDE.NONE;

        int tryNum = 0;

        while (tryNum < 10000)
        {
            dir = (MAP.DIVIDE)Random.Range(0, 2);
            if (sizeX * 0.6f > sizeY)
            {
                dir = MAP.DIVIDE.VERTICAL;
            }
            if (sizeY * 0.6f > sizeX)
            {
                dir = MAP.DIVIDE.HORIZONTAL;
            }

            tryNum += 1;
            switch (dir)
            {
            case MAP.DIVIDE.VERTICAL:
                int randX = (int)Random.Range(sizeX * 0.4f, sizeX * 0.6f);
                // +2 => Passage Size
                // +3 => Passage Size + Block Line
                if (randX < MAP.CONTANT.RoomX_Min + MAP.CONTANT.Block_Blank || sizeX - randX < MAP.CONTANT.RoomX_Min + MAP.CONTANT.Block_Blank + 1)
                {
                    continue;
                }

                curNode.left.blockInfo.rightBot.SetVector2D(curNode.blockInfo.leftTop.x + randX, curNode.blockInfo.rightBot.y);
                curNode.right.blockInfo.leftTop.SetVector2D(curNode.blockInfo.leftTop.x + randX + 2, curNode.blockInfo.leftTop.y);
                tryNum = 0;
                break;

            case MAP.DIVIDE.HORIZONTAL:
                int randY = (int)Random.Range(sizeY * 0.4f, sizeY * 0.6f);
                if (randY < MAP.CONTANT.RoomY_Min + 2 || sizeY - randY < MAP.CONTANT.RoomY_Min + 3)
                {
                    continue;
                }

                curNode.left.blockInfo.rightBot.SetVector2D(curNode.blockInfo.rightBot.x, curNode.blockInfo.leftTop.y + randY);
                curNode.right.blockInfo.leftTop.SetVector2D(curNode.blockInfo.leftTop.x, curNode.blockInfo.leftTop.y + randY + 2);
                tryNum = 0;
                break;
            }
            break;
        }
        if (dir == MAP.DIVIDE.NONE)
        {
            return(false);
        }

        curNode.left.blockInfo.divideDir  = dir;
        curNode.right.blockInfo.divideDir = dir;
        curNode.left.blockInfo.SetBlockSize();
        curNode.right.blockInfo.SetBlockSize();

        return(true);
    }