void ConnectRoom(MAP.ROOM lRoom, MAP.ROOM rRoom, MAP.DIRECTION lDir, MAP.DIRECTION rDir) { bool createLDoor = lRoom.CreateDoor(lDir); bool createRDoor = rRoom.CreateDoor(rDir); MAP.Vector2D lDoor = lRoom.GetDoorPosition(lDir); MAP.Vector2D rDoor = rRoom.GetDoorPosition(rDir); Map[lDoor.y][lDoor.x] = MAP.SPACE.ROOM_DOOR; Map[rDoor.y][rDoor.x] = MAP.SPACE.ROOM_DOOR; //직선인 경우 if (lDoor.y == rDoor.y) { int x = 1; do { Map[lDoor.y - 1][lDoor.x + x] = Map[lDoor.y - 1][lDoor.x + x] | MAP.SPACE.PASSAGE_WALL; Map[lDoor.y][lDoor.x + x] = Map[lDoor.y][lDoor.x + x] | MAP.SPACE.PASSAGE_FLOOR; Map[lDoor.y + 1][lDoor.x + x] = Map[lDoor.y + 1][lDoor.x + x] | MAP.SPACE.PASSAGE_WALL; ++x; } while (lDoor.x + x != rDoor.x); } else if (lDoor.x == rDoor.x) { int y = 1; do { Map[lDoor.y + y][lDoor.x - 1] = Map[lDoor.y + y][lDoor.x - 1] | MAP.SPACE.PASSAGE_WALL; Map[lDoor.y + y][lDoor.x] = Map[lDoor.y + y][lDoor.x] | MAP.SPACE.PASSAGE_FLOOR; Map[lDoor.y + y][lDoor.x + 1] = Map[lDoor.y + y][lDoor.x + 1] | MAP.SPACE.PASSAGE_WALL; ++y; } while (lDoor.y + y != rDoor.y); } //직선이 아닌 경우 else { int pos = 0; if (createLDoor) { pos = CreatePassage(lDoor, lDir); } if (createRDoor) { pos = CreatePassage(rDoor, rDir); } ConnectPassage(pos, lDoor, rDoor, lDir); } }
public bool GenerateRoom() { if (blockInfo.size.x < MAP.CONTANT.RoomX_Min + MAP.CONTANT.Block_Blank || blockInfo.size.y < MAP.CONTANT.RoomY_Min + MAP.CONTANT.Block_Blank) { return(false); } roomInfo = new MAP.ROOM(); int MaxX = blockInfo.size.x > (MAP.CONTANT.RoomX_Max + MAP.CONTANT.Block_Blank) ? MAP.CONTANT.RoomX_Max : (blockInfo.size.x - MAP.CONTANT.Block_Blank); int MaxY = blockInfo.size.y > (MAP.CONTANT.RoomY_Max + MAP.CONTANT.Block_Blank) ? MAP.CONTANT.RoomY_Max : (blockInfo.size.y - MAP.CONTANT.Block_Blank); MAP.Vector2D roomSize = new MAP.Vector2D(Random.Range(MAP.CONTANT.RoomX_Min, MaxX + 1), Random.Range(MAP.CONTANT.RoomY_Min, MaxY + 1)); //blank minimum is 2 MAP.Vector2D blank = new MAP.Vector2D(blockInfo.size - roomSize - 1); roomInfo.leftTop.SetVector2D(blockInfo.leftTop.x + Random.Range(1, blank.x + 1), blockInfo.leftTop.y + Random.Range(1, blank.y + 1)); roomInfo.rightBot.SetVector2D(roomInfo.leftTop + roomSize - 1); Debug.Log(index + " / " + blockInfo.leftTop.x + " , " + blockInfo.leftTop.y + " / " + roomSize.x + " / " + roomSize.y); //Debug.Log(blockInfo.leftTop.x + " , " + blockInfo.leftTop.y + " / " + blockInfo.rightBot.x + " , " + blockInfo.rightBot.y + " / " + blockInfo.size.x + " , " + blockInfo.size.y); return(true); }