|
@@ -2,7 +2,6 @@
|
|
|
using FL.Network;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
-using UnityEngine;
|
|
|
using XGame.Database;
|
|
|
using XGame.Framework.Data;
|
|
|
|
|
@@ -10,10 +9,9 @@ namespace FL
|
|
|
{
|
|
|
public class EquipData : DataSingleton<EquipData>, IDisposable
|
|
|
{
|
|
|
- private Dictionary<EEquipType, EquipItem> _wearEquipDic = new Dictionary<EEquipType, EquipItem>(); // 身上穿戴的装备数据
|
|
|
- private List<EquipItem> _temporaryEquipList = new List<EquipItem>(); // 开宝藏箱子掉落的临时装备列表
|
|
|
- private List<EquipItem> _bagEquipList = new List<EquipItem>(); // 装备背包列表
|
|
|
- private List<EquipItem> _replaceEquipList = new List<EquipItem>();
|
|
|
+ private Dictionary<EEquipType, EquipItem> _wearEquipMap = new Dictionary<EEquipType, EquipItem>(); // 身上穿戴的装备数据
|
|
|
+ private Dictionary<long, EquipItem> _temporaryEquipMap = new Dictionary<long, EquipItem>();// 开宝藏箱子掉落的临时装备数据
|
|
|
+ private Dictionary<long, EquipItem> _bagEquipMap = new Dictionary<long, EquipItem>();// 装备背包中的装备数据
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
@@ -29,11 +27,7 @@ namespace FL
|
|
|
/// <returns></returns>
|
|
|
public EquipItem GetWearEquipData(EEquipType equipType)
|
|
|
{
|
|
|
- if (_wearEquipDic.ContainsKey(equipType))
|
|
|
- {
|
|
|
- return _wearEquipDic[equipType];
|
|
|
- }
|
|
|
- return null;
|
|
|
+ return _wearEquipMap.ContainsKey(equipType) ? _wearEquipMap[equipType] : null;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -43,7 +37,7 @@ namespace FL
|
|
|
/// <param name="id"></param>
|
|
|
public void AddWearEquip(EEquipType equipType, EquipItem equipData)
|
|
|
{
|
|
|
- _wearEquipDic.Add(equipType, equipData);
|
|
|
+ _wearEquipMap.Add(equipType, equipData);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -53,7 +47,7 @@ namespace FL
|
|
|
/// <returns></returns>
|
|
|
public bool IsWear(EEquipType equipType)
|
|
|
{
|
|
|
- return _wearEquipDic.ContainsKey(equipType);
|
|
|
+ return _wearEquipMap.ContainsKey(equipType);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -63,32 +57,38 @@ namespace FL
|
|
|
/// <param name="id"></param>
|
|
|
public void ChangeWearEquipData(EEquipType equipType, EquipItem data)
|
|
|
{
|
|
|
- if (_wearEquipDic.ContainsKey(equipType))
|
|
|
+ if (_wearEquipMap.ContainsKey(equipType))
|
|
|
+ {
|
|
|
+ _wearEquipMap[equipType] = data;
|
|
|
+ }
|
|
|
+ else
|
|
|
{
|
|
|
- _wearEquipDic[equipType] = data;
|
|
|
+ _wearEquipMap.Add(equipType, data);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 清除身上穿戴的装备数据
|
|
|
/// </summary>
|
|
|
public void ClearWearEquip()
|
|
|
{
|
|
|
- foreach (EquipItem item in _wearEquipDic.Values)
|
|
|
+ foreach (EquipItem item in _wearEquipMap.Values)
|
|
|
{
|
|
|
if (item != null)
|
|
|
item.Dispose();
|
|
|
}
|
|
|
- _wearEquipDic.Clear();
|
|
|
+ _wearEquipMap.Clear();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 装备背包新增一个抓过南北数据
|
|
|
+ /// 装备背包新增一件装备
|
|
|
/// </summary>
|
|
|
/// <param name="equip"></param>
|
|
|
public void AddEquip(EquipItem equip)
|
|
|
{
|
|
|
- _bagEquipList.Add(equip);
|
|
|
+ _bagEquipMap.Add(equip.Id, equip);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -99,7 +99,7 @@ namespace FL
|
|
|
|
|
|
public EquipItem GetBagEquipItem(long uid)
|
|
|
{
|
|
|
- return _bagEquipList.Find(item => item.Id == uid);
|
|
|
+ return _bagEquipMap.ContainsKey(uid) ? _bagEquipMap[uid] : null;
|
|
|
}
|
|
|
/// <summary>
|
|
|
/// 把更换下来的装备数据替换到装备背包中对应的
|
|
@@ -108,30 +108,12 @@ namespace FL
|
|
|
/// <param name="replaceEquipData"></param>
|
|
|
public void UpdataBagEquipData(EquipItem equipData)
|
|
|
{
|
|
|
- for (int i = 0; i < _bagEquipList.Count; i++)
|
|
|
- {
|
|
|
- if (_bagEquipList != null && _bagEquipList[i].Id == equipData.Id)
|
|
|
- {
|
|
|
- _bagEquipList[i] = equipData;
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
+ if (_bagEquipMap.ContainsKey(equipData.Id))
|
|
|
+ _bagEquipMap[equipData.Id] = equipData;
|
|
|
+ else
|
|
|
+ _bagEquipMap.Add(equipData.Id, equipData);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- public void ClearReplaceData()
|
|
|
- {
|
|
|
- _replaceEquipList.Clear();
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 获取装备背包中的装备列表
|
|
|
- /// </summary>
|
|
|
- /// <param name="equipList"></param>
|
|
|
- public void GetEquipList(ref List<EquipItem> equipList)
|
|
|
- {
|
|
|
- equipList.AddRange(_bagEquipList);
|
|
|
- }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 移除装备背包中的某件装备
|
|
@@ -140,18 +122,11 @@ namespace FL
|
|
|
/// <param name="bDispose"></param>
|
|
|
public void RemoveEquip(long id, bool bDispose = false)
|
|
|
{
|
|
|
- for (int i = 0; i < _bagEquipList.Count; i++)
|
|
|
+ if (bDispose)
|
|
|
{
|
|
|
- if (_bagEquipList[i].Id == id)
|
|
|
- {
|
|
|
- if (bDispose)
|
|
|
- {
|
|
|
- _bagEquipList[i].Dispose();
|
|
|
- }
|
|
|
- _bagEquipList.RemoveAt(i);
|
|
|
- return;
|
|
|
- }
|
|
|
+ _bagEquipMap[id]?.Dispose();
|
|
|
}
|
|
|
+ _bagEquipMap.Remove(id);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -159,12 +134,11 @@ namespace FL
|
|
|
/// </summary>
|
|
|
public void ClearEquipBag()
|
|
|
{
|
|
|
- foreach (EquipItem item in _bagEquipList)
|
|
|
+ foreach (var item in _bagEquipMap)
|
|
|
{
|
|
|
- if (item != null)
|
|
|
- item.Dispose();
|
|
|
+ item.Value.Dispose();
|
|
|
}
|
|
|
- _bagEquipList.Clear();
|
|
|
+ _bagEquipMap.Clear();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -172,11 +146,9 @@ namespace FL
|
|
|
/// </summary>
|
|
|
/// <param name="equip"></param>
|
|
|
/// <param name="bAddBag">是否添加到装备背包中</param>
|
|
|
- public void AddTemporaryEquip(EquipItem equip,bool bAddBag = true)
|
|
|
+ public void AddTemporaryEquip(EquipItem equip)
|
|
|
{
|
|
|
- _temporaryEquipList.Add(equip);
|
|
|
- if (bAddBag)
|
|
|
- AddEquip(equip);
|
|
|
+ _temporaryEquipMap.Add(equip.Id, equip);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -186,7 +158,7 @@ namespace FL
|
|
|
/// <returns></returns>
|
|
|
public EquipItem GetTemporaryEquipItem(long uid)
|
|
|
{
|
|
|
- return _temporaryEquipList.Find(item => item.Id == uid);
|
|
|
+ return _temporaryEquipMap.ContainsKey(uid) ? _temporaryEquipMap[uid] : null;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -195,7 +167,7 @@ namespace FL
|
|
|
/// <param name="equipList"></param>
|
|
|
public void GetBagEquipList(ref List<EquipItem> equipList)
|
|
|
{
|
|
|
- equipList.AddRange(_bagEquipList);
|
|
|
+ equipList.AddRange(_bagEquipMap.Values);
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -204,7 +176,7 @@ namespace FL
|
|
|
/// <returns></returns>
|
|
|
public bool IsEquipbagEmpty()
|
|
|
{
|
|
|
- return _bagEquipList?.Count == 0;
|
|
|
+ return _bagEquipMap.Count == 0;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -213,7 +185,7 @@ namespace FL
|
|
|
/// <returns></returns>
|
|
|
public bool IsWearEquipEmpty()
|
|
|
{
|
|
|
- return _wearEquipDic.Count == 0;
|
|
|
+ return _wearEquipMap.Count == 0;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -230,24 +202,31 @@ namespace FL
|
|
|
if (equipData?.eps?.Count > 0)
|
|
|
{
|
|
|
Attributes attr = _equipItem.Attributes;
|
|
|
- if (attr != null)
|
|
|
- {
|
|
|
- foreach (var item in equipData.eps)
|
|
|
- {
|
|
|
- attr.SetValue((EAttributeType)item.epid, item.val);
|
|
|
- }
|
|
|
- }
|
|
|
+ GetEquipAttributes(equipData.eps, ref attr);
|
|
|
}
|
|
|
|
|
|
//装备的属性列表
|
|
|
var equipAttributes = new List<EAttributeType>();
|
|
|
_equipItem.Attributes.GetAll(ref equipAttributes, 0);
|
|
|
|
|
|
- _equipItem.FightingPower = GetFightingPower(equipAttributes, _equipItem);
|
|
|
+ _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>
|
|
@@ -261,61 +240,33 @@ namespace FL
|
|
|
if (equipData?.eps?.Count > 0)
|
|
|
{
|
|
|
Attributes attr = _equipItem.Attributes;
|
|
|
- if (attr != null)
|
|
|
- {
|
|
|
- foreach (var item in equipData.eps)
|
|
|
- {
|
|
|
- attr.SetValue((EAttributeType)item.epid, item.val);
|
|
|
- }
|
|
|
- }
|
|
|
+ GetEquipAttributes(equipData.eps, ref attr);
|
|
|
}
|
|
|
|
|
|
- //装备的属性列表
|
|
|
- var equipAttributes = new List<EAttributeType>();
|
|
|
- _equipItem.Attributes.GetAll(ref equipAttributes, 0);
|
|
|
-
|
|
|
- _equipItem.FightingPower = GetFightingPower(equipAttributes, _equipItem);
|
|
|
+ _equipItem.FightingPower = equipData.power;
|
|
|
return _equipItem;
|
|
|
}
|
|
|
+
|
|
|
/// <summary>
|
|
|
- /// 获取装备的属性转化的战斗力值
|
|
|
+ /// 身上穿戴的装备的战力值
|
|
|
/// </summary>
|
|
|
- /// <param name="attrMap"></param>
|
|
|
+ /// <param name="equipPart"></param>
|
|
|
/// <returns></returns>
|
|
|
- private long GetFightingPower(List<EAttributeType> attributeList, EquipItem equipItem)
|
|
|
+ public void GetWearEquipPower(ref Dictionary<EEquipType, long> wearEquipPowerMap)
|
|
|
{
|
|
|
- long fightPower = 0;
|
|
|
- foreach (var item in attributeList)
|
|
|
+ foreach (var item in _wearEquipMap)
|
|
|
{
|
|
|
- fightPower += GetAttrToFightingPower(item, equipItem.Attributes.GetValue(item));
|
|
|
+ wearEquipPowerMap[item.Key] = item.Value.FightingPower;
|
|
|
}
|
|
|
- return fightPower;
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 属性类型转化为战力值
|
|
|
- /// </summary>
|
|
|
- /// <returns></returns>
|
|
|
- private int GetAttrToFightingPower(EAttributeType attributeType, long attributeVal)
|
|
|
- {
|
|
|
- AttrDescTable attrInfo = AttrDescTableRepo.Get((int)attributeType);
|
|
|
- Debug.Assert(attrInfo != null, $"AttrDescTable表不存在属性类型{attributeType}");
|
|
|
- bool bRatio = attrInfo.Num_type == 1 || attributeType == EAttributeType.AtkSpeed;
|
|
|
- return Mathf.CeilToInt(attrInfo.PowerConversion.ToReal() * (bRatio ? (float)attributeVal.ToRealDouble() : attributeVal));
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 获取装备属性的总战力
|
|
|
+ /// 获取身上部位的装备战力值
|
|
|
/// </summary>
|
|
|
- /// <param name="epsList"></param>
|
|
|
/// <returns></returns>
|
|
|
- public long GetEquipPower(List<EpsSchema> epsList)
|
|
|
+ public long GetWearPartPower(EEquipType equipPart)
|
|
|
{
|
|
|
- long fightPower = 0;
|
|
|
- foreach (var item in epsList)
|
|
|
- {
|
|
|
- fightPower += GetAttrToFightingPower((EAttributeType)item.epid, item.val);
|
|
|
- }
|
|
|
- return fightPower;
|
|
|
+ return _wearEquipMap.ContainsKey(equipPart) ? _wearEquipMap[equipPart].FightingPower : 0;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -323,21 +274,21 @@ namespace FL
|
|
|
/// </summary>
|
|
|
public void ClearTemporaryEquipList()
|
|
|
{
|
|
|
- if (_temporaryEquipList?.Count > 0)
|
|
|
+ if (_temporaryEquipMap?.Count > 0)
|
|
|
{
|
|
|
- _temporaryEquipList.Clear();
|
|
|
+ _temporaryEquipMap.Clear();
|
|
|
}
|
|
|
}
|
|
|
|
|
|
void IDisposable.Dispose()
|
|
|
{
|
|
|
- if (_wearEquipDic?.Count > 0)
|
|
|
+ if (_wearEquipMap.Count > 0)
|
|
|
{
|
|
|
- foreach (var item in _wearEquipDic.Values)
|
|
|
+ foreach (var item in _wearEquipMap.Values)
|
|
|
{
|
|
|
(item as IDisposable)?.Dispose();
|
|
|
}
|
|
|
- _wearEquipDic.Clear();
|
|
|
+ _wearEquipMap.Clear();
|
|
|
}
|
|
|
ClearTemporaryEquipList();
|
|
|
ClearEquipBag();
|