Exemplo n.º 1
0
    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);
        }
    }
Exemplo n.º 2
0
 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,会在这里统一去除
 }
Exemplo n.º 3
0
 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);
             }
         }
     }
 }
Exemplo n.º 4
0
    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);
    }
Exemplo n.º 5
0
    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);
    }
Exemplo n.º 6
0
    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());
        }
    }
Exemplo n.º 7
0
    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);
        }
    }
Exemplo n.º 8
0
 public static void Awake(this BuffMgrComponent self)
 {
     self.buffGroupDic = new Dictionary <long, BuffGroup>();
     self.updateList   = new List <BuffGroup>();
 }