public void Initialize( PlayerIngame pPlayer)
    {
        mPlayer = pPlayer;
        mGuardTrans = player.ballGuard.transform;
        mWordCam = Camera.mainCamera;
        base.Start();
        mY = mGuardTrans.position.y;
        mGuardRigid = mGuardTrans.rigidbody;
        mTableLayer = 1 << (LayerMask.NameToLayer("Table") );

        if( GameplayScene.bottomPlayer == mPlayer)
            mIsBottomPlayer = true;
        else
            mIsBottomPlayer = false;

        //init camera location and alignment
        mWordCam.transform.position = mGuardTrans.position + (mGuardTrans.forward * -4 ) + new Vector3(0, 5,0);
        mWordCam.transform.LookAt( GameplayScene.table.ball.transform);
    }
    //callback when this was initialize
    protected override void Awake()
    {
        mCurrent = this;

        base.Awake ();

        if( mCurrentPlayer == null)
            mCurrentPlayer = mOwnerPlayer;

        if( mOwnerInfo == null )
        {
            mOwnerInfo = GameHelpers.GetLocalPlayerInfo();
            mOpponentInfo = mOwnerInfo;
        }

        mGameinfo = new GameInfo( mOwnerInfo, mOpponentInfo, 0, 0);
        ownerPlayer.info = mOwnerInfo;
        opponentPlayer.info = mOpponentInfo;

        mPlayerController = (PlayerController)FindObjectOfType( typeof(PlayerController));
    }
    //callback when a player goal
    //@param: the player who goaled
    public virtual void OnPlayerGoalStart( PlayerIngame pGoalee)
    {
        //update current game score
        if( pGoalee == mOwnerPlayer )
            mGameinfo.ownerScore ++;
        else
            mGameinfo.opponentScore++;

        Debug.Log( "Player GOAL: " + pGoalee.name);
        mOwnerPlayer.OnPlayerGoalStart( pGoalee);
        mOpponentPlayer.OnPlayerGoalStart( pGoalee);
        mTable.OnPlayerGoalStart( pGoalee);

        //end short after few seconds
        Invoke( "OnPlayerGoalEnd", 2);
    }
 //callback when game ended
 //@param: the player who winned
 public virtual void OnGameEnd( PlayerIngame pWinner)
 {
     mPlayerController.enabled = false;
     mOwnerPlayer.OnGameEnd( pWinner);
     mOpponentPlayer.OnGameEnd( pWinner);
     mTable.OnGameEnd( pWinner);
     pause = true;
     Debug.Log( "GameOver");
 }