private void OnArrive(AI_BullFight_Positioning state)
 {
     if (m_inPositioning && mainRoleAIState.arrived && npcAIState.arrived)
     {
         EndSwitchPositioning();
     }
 }
    protected override void _OnLoadingCompleteImp()
    {
        base._OnLoadingCompleteImp();
        mCurScene.CreateBall();
        mCurScene.mBall.onShootGoal += OnGoal;
        mCurScene.mBall.onGrab      += OnGrab;
        mCurScene.mBall.onDunk      += OnDunk;
        mCurScene.mBall.onHitGround += OnHitGround;

        if (m_config == null)
        {
            Debug.LogError("Match config file loading failed.");
            return;
        }

        //TODO 针对PVP修改
        //main role
        PlayerManager pm = GameSystem.Instance.mClient.mPlayerManager;

        mainRole = pm.GetPlayerById(uint.Parse(m_config.MainRole.id));
        //mainRole.m_inputDispatcher = new InputDispatcher(this, mainRole);
        mainRole.m_catchHelper = new CatchHelper(mainRole);
        mainRole.m_catchHelper.ExtractBallLocomotion();
        mainRole.m_StateMachine.SetState(PlayerState.State.eStand, true);
        mainRole.m_InfoVisualizer.ShowStaminaBar(true);
        mainRole.m_team.m_role = GameMatch.MatchRole.eOffense;
        mainRoleNormalAISystem = new AISystem_Basic(this, mainRole);
        //mainRole.m_aiMgr = mainRoleNormalAISystem;
        mainRole.m_aiMgr.m_enable   = false;
        mainRolePositioningAISystem = new AISystem_BullFight(this, mainRole);
        mainRoleAIState             = mainRolePositioningAISystem.GetState(AIState.Type.eBullFight_Positioning) as AI_BullFight_Positioning;
        mainRoleAIState.onArrive   += OnArrive;

        //npc
        Team oppoTeam = mainRole.m_team.m_side == Team.Side.eAway ? m_homeTeam : m_awayTeam;

        npc = oppoTeam.GetMember(0);
        if (npc.model != null)
        {
            npc.model.EnableGrey();
        }

        npcNormalAISystem = new AISystem_Basic(this, npc, AIState.Type.eInit, m_config.NPCs[0].AIID);
        npcNormalAISystem.ReplaceState(new AI_Positioning_Shoot_on_Hold(npcNormalAISystem));
        npcPositioningAISystem = new AISystem_BullFight(this, npc);
        npcAIState             = npcPositioningAISystem.GetState(AIState.Type.eBullFight_Positioning) as AI_BullFight_Positioning;
        npcAIState.onArrive   += OnArrive;
        //npc.m_aiMgr = npcNormalAISystem;
        npc.m_aiMgr.m_enable = false;
        npc.m_team.m_role    = GameMatch.MatchRole.eDefense;

        AssumeDefenseTarget();
        _UpdateCamera(mainRole);
        //_CreateGUI();

        m_stateMachine.m_matchStateListeners.Add(this);
    }