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); }