using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using UnityEngine;
|
|
|
public class BattleObjectBuffMgr
|
{
|
private Dictionary<int/*EffectId*/, KeyValuePair<BattleEffectPlayer, HashSet<uint/*BuffID*/>>> buffEffectDict = new Dictionary<int, KeyValuePair<BattleEffectPlayer, HashSet<uint>>>();
|
|
private Dictionary<uint, HB428_tagSCBuffRefresh> buffDataDict = new Dictionary<uint, HB428_tagSCBuffRefresh>();
|
|
private BattleObject battleObject;
|
|
public void Init(BattleObject _battleObject)
|
{
|
battleObject = _battleObject;
|
}
|
|
public void Release()
|
{
|
|
}
|
|
public void Run()
|
{
|
// 跟随BattleObject
|
foreach (var kv in buffEffectDict)
|
{
|
// foreach (var kv2 in effectDict)
|
{
|
BattleEffectPlayer effectPlayer = kv.Value.Key;
|
effectPlayer.transform.position = battleObject.heroRectTrans.position;
|
}
|
}
|
}
|
|
public void RemoveAllBuff()
|
{
|
foreach (var kv in buffEffectDict)
|
{
|
KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair = kv.Value;
|
battleObject.battleField.battleEffectMgr.RemoveEffect(kv.Key, pair.Key);
|
}
|
|
buffEffectDict.Clear();
|
buffDataDict.Clear();
|
|
battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
|
}
|
|
// 删除buff
|
public void RemoveBuff(HB429_tagSCBuffDel vNetData)
|
{
|
HB428_tagSCBuffRefresh buffData = null;
|
|
if (buffDataDict.TryGetValue(vNetData.BuffID, out buffData))
|
{
|
buffDataDict.Remove(vNetData.BuffID);
|
}
|
|
if (buffData != null)
|
{
|
SkillConfig skillConfig = SkillConfig.Get((int)buffData.SkillID);
|
|
if (null == skillConfig || skillConfig.BuffEffect <= 0)
|
{
|
return;
|
}
|
|
KeyValuePair<BattleEffectPlayer, HashSet<uint>> effectPair;
|
|
if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out effectPair))
|
{
|
effectPair.Value.Remove(vNetData.BuffID);
|
|
if (effectPair.Value.Count == 0)
|
{
|
// 没有这个buff了
|
battleObject.battleField.battleEffectMgr.RemoveEffect(skillConfig.BuffEffect, effectPair.Key);
|
buffEffectDict.Remove(skillConfig.BuffEffect);
|
}
|
}
|
}
|
|
// 不做表现
|
battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
|
}
|
|
// 刷新buff
|
public void RefreshBuff(HB428_tagSCBuffRefresh vNetData)
|
{
|
SkillConfig skillConfig = SkillConfig.Get((int)vNetData.SkillID);
|
|
if (null == skillConfig)
|
{
|
Debug.LogError("buff对应的技能不存在,skillId : " + vNetData.SkillID);
|
return;
|
}
|
|
bool isNew = false;
|
if (buffDataDict.ContainsKey(vNetData.BuffID))
|
{
|
buffDataDict[vNetData.BuffID] = vNetData;
|
}
|
else
|
{
|
isNew = true;
|
buffDataDict.Add(vNetData.BuffID, vNetData);
|
}
|
|
if (isNew)
|
{
|
BuffMountAction buffMountAction = new BuffMountAction(battleObject.battleField, battleObject, vNetData, () =>
|
{
|
if (null != skillConfig && skillConfig.BuffEffect > 0)
|
{
|
// 已经存在相同的buff特效
|
if (buffEffectDict.TryGetValue(skillConfig.BuffEffect, out KeyValuePair<BattleEffectPlayer, HashSet<uint>> pair))
|
{
|
pair.Value.Add(vNetData.BuffID);
|
}
|
else
|
{
|
BattleEffectPlayer effect = battleObject.battleField.battleEffectMgr.PlayEffect(battleObject, skillConfig.BuffEffect, battleObject.heroRectTrans, battleObject.Camp);
|
HashSet<uint> buffIdSet = new HashSet<uint>();
|
buffIdSet.Add(vNetData.BuffID);
|
buffEffectDict.Add(skillConfig.BuffEffect, new KeyValuePair<BattleEffectPlayer, HashSet<uint>>(effect, buffIdSet));
|
}
|
}
|
battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
|
});
|
battleObject.battleField.recordPlayer.PlayRecord(buffMountAction);
|
}
|
else
|
{
|
// 已经存在的buff 刷新
|
battleObject.heroInfoBar.RefreshBuff(buffDataDict.Values.ToList());
|
}
|
}
|
|
}
|