/// <summary> /// 手动将一个技能添加到冷却列表中 /// </summary> /// <param name="skill">要冷却的技能</param> protected void AddSkillTocdList(SkillCDAndWeight_New skill) { if (skill == null) { return; } _cdCalList.Add(skill); }
public int CompareTo(object obj) { SkillCDAndWeight_New bts = (SkillCDAndWeight_New)obj; if (this.Weight < bts.Weight) { return(-1); } if (this.Weight >= bts.Weight) { return(1); } return(0); }
void Update() { //第一个if就是当AI进入到近战范围内,开始从队列中取出技能来释放(释放节奏通过cd和weight控制) if (PropertyQueue.Count() != 0 && GetComplete() && CurrentSelfToTargetDis < SYAttackDistance) { skillCdAndWeightNew = GetOneSkillInPropertyList(); if (skillCdAndWeightNew != null) { SkillOneAction = skillCdAndWeightNew.Skill; Debug.Log("........................................"); TestSkill(); } } //这个if控制带有特定触发条件的技能的触发 if (isCanAssault && NowState == AIState.Run && (CurrentSelfToTargetDis < AssaultTriggerMaxDistance && CurrentSelfToTargetDis > AssaultTriggerMinDistance)) { SkillOneAction = skill2Action; isCanAssault = false; TestSkill(); } }
/// <summary> /// 重写回调函数来实现一些初始化,该处在技能状态结束后,将带有CD和Weight封装的技能添加到cd列表中进行冷却。 /// 没有封装的技能也会调用这里,由于skillCdAndWeightNew为空所以不会起任何作用。 /// 也可以正常使用需要CD冷却但是不需要添加优先级队列的技能,只需要将权重设置为999即可 /// </summary> public override void OnJustExitSkillState() { AddSkillTocdList(skillCdAndWeightNew); skillCdAndWeightNew = null; }
/// <summary> /// 手动返回一个当前可释放的技能 /// </summary> /// <returns></returns> protected SkillCDAndWeight_New GetOneSkillInPropertyList() { SkillCDAndWeight_New skillCdAndWeightNew = PropertyQueue.Pop(); return(skillCdAndWeightNew); }