//添加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); } }
//移除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); } } }