123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297 |
- 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<EquipData>, IDisposable
- {
- private Dictionary<EEquipType, EquipAttr> _wearEquipMap = new Dictionary<EEquipType, EquipAttr>(); // 身上穿戴的装备数据
- private Dictionary<long, EquipAttr> _temporaryEquipMap = new Dictionary<long, EquipAttr>();// 开宝藏箱子掉落的临时装备数据
- private Dictionary<long, EquipAttr> _bagEquipMap = new Dictionary<long, EquipAttr>();// 装备背包中的装备数据
- /// <summary>
- /// 获得装备列表界面用到冒泡的装备uid
- /// </summary>
- public long BubblingEquipUid { set; get; }
- /// <summary>
- /// 获取身上穿戴的部位装备
- /// </summary>
- /// <param name="equipType"></param>
- /// <returns></returns>
- public EquipAttr GetWearEquipData(EEquipType equipType)
- {
- return _wearEquipMap.ContainsKey(equipType) ? _wearEquipMap[equipType] : null;
- }
- /// <summary>
- /// 更换装备
- /// </summary>
- /// <param name="equipType"></param>
- /// <param name="id"></param>
- public void AddWearEquip(EEquipType equipType, EquipAttr equipData)
- {
- _wearEquipMap.Add(equipType, equipData);
- }
- /// <summary>
- /// 身上该部位是否已穿戴装备
- /// </summary>
- /// <param name="equipType"></param>
- /// <returns></returns>
- public bool IsWear(EEquipType equipType)
- {
- return _wearEquipMap.ContainsKey(equipType);
- }
- /// <summary>
- /// 更换装备
- /// </summary>
- /// <param name="equipType"></param>
- /// <param name="id"></param>
- public void ChangeWearEquipData(EEquipType equipType, EquipAttr data)
- {
- if (_wearEquipMap.ContainsKey(equipType))
- {
- _wearEquipMap[equipType] = data;
- }
- else
- {
- _wearEquipMap.Add(equipType, data);
- }
- }
- /// <summary>
- /// 清除身上穿戴的装备数据
- /// </summary>
- public void ClearWearEquip()
- {
- foreach (EquipAttr item in _wearEquipMap.Values)
- {
- if (item != null)
- item.Dispose();
- }
- _wearEquipMap.Clear();
- }
- /// <summary>
- /// 装备背包新增一件装备
- /// </summary>
- /// <param name="equip"></param>
- public void AddEquip(EquipAttr equip)
- {
- _bagEquipMap.Add(equip.Id, equip);
- }
- /// <summary>
- /// 获取装备背包中的某件装备信息
- /// </summary>
- /// <param name="uid"></param>
- /// <returns></returns>
- public EquipAttr GetBagEquipItem(long uid)
- {
- return _bagEquipMap.ContainsKey(uid) ? _bagEquipMap[uid] : null;
- }
- /// <summary>
- /// 把更换下来的装备数据替换到装备背包中对应的
- /// </summary>
- /// <param name="wearEquip"></param>
- /// <param name="replaceEquipData"></param>
- public void UpdataBagEquipData(EquipAttr equipData)
- {
- if (_bagEquipMap.ContainsKey(equipData.Id))
- _bagEquipMap[equipData.Id] = equipData;
- else
- _bagEquipMap.Add(equipData.Id, equipData);
- }
- /// <summary>
- /// 移除装备背包中的某件装备
- /// </summary>
- /// <param name="id"></param>
- /// <param name="bDispose"></param>
- public void RemoveEquip(long id, bool bDispose = false)
- {
- if (bDispose)
- {
- _bagEquipMap[id]?.Dispose();
- }
- _bagEquipMap.Remove(id);
- }
- /// <summary>
- /// 清除装备背包数据
- /// </summary>
- public void ClearEquipBag()
- {
- foreach (var item in _bagEquipMap)
- {
- item.Value.Dispose();
- }
- _bagEquipMap.Clear();
- }
- /// <summary>
- /// 新增的掉落临时装备
- /// </summary>
- /// <param name="equip"></param>
- /// <param name="bAddBag">是否添加到装备背包中</param>
- public void AddTemporaryEquip(EquipAttr equip)
- {
- _temporaryEquipMap.Add(equip.Id, equip);
- }
- /// <summary>
- /// 获取装备掉落的临时背包中某个装备
- /// </summary>
- /// <param name="uid"></param>
- /// <returns></returns>
- public EquipAttr GetTemporaryEquipItem(long uid)
- {
- return _temporaryEquipMap.ContainsKey(uid) ? _temporaryEquipMap[uid] : null;
- }
- /// <summary>
- /// 获取背包的装备列表
- /// </summary>
- /// <param name="equipList"></param>
- public void GetBagEquipList(ref List<EquipAttr> equipList)
- {
- equipList.AddRange(_bagEquipMap.Values);
- }
- /// <summary>
- /// 装备背包是否为空
- /// </summary>
- /// <returns></returns>
- public bool IsEquipbagEmpty()
- {
- return _bagEquipMap.Count == 0;
- }
- /// <summary>
- /// 身上穿戴的装备列表是否为空
- /// </summary>
- /// <returns></returns>
- public bool IsWearEquipEmpty()
- {
- return _wearEquipMap.Count == 0;
- }
- /// <summary>
- /// 身上穿戴的装备信息
- /// </summary>
- /// <param name="equipData"></param>
- /// <returns></returns>
- 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<EAttributeType>();
- _equipItem.Attributes.GetAll(ref equipAttributes, 0);
- _equipItem.FightingPower = equipData.power;
- return _equipItem;
- }
- /// <summary>
- /// 装备属性
- /// </summary>
- /// <param name="equipEps"></param>
- /// <param name="attrs"></param>
- public void GetEquipAttributes(List<EpsSchema> equipEps, ref Attributes attrs)
- {
- foreach (var item in equipEps)
- {
- attrs.SetValue((EAttributeType)item.epid, item.val);
- }
- }
- /// <summary>
- /// 获取装备的数据信息
- /// </summary>
- /// <param name="equipData"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 身上穿戴的装备的战力值
- /// </summary>
- /// <param name="equipPart"></param>
- /// <returns></returns>
- public void GetWearEquipPower(ref Dictionary<EEquipType, long> wearEquipPowerMap)
- {
- foreach (var item in _wearEquipMap)
- {
- wearEquipPowerMap[item.Key] = item.Value.FightingPower;
- }
- }
- /// <summary>
- /// 获取身上部位的装备战力值
- /// </summary>
- /// <returns></returns>
- public long GetWearPartPower(EEquipType equipPart)
- {
- return _wearEquipMap.ContainsKey(equipPart) ? _wearEquipMap[equipPart].FightingPower : 0;
- }
- /// <summary>
- /// 清除临时掉落的装备列表
- /// </summary>
- 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();
- }
- }
- }
|