// 检查并设置触发状态aa
 protected void CheckAndSet(sdBehaviourStateBlock kBehaviourStateBlock, bool bTrigger)
 {
     if (kBehaviourStateBlock.Target == null)
     {
         if (mIsTriggered != true)
         {
             mIsTriggered = true;
             if (IsEnterTrigger && NotifyEnterTrigger != null && bTrigger)
             {
                 NotifyEnterTrigger(this);
             }
         }
     }
     else
     {
         if (mIsTriggered != false)
         {
             mIsTriggered = false;
             if (IsLeaveTrigger && NotifyLeaveTrigger != null && bTrigger)
             {
                 NotifyLeaveTrigger(this);
             }
         }
     }
 }
    // 触发事件(继承自BehaviourTrigger)aa
    public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
    {
        if (kBehaviourStateBlock.BehaviourStateEventType != EBehaviourStateEventType.enBSET_HP)
        {
            return;
        }

        int   iMaxHP               = kBehaviourStateBlock.MaxHP;
        int   iAccumHurtHP         = -kBehaviourStateBlock.AccumHurtHP;
        float fAccumHurtHPPerctage = (float)iAccumHurtHP / (float)iMaxHP;

        if (fAccumHurtHPPerctage >= mConditionPercent + mLastConditionPercent)
        {
            if (mIsTriggered != true)
            {
                mIsTriggered = true;
                if (IsEnterTrigger && NotifyEnterTrigger != null)
                {
                    NotifyEnterTrigger(this);
                }

                mLastConditionPercent = fAccumHurtHPPerctage;
            }

            if (mIsTriggered != false)
            {
                mIsTriggered = false;
                if (IsLeaveTrigger && NotifyLeaveTrigger != null)
                {
                    NotifyLeaveTrigger(this);
                }
            }
        }
    }
    // 触发事件(继承自BehaviourTrigger)aa
    public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
    {
        if (kBehaviourStateBlock.BehaviourStateEventType != EBehaviourStateEventType.enBSET_Killed)
        {
            return;
        }

        if (mIsTriggered != true)
        {
            mIsTriggered = true;
            if (IsEnterTrigger && NotifyEnterTrigger != null)
            {
                if (!BundleGlobal.IsMobile())
                {
                    //Debug.Log("sdKilledBehaviourTrigger::NotifyEnterTrigger");
                }
                NotifyEnterTrigger(this);
            }
        }

        if (mIsTriggered != false)
        {
            mIsTriggered = false;
            if (IsLeaveTrigger && NotifyLeaveTrigger != null)
            {
                if (!BundleGlobal.IsMobile())
                {
                    //Debug.Log("sdKilledBehaviourTrigger::NotifyLeaveTrigger");
                }
                NotifyLeaveTrigger(this);
            }
        }
    }
    // 检查并设置触发状态aa
    protected void CheckAndSet(sdBehaviourStateBlock kBehaviourStateBlock, bool bTrigger)
    {
        int   iMaxHP               = kBehaviourStateBlock.MaxHP;
        int   iLastHP              = kBehaviourStateBlock.PreviousHP;
        int   iCurrentHP           = iLastHP + kBehaviourStateBlock.ChangeHP;
        float fCurrentHPPercentage = (float)iCurrentHP / (float)iMaxHP;

        if (fCurrentHPPercentage >= mMinConditionPercent && fCurrentHPPercentage < mMaxConditionPercent)
        {
            if (mIsTriggered != true)
            {
                mIsTriggered = true;

                if (IsEnterTrigger && NotifyEnterTrigger != null && bTrigger)
                {
                    NotifyEnterTrigger(this);
                }
            }
        }
        else
        {
            if (mIsTriggered != false)
            {
                mIsTriggered = false;
                if (IsLeaveTrigger && NotifyLeaveTrigger != null && bTrigger)
                {
                    NotifyLeaveTrigger(this);
                }
            }
        }
    }
Exemple #5
0
 // 更新触发条件(发生触发事件时调用)aa
 public virtual void SyncUpdateBehaviourTrigger(sdBehaviourStateBlock kBehaviourStateBlock)
 {
     foreach (sdBehaviourTrigger kBehaviourTrigger in mBehaviourTriggerList)
     {
         kBehaviourTrigger.SyncUpdate(kBehaviourStateBlock);
     }
 }
    // 触发事件(继承自BehaviourTrigger)aa
    public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
    {
        if (kBehaviourStateBlock.BehaviourStateEventType != EBehaviourStateEventType.enBSET_Target)
        {
            return;
        }

        CheckAndSet(kBehaviourStateBlock, true);
    }
    // 触发事件(继承自BehaviourTrigger)aa
    public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
    {
        if (kBehaviourStateBlock.BehaviourStateEventType != EBehaviourStateEventType.enBSET_Summoned && kBehaviourStateBlock.BehaviourStateEventType != EBehaviourStateEventType.enBSET_Killed)
        {
            return;
        }

        CheckAndSet(kBehaviourStateBlock, true);
    }
