// 检查并设置触发状态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); } } } }
// 更新触发条件(发生触发事件时调用)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); }
// 更新触发条件(发生触发事件时调用)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); } } }
// 更新触发状态(继承自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; } } }
// 触发事件(继承自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); } } } } } }
// 强制重新检查触发状态(继承自BehaviourTrigger)aa public override void ForceRecheck(sdBehaviourStateBlock kBehaviourStateBlock, bool bTrigger) { base.ForceRecheck(kBehaviourStateBlock, bTrigger); }
// 触发事件(继承自BehaviourTrigger)aa public override void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock) { base.SyncUpdate(kBehaviourStateBlock); }
// 强制重新检查触发状态aa public virtual void ForceRecheck(sdBehaviourStateBlock kBehaviourStateBlock, bool bTrigger) { }
// 同步更新触发条件(相关事件发生的时候才被调用)aa public virtual void SyncUpdate(sdBehaviourStateBlock kBehaviourStateBlock) { }