public void generateHallway( Room leftRoom, Room rightRoom ) { if( leftRoom == null || rightRoom == null ){ return ; } Vector3 direction = rightRoom.getOrigin() - leftRoom.getOrigin(); //Debug.Log(" rightRoom.getOrigin() "+rightRoom.getOrigin()); //Debug.Log(" leftRoom.getOrigin() "+leftRoom.getOrigin()); Vector2 lPoint = Vector2.zero, rPoint = Vector2.zero; if( direction.x > 0 ){ if( direction.y > 0 ){ //check if face to face if( leftRoom.getHeight() > direction.y ){ //Debug.Log("L------R/ R above L / face/face"); rPoint = rightRoom.getLeftBottom(); lPoint = leftRoom.getRightTop(); float newY = Random.Range( (int)rPoint.y ,(int)lPoint.y ); if( newY > rightRoom.getLeftTop().y ){ newY = Random.Range( (int)rightRoom.getLeftBottom().y ,(int)rightRoom.getLeftTop().y+1 ); } for( int w = 0; w < rPoint.x - lPoint.x + 1; w++ ){ float _x = lPoint.x + w; if( boardManager.getGrid().getTileType( (int)_x,(int) newY) != (int)TileGrid.tileType.Wall ){ boardManager.getGrid().setTileType( (int)_x, (int)newY, TileGrid.tileType.Hallway); } } }else{ //Debug.Log("L------R/ R above L / not face"); // |---[R] // [R] | // | | //[L]____|(1) or [L](2) //lets use 2 for a fast prototype lPoint = leftRoom.getLeftTop(); rPoint = rightRoom.getLeftBottom(); Vector2 midPoint = new Vector2(Random.Range((int)lPoint.x, (int)lPoint.x + 4), Random.Range((int)rPoint.y, (int)rPoint.y + rightRoom.getHeight())); for( int h = 0; h <= midPoint.y - lPoint.y; h++ ){ float _y = lPoint.y + h; //if( boardManager.getBoard().getTile( (int)midPoint.x, (int)_y ) != 2 ){ if( boardManager.getGrid().getTileType( (int)midPoint.x, (int)_y) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)midPoint.x, (int)_y , TileGrid.tileType.Hallway); } } for( int w = 0; w < rPoint.x - midPoint.x; w++ ){ float _x = midPoint.x + w; if( boardManager.getGrid().getTileType( (int)_x, (int)midPoint.y) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)_x, (int)midPoint.y, TileGrid.tileType.Hallway); } } } }else if( direction.y < 0 ){ //check face to face if( rightRoom.getHeight() > direction.y*(-1.0) ){ //Debug.Log("L------R/ R below L / face/face"); rPoint = rightRoom.getLeftTop(); lPoint = leftRoom.getRightBottom(); float newY = Random.Range( (int)lPoint.y ,(int)rPoint.y ); if( newY > leftRoom.getLeftTop().y ){ newY = Random.Range( (int)lPoint.y ,(int)leftRoom.getLeftTop().y+1 ); } for( int w = 0; w < rPoint.x - lPoint.x+1; w++ ){ float _x = lPoint.x + w; if( boardManager.getGrid().getTileType( (int)_x, (int)newY) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)_x, (int)newY, TileGrid.tileType.Hallway); } } }else{ //Debug.Log("L------R/ R below L / not face"); //[L]----| [L] // | | // [R](1) or |----[R] (2) //lets use 2 for a fast prototype lPoint = leftRoom.getLeftBottom(); rPoint = rightRoom.getLeftBottom(); Vector2 midPoint = new Vector2( Random.Range((int)lPoint.x, (int)lPoint.x + leftRoom.getwidth()), Random.Range((int)rPoint.y, (int)rPoint.y + rightRoom.getHeight()) ); for( int h = 0; h <= lPoint.y - midPoint.y; h++ ){ float _y = lPoint.y - h; if( boardManager.getGrid().getTileType( (int)midPoint.x, (int)_y) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)midPoint.x, (int)_y, TileGrid.tileType.Hallway); } } for( int w = 0; w < rPoint.x - midPoint.x; w++ ){ float _x = midPoint.x + w; if( boardManager.getGrid().getTileType( (int)_x, (int)midPoint.y) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)_x, (int)midPoint.y, TileGrid.tileType.Hallway); } } } }else{ //Debug.Log("L_____R"); rPoint = rightRoom.getLeftBottom(); lPoint = leftRoom.getRightBottom(); int newY = Random.Range( (int)rPoint.y , (int)rPoint.y + 3 ); for( int w = 0; w < rPoint.x - lPoint.x; w++ ){ float _x = lPoint.x + w; if( boardManager.getGrid().getTileType( (int)_x, (int)newY) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)_x, (int)newY, TileGrid.tileType.Hallway); } } } }else if( direction.x < 0 ){ generateHallway(rightRoom,leftRoom); }else{ if( direction.y > 0 ){ //Debug.Log("above/below/ R above L"); rPoint = rightRoom.getLeftBottom(); lPoint = leftRoom.getLeftTop(); int newX = (rightRoom.getwidth() >= leftRoom.getwidth()) ? Random.Range( (int)leftRoom.getLeftTop().x, (int)leftRoom.getRightTop().x + 1 ) : Random.Range( (int)rightRoom.getLeftBottom().x, (int)leftRoom.getRightBottom().x + 1 ); for( int h = 0; h < rPoint.y - lPoint.y; h++ ){ float _y = lPoint.y + h; if( boardManager.getGrid().getTileType( (int)newX, (int)_y) != (int)TileGrid.tileType.Hallway){ boardManager.getGrid().setTileType( (int)newX, (int)_y, TileGrid.tileType.Hallway); } } }else if( direction.y < 0 ){ //Debug.Log("above/below/ R below L"); rPoint = rightRoom.getLeftTop(); lPoint = leftRoom.getLeftBottom(); int newX = (rightRoom.getwidth() >= leftRoom.getwidth()) ? Random.Range( (int)leftRoom.getLeftBottom().x, (int)leftRoom.getRightBottom().x ) : Random.Range( (int)rightRoom.getLeftTop().x, (int)rightRoom.getRightTop().x ); for( int h = 0; h < lPoint.y - rPoint.y; h++ ){ float _y = rPoint.y + h; if( boardManager.getGrid().getTileType( (int)newX, (int)_y) != (int)TileGrid.tileType.Wall){ boardManager.getGrid().setTileType( (int)newX, (int)_y, TileGrid.tileType.Hallway); } } } } }