示例#1
0
    // 更新触发状态(继承自sdBehaviourState)aa
    public override void UpdateState()
    {
        if (mIsInState != true)
        {
            return;
        }

        if (mCurrentCount == 0)
        {
            return;
        }

        mCurrentDelayTime -= Time.deltaTime;
        if (mCurrentDelayTime <= 0.0f)
        {
            // 当前技能不存在则随机一个技能aa
            if (mCurrentSkillID == -1)
            {
                mCurrentSkillID = RandomSkill();
            }

            // 检查技能范围,尝试释放技能aa
            bool bCastSkill = false;
            if (mCurrentSkillID > 0)
            {
                MonsterAutoFight kMonsterAutoFight = mBehaviourAdvancedState.MonsterAutoFightComponent;
                sdGameMonster    kMonster          = kMonsterAutoFight.Monster;

                if (mDetectDistance)
                {
                    sdSkill kSkill = kMonster.skillTree.getSkill(mCurrentSkillID);
                    if (kSkill != null)
                    {
                        sdBaseState kState    = kSkill.actionStateList[0];
                        float       fDistance = (int)kState.stateData["CastDistance"] * 0.001f;
                        HeaderProto.ESkillObjType eTergetType = (HeaderProto.ESkillObjType)kState.stateData["byTargetType"];

                        float fCurrentDistance = 0.0f;
                        sdBehaviourStateBlock kBehaviourStateBlock = mBehaviourAdvancedState.BehaviourStateBlock;
                        if (eTergetType == HeaderProto.ESkillObjType.SKILL_OBJ_ENEMY)
                        {
                            fCurrentDistance = kBehaviourStateBlock.UpdateDistanceOfNearestEnemy(mBehaviourAdvancedState);
                        }
                        else
                        {
                            fCurrentDistance = kBehaviourStateBlock.UpdateDistanceOfNearestFriend(mBehaviourAdvancedState);
                        }

                        if (fCurrentDistance < fDistance)
                        {
                            kMonster.CastSkill(mCurrentSkillID);
                            bCastSkill = true;
                        }
                    }
                }
                else
                {
                    kMonster.CastSkill(mCurrentSkillID);
                    bCastSkill = true;
                }
            }

            // 释放技能成功则延迟一个mIntervalTime,否则仅仅延迟2s检查一次直到释放成功aa
            if (bCastSkill)
            {
                mCurrentSkillID   = -1;
                mCurrentDelayTime = mIntervalTime;

                --mCurrentCount;
            }
            else
            {
                mCurrentDelayTime = 2.0f;
            }
        }
    }