using FL.Data.Items; using FL.Network; using System; using System.Collections.Generic; using XGame.Database; using XGame.Framework.Data; namespace FL { public class EquipData : DataSingleton, IDisposable { private Dictionary _wearEquipMap = new Dictionary(); // 身上穿戴的装备数据 private Dictionary _temporaryEquipMap = new Dictionary();// 开宝藏箱子掉落的临时装备数据 private Dictionary _bagEquipMap = new Dictionary();// 装备背包中的装备数据 /// /// 获得装备列表界面用到冒泡的装备uid /// public long BubblingEquipUid { set; get; } /// /// 获取身上穿戴的部位装备 /// /// /// public EquipAttr GetWearEquipData(EEquipType equipType) { return _wearEquipMap.ContainsKey(equipType) ? _wearEquipMap[equipType] : null; } /// /// 更换装备 /// /// /// public void AddWearEquip(EEquipType equipType, EquipAttr equipData) { _wearEquipMap.Add(equipType, equipData); } /// /// 身上该部位是否已穿戴装备 /// /// /// public bool IsWear(EEquipType equipType) { return _wearEquipMap.ContainsKey(equipType); } /// /// 更换装备 /// /// /// public void ChangeWearEquipData(EEquipType equipType, EquipAttr data) { if (_wearEquipMap.ContainsKey(equipType)) { _wearEquipMap[equipType] = data; } else { _wearEquipMap.Add(equipType, data); } } /// /// 清除身上穿戴的装备数据 /// public void ClearWearEquip() { foreach (EquipAttr item in _wearEquipMap.Values) { if (item != null) item.Dispose(); } _wearEquipMap.Clear(); } /// /// 装备背包新增一件装备 /// /// public void AddEquip(EquipAttr equip) { _bagEquipMap.Add(equip.Id, equip); } /// /// 获取装备背包中的某件装备信息 /// /// /// public EquipAttr GetBagEquipItem(long uid) { return _bagEquipMap.ContainsKey(uid) ? _bagEquipMap[uid] : null; } /// /// 把更换下来的装备数据替换到装备背包中对应的 /// /// /// public void UpdataBagEquipData(EquipAttr equipData) { if (_bagEquipMap.ContainsKey(equipData.Id)) _bagEquipMap[equipData.Id] = equipData; else _bagEquipMap.Add(equipData.Id, equipData); } /// /// 移除装备背包中的某件装备 /// /// /// public void RemoveEquip(long id, bool bDispose = false) { if (bDispose) { _bagEquipMap[id]?.Dispose(); } _bagEquipMap.Remove(id); } /// /// 清除装备背包数据 /// public void ClearEquipBag() { foreach (var item in _bagEquipMap) { item.Value.Dispose(); } _bagEquipMap.Clear(); } /// /// 新增的掉落临时装备 /// /// /// 是否添加到装备背包中 public void AddTemporaryEquip(EquipAttr equip) { _temporaryEquipMap.Add(equip.Id, equip); } /// /// 获取装备掉落的临时背包中某个装备 /// /// /// public EquipAttr GetTemporaryEquipItem(long uid) { return _temporaryEquipMap.ContainsKey(uid) ? _temporaryEquipMap[uid] : null; } /// /// 获取背包的装备列表 /// /// public void GetBagEquipList(ref List equipList) { equipList.AddRange(_bagEquipMap.Values); } /// /// 装备背包是否为空 /// /// public bool IsEquipbagEmpty() { return _bagEquipMap.Count == 0; } /// /// 身上穿戴的装备列表是否为空 /// /// public bool IsWearEquipEmpty() { return _wearEquipMap.Count == 0; } /// /// 身上穿戴的装备信息 /// /// /// public EquipAttr GetNewWearEquipData(ActEquipChuan equipData) { EquipmentTable equipInfo = EquipmentTableRepo.Get(equipData.equipId); EquipAttr _equipItem = new EquipAttr(); _equipItem.Init(equipInfo, 0); _equipItem.Level = equipData.level; if (equipData?.eps?.Count > 0) { Attributes attr = _equipItem.Attributes; GetEquipAttributes(equipData.eps, ref attr); } //装备的属性列表 var equipAttributes = new List(); _equipItem.Attributes.GetAll(ref equipAttributes, 0); _equipItem.FightingPower = equipData.power; return _equipItem; } /// /// 装备属性 /// /// /// public void GetEquipAttributes(List equipEps, ref Attributes attrs) { foreach (var item in equipEps) { attrs.SetValue((EAttributeType)item.epid, item.val); } } /// /// 获取装备的数据信息 /// /// /// public EquipAttr GetDropEquipData(ActEquipLsList equipData) { EquipmentTable equipInfo = EquipmentTableRepo.Get(equipData.equipId); EquipAttr _equipItem = new EquipAttr(); _equipItem.Init(equipInfo, equipData.xhid); _equipItem.Level = equipData.level; if (equipData?.eps?.Count > 0) { Attributes attr = _equipItem.Attributes; GetEquipAttributes(equipData.eps, ref attr); } _equipItem.FightingPower = equipData.power; return _equipItem; } /// /// 身上穿戴的装备的战力值 /// /// /// public void GetWearEquipPower(ref Dictionary wearEquipPowerMap) { foreach (var item in _wearEquipMap) { wearEquipPowerMap[item.Key] = item.Value.FightingPower; } } /// /// 获取身上部位的装备战力值 /// /// public long GetWearPartPower(EEquipType equipPart) { return _wearEquipMap.ContainsKey(equipPart) ? _wearEquipMap[equipPart].FightingPower : 0; } /// /// 清除临时掉落的装备列表 /// public void ClearTemporaryEquipList() { if (_temporaryEquipMap?.Count > 0) { _temporaryEquipMap.Clear(); } } void IDisposable.Dispose() { if (_wearEquipMap.Count > 0) { foreach (var item in _wearEquipMap.Values) { (item as IDisposable)?.Dispose(); } _wearEquipMap.Clear(); } ClearTemporaryEquipList(); ClearEquipBag(); } } }