Пример #1
0
        //TODO:检测一些事件 然后进行状态切换
        //获得对应注册哪些事件, 就检测哪些事件?
        //只有状态切换成功才回 CheckEvent 返回true
        protected bool CheckEvent()
        {
            if (CheckBaseEvent())
            {
                return(true);
            }
            var msg = GetEvent().NextMsg();

            lastMsg = msg;
            if (msg != null)
            {
                Log.AI("CheckEventIs " + msg.type);
                if (msg.type == MyAnimationEvent.MsgType.IDLE)
                {
                    return(aiCharacter.ChangeState(AIStateEnum.IDLE));
                }
                else if (msg.type == MyAnimationEvent.MsgType.DoSkill)
                {
                    var isBaseAttack = GetSkill().IsDefaultSkill(msg.skillData);
                    Log.AI("CheckCastSkill " + isBaseAttack);
                    if (isBaseAttack)
                    {
                        Log.AI("CheckAttack " + msg.type);
                        var skillPart = GetSkill();
                        skillPart.SetDefaultActive();
                        return(aiCharacter.ChangeState(AIStateEnum.COMBAT));
                    }
                    else
                    {
                        Log.AI("Enter CastSkill");
                        var skillPart = GetSkill();
                        skillPart.SetActiveSkill(msg.skillData);
                        //技能动作为空
                        if (string.IsNullOrEmpty(msg.skillData.AnimationName))
                        {
                            SkillLogic.UseSkill(GetAttr());
                            return(false);
                        }
                        else
                        {
                            return(aiCharacter.ChangeState(AIStateEnum.CAST_SKILL));
                        }
                    }
                }
                else if (msg.type == MyAnimationEvent.MsgType.STUNNED)
                {
                    return(aiCharacter.ChangeState(AIStateEnum.Stunned));
                }
                else if (msg.type == MyAnimationEvent.MsgType.EXIT_STUNNED)
                {
                    return(aiCharacter.ChangeState(AIStateEnum.IDLE));
                }
                else if (msg.type == MyAnimationEvent.MsgType.DEAD)
                {
                    return(aiCharacter.ChangeState(AIStateEnum.DEAD));
                }
                else if (msg.type == MyAnimationEvent.MsgType.JUMP)
                {
                    Log.AI("EnterJumpStateNow");
                    return(aiCharacter.ChangeState(AIStateEnum.JUMP));
                }
                else
                {
                    return(CheckEventOverride(msg));
                }
            }
            return(false);
            //return CheckAttackEvent ();
        }