/// <summary> /// 重新绑定特效(角色上下马使用) /// </summary> public void ResetAllEffectObj() { List <uint> reset_effect_buffIdArray = new List <uint>(); foreach (var item in mEffectObjs) { if (item.Value.IsDestroy == false && item.Value.mEffectObject != null) { reset_effect_buffIdArray.Add(item.Key); } } for (int index = 0; index < reset_effect_buffIdArray.Count; ++index) { uint buff_id = reset_effect_buffIdArray[index]; BindEffectInfo info = mEffectObjs[buff_id]; DestroyEffectObj(buff_id); BindEffectInfo new_effect = mOwner.InitBindEffectInfo(info.mEffectResPath, info.BindPos, info.FollowTarget, info.mScale, false, info.MaxCount); new_effect.CreateInstance(); mEffectObjs.Add(buff_id, new_effect); } }
/// <summary> /// 增加buff的特效 /// </summary> public void AddEffectObj(DBBuffSev.DBBuffInfo buff_info) { if (buff_info == null) { return; } if (mEffectObjs.ContainsKey(buff_info.buff_id)) { return; } if (buff_info.effect_file == string.Empty) { return; } int effect_max_count = GameConstHelper.GetInt("GAME_BUFF_EFFECT_MAX_COUNT"); if (effect_max_count == 0) { effect_max_count = 5; } bool can_show = true; if (buff_info.other_hide) // 其他玩家需要隐藏的特效 { can_show = !ShieldManager.Instance.IsHideBuffEffect(mOwner); } if (can_show && buff_info.force_show == false)// 需要通过顶替规则进行显示的特效 { // 统计当前可能被顶替的特效数量 int current_count = 0; uint low_priority_buff = 0; uint low_priority = uint.MaxValue; bool del_low_priority = false; foreach (uint id in mEffectObjs.Keys) { DBBuffSev.DBBuffInfo t_buff_info = DBBuffSev.GetInstance().GetBuffInfo(id); if (t_buff_info.force_show == false) { if (buff_info.priority > t_buff_info.priority) //可顶替 { if (low_priority > t_buff_info.priority) // 寻找最低优先级的特效 { low_priority = t_buff_info.priority; low_priority_buff = id; } } current_count++; } if (current_count >= effect_max_count) { del_low_priority = true; } } if (del_low_priority) { if (low_priority_buff != 0) { DestroyEffectObj(low_priority_buff); } else { can_show = false; } } } if (can_show) { BindEffectInfo new_effect = mOwner.InitBindEffectInfo(buff_info.effect_file, buff_info.bind_pos, buff_info.follow_target, buff_info.scale, buff_info.auto_scale, buff_info.max_count); new_effect.CreateInstance(); mEffectObjs.Add(buff_info.buff_id, new_effect); } }