예제 #1
0
    public override void Execute(Player player)
    {
        //player.PlayerAC.Stop();
        player.transform.LookAt(player.target.transform.position);


        if (GameObject.FindGameObjectWithTag(Tags.Camera).GetComponent <MyCamera>().getPlotSwitch())
        {
            player.GetFSM().ChangeState(player.States.WalkingState);
        }

        float TimeDelayed = 0.0f;

        if (player.target.GetComponent <Leader>().GetFSM().CurrentState() == player.target.GetComponent <Leader>().States.WaitingState)
        {
            if (player.target.GetComponent <Leader>().States.WaitingState.GetHasWaitedTime() < Const.LEADER_REACT_TIME)
            {
                TimeDelayed = player.target.GetComponent <Leader>().States.WaitingState.GetHasWaitedTime();
            }
            else
            {
                TimeDelayed = Const.LEADER_REACT_TIME;
            }
        }

        if (GUItest.playerWaveHands)
        {
            MessageDispatcher.Instance().DisparcherMessage(TimeDelayed, player.ID(), player.target.GetComponent <Leader>().ID(), MessageEnum.PlayerWaveHands);
            player.GetFSM().ChangeState(player.States.WaveHandState);
        }
        else if (GUItest.playerSalute)
        {
            MessageDispatcher.Instance().DisparcherMessage(TimeDelayed, player.ID(), player.target.GetComponent <Leader>().ID(), MessageEnum.PlayerSalute);
            player.GetFSM().ChangeState(player.States.SaluteState);
        }
        if (Vector3.Distance(player.gameObject.transform.position, player.target.transform.position) < Const.INTERACTIVE_DISTANCE)
        {
            TipAnimation.SetPlayerCanShakeHands(true);

            if (GUItest.playerShakeHands)
            {
                //给主席发消息
                MessageDispatcher.Instance().DisparcherMessage(0.5f, player.ID(), player.target.GetComponent <Leader>().ID(), MessageEnum.PlayerShakeHands);
                player.GetFSM().ChangeState(player.States.ShakeHandsState);
            }
        }
        else
        {
            TipAnimation.SetPlayerCanShakeHands(false);
        }
    }
 public override void Execute(Player player)
 {
     if (ClapHandsSwitch)
     {
         TipAnimation.SetPlayerCanClapHands(true);
         if (GUItest.playerClapHands)
         {
             player.GetFSM().ChangeState(player.States.HandClapingState);
         }
     }
     else if (player.GetWaittime() < Const.PLAYER_CLAPHANDS_WAIT_TIME)
     {
         TipAnimation.SetPlayerCanClapHands(false);
     }
     else
     {
         player.GetFSM().ChangeState(player.States.IdleState);
     }
 }
예제 #3
0
    //触发器的消息一律委托给游戏控制器来发送。不再为触发器再单独建立Entity
    void OnTriggerEnter(Collider collider)
    {
        GameController gameController = GameObject.FindGameObjectWithTag(Tags.GameController).GetComponent <GameController>();

        //如果检测到主席进入了触发区域,就让游戏控制器主席发送消息。
        if (collider.gameObject.tag == Tags.Leader)
        {
            Leader leader = collider.gameObject.GetComponent <Leader>();
            //先让主席停下来
            MessageDispatcher.Instance().DisparcherMessage(0.0f, gameController.ID(), leader.ID(), MessageEnum.StopWalking);

            TipAnimation.SetShowFrontSchoolCaption(true);
            //然后再让主席发表演讲
            leader.States.SpeechState.setSpeechContent(AudioClipHash.Leader_SpecialScene02);

            //可调参数:延时发送消息的时间!
            MessageDispatcher.Instance().DisparcherMessage(15.0f, gameController.ID(), leader.ID(), MessageEnum.StartSpeech);
            BGM.Instance().FadeOutBGM();
        }
    }
예제 #4
0
 public override void Exit(Player player)
 {
     TipAnimation.SetPlayerCanShakeHands(false);
     player.CleanWaittime();
 }
 public override void Exit(Player player)
 {
     TipAnimation.SetPlayerCanClapHands(false);
     player.CleanWaittime();
     ClapHandsSwitch = false;
 }