public void ActionHandle(BuffHandlerVar buffHandlerVar) { if (!buffHandlerVar.GetBufferValue(out BufferValue_TargetUnits targetUnits)) { return; } Buff_AddBuff addBuff = (Buff_AddBuff)buffHandlerVar.data; addBuff.buffGroup.sourceUnitId = buffHandlerVar.source.Id; foreach (var v in targetUnits.targets) { //未造成伤害就不给予效果 if (buffHandlerVar.GetBufferValue(out BufferValue_AttackSuccess attackSuccess)) { if (attackSuccess.successDic.ContainsKey(v.Id)) { if (!attackSuccess.successDic[v.Id]) { continue; } } } BuffMgrComponent buffMgr = v.GetComponent <BuffMgrComponent>(); buffMgr.AddBuffGroup(addBuff.buffGroup.BuffGroupId, addBuff.buffGroup); } }
public static void ClearBuffGroupOnBattleEnd(this BuffMgrComponent self) { if (self.updateList.Count > 0) { for (int i = 0; i < self.updateList.Count; i++) { self.RemoveGroup(self.updateList[i].BuffGroupId); } self.updateList.Clear(); } //TODO:后续如果出现诸如冰冻等限制类类型的DEBUFF,会在这里统一去除 }
public static void FixedUpdate(this BuffMgrComponent self) { if (self.updateList.Count > 0) { for (int i = self.updateList.Count - 1; i >= 0; i--) { if (!self.DealWithBuffGroup(self.updateList[i])) { self.updateList.RemoveAt(i); } } } }
public bool MeetCondition(BaseSkillData.IActiveConditionData data, Unit source) { SkillActiveCondition_CheckBuff CheckBuff = data as SkillActiveCondition_CheckBuff; BuffMgrComponent buffMgrComponent = source.GetComponent <BuffMgrComponent>(); foreach (var v in buffMgrComponent.buffGroupDic) { if (v.Value.buffTypeId == CheckBuff.buffTypeId) { return(true); } } return(false); }
public static void RemoveGroup(this BuffMgrComponent self, long groupId) { BuffGroup group; if (!self.buffGroupDic.TryGetValue(groupId, out group)) { return; } Unit target = self.Parent as Unit; Unit source = null; if (group.sourceUnitId != 0) { source = UnitComponent.Instance.Get(group.sourceUnitId); } else { source = target; } group.OnBuffGroupRemove(source, target); self.buffGroupDic.Remove(groupId); }
public static async void AddBuffGroup(this BuffMgrComponent self, long groupId, BuffGroup group) { try { //刷新BUFF,暂时没做叠加 if (self.buffGroupDic.ContainsKey(groupId)) { Log.Debug("移除原Buff"); self.RemoveGroup(groupId); await TimerComponent.Instance.WaitAsync(0.1F);//延迟一下防止卡顿 } BuffGroup newGroup = group; newGroup.BuffGroupId = group.BuffGroupId; Unit target = self.Parent as Unit; Unit source = null; if (group.sourceUnitId != 0) { source = UnitComponent.Instance.Get(group.sourceUnitId); } else { source = target; } newGroup.OnBuffGroupAdd(source, target); self.buffGroupDic[groupId] = newGroup; if (newGroup.duration > 0) { self.updateList.Add(newGroup); } } catch (Exception e) { Log.Error(e.ToString()); } }
static bool DealWithBuffGroup(this BuffMgrComponent self, BuffGroup buffGroup) { TimeSpanHelper.Timer timer = TimeSpanHelper.GetTimer(buffGroup.GetHashCode()); long now = TimeHelper.Now(); if (now - timer.timing >= BuffMgrComponent.calSpan) { timer.timing = now; } if (buffGroup.buffList.Count > 0) { foreach (var v in buffGroup.buffList) { switch (v) { case Buff_DOT dot: GameCalNumericTool.CalDotDamage(buffGroup.sourceUnitId, self.GetParent <Unit>(), dot); break; default: break; } } } if (timer.interval <= 0) { self.RemoveGroup(buffGroup.BuffGroupId); TimeSpanHelper.Remove(buffGroup.GetHashCode()); return(false); } else { return(true); } }
public static void Awake(this BuffMgrComponent self) { self.buffGroupDic = new Dictionary <long, BuffGroup>(); self.updateList = new List <BuffGroup>(); }