Exemple #8
0
    // 更新触发条件(发生触发事件时调用)aa
    public override void SyncUpdateBehaviourTrigger(sdBehaviourStateBlock kBehaviourStateBlock)
    {
        foreach (sdBehaviourTrigger kBehaviourTrigger in mBehaviourTriggerList)
        {
            kBehaviourTrigger.SyncUpdate(kBehaviourStateBlock);
        }

        if (mIsTriggered)
        {
            foreach (sdBehaviourEvent kBehaviourEvent in mBehaviourEventList)
            {
                kBehaviourEvent.SyncUpdateBehaviourTrigger(mBehaviourAdvancedState.BehaviourStateBlock);
            }

            foreach (sdBehaviourEventNode kBehaviourEventNode in mChildBehaviourEventNodeList)
            {
                kBehaviourEventNode.SyncUpdateBehaviourTrigger(mBehaviourAdvancedState.BehaviourStateBlock);
            }
        }
    }
Exemple #9
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;
            }
        }
    }
Exemple #10
0
    // 触发事件(继承自BehaviourTrigger)aa
    public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
    {
        if (kBehaviourStateBlock.BehaviourStateEventType != EBehaviourStateEventType.enBSET_HP)
        {
            return;
        }

        int   iMaxHP               = kBehaviourStateBlock.MaxHP;
        int   iLastHP              = kBehaviourStateBlock.PreviousHP;
        int   iCurrentHP           = iLastHP + kBehaviourStateBlock.ChangeHP;
        float fLastHPPercentage    = (float)iLastHP / (float)iMaxHP;
        float fCurrentHPPercentage = (float)iCurrentHP / (float)iMaxHP;

        if (fCurrentHPPercentage < mConditionPercent)
        {
            if (fLastHPPercentage >= mConditionPercent)
            {
                if (mBHPBTCType == EHPBehaviourTriggerCompareType.enBHPBTCT_Less)
                {
                    if (mIsTriggered != true)
                    {
                        mIsTriggered = true;
                        if (IsEnterTrigger && NotifyEnterTrigger != null)
                        {
                            if (!BundleGlobal.IsMobile())
                            {
                                //Debug.Log("sdHPBehaviourTrigger::NotifyEnterTrigger");
                            }
                            NotifyEnterTrigger(this);
                        }
                    }

                    if (mIsTriggered != false)
                    {
                        mIsTriggered = false;
                        if (IsLeaveTrigger && NotifyLeaveTrigger != null)
                        {
                            if (!BundleGlobal.IsMobile())
                            {
                                //Debug.Log("sdHPBehaviourTrigger::NotifyLeaveTrigger");
                            }
                            NotifyLeaveTrigger(this);
                        }
                    }
                }
            }
        }
        else
        {
            if (fLastHPPercentage < mConditionPercent)
            {
                if (mBHPBTCType == EHPBehaviourTriggerCompareType.enBHPBTCT_EqualBigger)
                {
                    if (mIsTriggered != true)
                    {
                        mIsTriggered = true;
                        if (IsEnterTrigger && NotifyEnterTrigger != null)
                        {
                            if (!BundleGlobal.IsMobile())
                            {
                                //Debug.Log("sdHPBehaviourTrigger::NotifyEnterTrigger");
                            }
                            NotifyEnterTrigger(this);
                        }
                    }

                    if (mIsTriggered != false)
                    {
                        mIsTriggered = false;
                        if (IsLeaveTrigger && NotifyLeaveTrigger != null)
                        {
                            if (!BundleGlobal.IsMobile())
                            {
                                //Debug.Log("sdHPBehaviourTrigger::NotifyLeaveTrigger");
                            }
                            NotifyLeaveTrigger(this);
                        }
                    }
                }
            }
        }
    }
Exemple #11
0
 // 强制重新检查触发状态(继承自BehaviourTrigger)aa
 public override void ForceRecheck(sdBehaviourStateBlock kBehaviourStateBlock, bool bTrigger)
 {
     base.ForceRecheck(kBehaviourStateBlock, bTrigger);
 }
Exemple #12
0
 // 触发事件(继承自BehaviourTrigger)aa
 public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
 {
     base.SyncUpdate(kBehaviourStateBlock);
 }
Exemple #13
0
 // 强制重新检查触发状态aa
 public virtual void ForceRecheck(sdBehaviourStateBlock kBehaviourStateBlock, bool bTrigger)
 {
 }
Exemple #14
0
 // 同步更新触发条件(相关事件发生的时候才被调用)aa
 public virtual void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock)
 {
 }