Example #1
0
    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);
                    }
                }
            }
        }
    }