Exemplo n.º 1
0
        /// <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);
            }
        }
Exemplo n.º 2
0
        /// <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);
            }
        }