Exemplo n.º 1
0
        //添加buff
        public void AddBuff(BaseBuff buff)
        {
            int buffID = buff.attributes.BuffID;

            Debug.Log("BuffID=" + buffID);
            //没有这个buff组,创建一个
            if (buffMap.ContainsKey(buffID) == false)
            {
                buffMap [buffID] = new List <BaseBuff> ();
            }
            //判断是否允许叠加, 必须最大层数
            if (buff.attributes.allowOverlay == true && buffMap[buffID].Count < buff.attributes.count)
            {
                buffMap[buffID].Add(buff);
                buff.OnAddBuff();
                AddBuffEvtArg arg = new AddBuffEvtArg();
                arg.buffID   = buffID;
                arg.casterID = buff.caster.GetInstanceID();
                arg.ownerID  = buff.Owner.GetInstanceID();
                FireEvent(this, EventType.EVT_ADD_BUFF, arg);
            }
            else
            {
                buffMap [buffID].Clear();
                buffMap [buffID].Add(buff);
                buff.OnAddBuff();
                AddBuffEvtArg arg = new AddBuffEvtArg();
                arg.buffID   = buffID;
                arg.casterID = buff.caster.GetInstanceID();
                arg.ownerID  = buff.Owner.GetInstanceID();
                FireEvent(this, EventType.EVT_ADD_BUFF, arg);
            }
        }
Exemplo n.º 2
0
        //移除buff
        public void RemoveBuff(int buffID, int count)
        {
            if (!buffMap.ContainsKey(buffID))
            {
                //没有此buff,不用移除
                return;
            }
            if (Global.BuffData.ContainsKey(buffID) == false)
            {
                return;
            }
            BuffItem buffItem = Global.BuffData [buffID] as BuffItem;

            if (buffItem.canBeRemoved == true)
            {
                //移除指定数量
                if (buffMap.ContainsKey(buffID))
                {
                    for (int i = buffMap[buffID].Count - 1; i >= 0; i--)
                    {
                        BaseBuff buff = buffMap [buffID] [i];
                        buff.OnRemoveBuff();
                        buffMap [buffID].Remove(buff);
                    }
                }
            }
            //判断是否为玩家单位
            if (Global.GetPlayer() == gameObject)
            {
                if (!buffMap.ContainsKey(buffID) || buffMap[buffID].Count == 0)
                {
                    RemoveBuffIconEvtArg arg = new RemoveBuffIconEvtArg();
                    arg.buffID = buffID;
                    FireEvent(this, EventType.EVT_REMOVE_BUFF_ICON, arg);
                }
            }
        }