| | |
| | | { BattleConst.PassiveSkillLimitGroup, false }, |
| | | }; |
| | | |
| | | // 缓存Run()清理用的列表,避免每帧分配 |
| | | private List<int> _removeEffectCache = new List<int>(); |
| | | |
| | | // 缓存OnBuffChanged回调用的列表,避免每次分配 |
| | | private List<HB428_tagSCBuffRefresh> _buffValueCache = new List<HB428_tagSCBuffRefresh>(); |
| | | |
| | | public void Init(BattleObject _battleObject) |
| | | { |
| | | battleObject = _battleObject; |
| | |
| | | |
| | | public void Run() |
| | | { |
| | | List<int> removeEffectList = new List<int>(); |
| | | _removeEffectCache.Clear(); |
| | | // 跟随BattleObject |
| | | foreach (var kv in buffEffectDict) |
| | | { |
| | |
| | | if (effectPlayer.isBindBone) |
| | | { |
| | | effectPlayer.FollowBoneXY(); |
| | | return; |
| | | continue; |
| | | } |
| | | int[] effectPos = effectPlayer.effectConfig.effectPos; |
| | | effectPlayer.transform.position = battleObject.GetPosition(); |
| | |
| | | } |
| | | else |
| | | { |
| | | removeEffectList.Add(kv.Key); |
| | | _removeEffectCache.Add(kv.Key); |
| | | } |
| | | } |
| | | |
| | | foreach (var effectId in removeEffectList) |
| | | foreach (var effectId in _removeEffectCache) |
| | | { |
| | | buffEffectDict.Remove(effectId); |
| | | } |
| | |
| | | return; |
| | | } |
| | | |
| | | var buffList = vNetDataList.Where(buff => buff != null && buff.IsAdd != 0).ToList(); |
| | | var refreshList = vNetDataList.Where(buff => buff != null && buff.IsAdd == 0).ToList(); |
| | | var buffList = new List<HB428_tagSCBuffRefresh>(); |
| | | var refreshList = new List<HB428_tagSCBuffRefresh>(); |
| | | for (int i = 0; i < vNetDataList.Count; i++) |
| | | { |
| | | var buff = vNetDataList[i]; |
| | | if (buff == null) continue; |
| | | if (buff.IsAdd != 0) buffList.Add(buff); |
| | | else refreshList.Add(buff); |
| | | } |
| | | |
| | | // 处理需要播放动画的buff (IsAdd != 0) |
| | | if (buffList.Count > 0) |
| | |
| | | |
| | | UpdateControlState(); |
| | | |
| | | battleObject.RefreshBuff(buffDataDict.Values.ToList()); |
| | | _buffValueCache.Clear(); |
| | | foreach (var kv in buffDataDict) |
| | | _buffValueCache.Add(kv.Value); |
| | | battleObject.RefreshBuff(_buffValueCache); |
| | | onBuffChanged?.Invoke(); |
| | | |
| | | // bool isUnderControl = false; |
| | |
| | | |
| | | public List<HB428_tagSCBuffRefresh> GetBuffIconList() |
| | | { |
| | | List<HB428_tagSCBuffRefresh> buffList = buffDataDict.Values.Where(buff => |
| | | List<HB428_tagSCBuffRefresh> buffList = new List<HB428_tagSCBuffRefresh>(); |
| | | foreach (var kv in buffDataDict) |
| | | { |
| | | var buff = kv.Value; |
| | | SkillConfig skillConfig = SkillConfig.Get((int)buff.SkillID); |
| | | return skillConfig != null; |
| | | }).ToList(); |
| | | if (skillConfig != null) |
| | | buffList.Add(buff); |
| | | } |
| | | return buffList; |
| | | } |
| | | |