From 6eb915c129fc90c6f4c82ae097dd6ffad5239efc Mon Sep 17 00:00:00 2001 From: chai Date: Mon, 25 Jan 2021 14:28:30 +0800 Subject: +scripts --- .../Scripts/XMainClient/XItemRequiredCollector.cs | 198 +++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 Client/Assets/Scripts/XMainClient/XItemRequiredCollector.cs (limited to 'Client/Assets/Scripts/XMainClient/XItemRequiredCollector.cs') diff --git a/Client/Assets/Scripts/XMainClient/XItemRequiredCollector.cs b/Client/Assets/Scripts/XMainClient/XItemRequiredCollector.cs new file mode 100644 index 00000000..0306242d --- /dev/null +++ b/Client/Assets/Scripts/XMainClient/XItemRequiredCollector.cs @@ -0,0 +1,198 @@ +using System; +using System.Collections.Generic; +using XUtliPoolLib; + +namespace XMainClient +{ + internal class XItemRequiredCollector + { + public List RequiredItems + { + get + { + return this.m_RequiredItems; + } + } + + public bool bItemsEnough + { + get + { + for (int i = 0; i < this.m_RequiredItems.Count; i++) + { + bool flag = !this.m_RequiredItems[i].bEnough; + if (flag) + { + return false; + } + } + return true; + } + } + + private List m_RequiredItems = new List(); + + private List m_OwnedItems = new List(); + + public void Init() + { + this.InitRequired(); + this.InitOwned(); + } + + public void ReturnNotEnoughItems() + { + bool bItemsEnough = this.bItemsEnough; + if (!bItemsEnough) + { + for (int i = 0; i < this.m_RequiredItems.Count; i++) + { + XItemRequired xitemRequired = this.m_RequiredItems[i]; + XItemRequired ownedItem = this.GetOwnedItem(xitemRequired.itemID); + ownedItem.ownedCount += xitemRequired.requiredCount; + } + } + } + + public void InitRequired() + { + for (int i = 0; i < this.m_RequiredItems.Count; i++) + { + this.m_RequiredItems[i].Recycle(); + } + this.m_RequiredItems.Clear(); + } + + public void InitOwned() + { + for (int i = 0; i < this.m_OwnedItems.Count; i++) + { + this.m_OwnedItems[i].Recycle(); + } + this.m_OwnedItems.Clear(); + } + + public void PreserveOwned(int itemID) + { + this.GetOwnedItem(itemID); + } + + public XItemRequired GetRequiredItem(uint itemid, ulong itemcount, float param = 1f) + { + ItemList.RowData itemConf = XBagDocument.GetItemConf((int)itemid); + bool flag = itemConf == null; + XItemRequired result; + if (flag) + { + XSingleton.singleton.AddErrorLog("Cant find required item id ", itemid.ToString(), null, null, null, null); + result = null; + } + else + { + XItemRequired data = XDataPool.GetData(); + this.m_RequiredItems.Add(data); + data.itemID = (int)itemid; + data.requiredCount = (ulong)(itemcount * param); + XItemRequired ownedItem = this.GetOwnedItem(data.itemID); + data.ownedCount = ownedItem.ownedCount; + ownedItem.ownedCount -= data.requiredCount; + result = data; + } + return result; + } + + public void GetRequiredItems(ref SeqListRef tableData, float param = 1f) + { + for (int i = 0; i < tableData.Count; i++) + { + this.GetRequiredItem(tableData[i, 0], (ulong)tableData[i, 1], param); + } + } + + public void Merge() + { + Dictionary dictionary = new Dictionary(); + for (int i = 0; i < this.m_RequiredItems.Count; i++) + { + XItemRequired xitemRequired = this.m_RequiredItems[i]; + XItemRequired xitemRequired2; + bool flag = dictionary.TryGetValue(xitemRequired.itemID, out xitemRequired2); + if (flag) + { + xitemRequired2.requiredCount += xitemRequired.requiredCount; + xitemRequired.Recycle(); + } + else + { + this.m_RequiredItems[dictionary.Count] = xitemRequired; + dictionary.Add(xitemRequired.itemID, xitemRequired); + } + } + bool flag2 = dictionary.Count < this.m_RequiredItems.Count; + if (flag2) + { + this.m_RequiredItems.RemoveRange(dictionary.Count, this.m_RequiredItems.Count - dictionary.Count); + } + } + + public XItemRequired GetItem(int itemid) + { + for (int i = 0; i < this.m_RequiredItems.Count; i++) + { + bool flag = this.m_RequiredItems[i].itemID == itemid; + if (flag) + { + return this.m_RequiredItems[i]; + } + } + return null; + } + + public bool HasOwnedItem(int itemID) + { + for (int i = 0; i < this.m_OwnedItems.Count; i++) + { + bool flag = this.m_OwnedItems[i].itemID == itemID; + if (flag) + { + return true; + } + } + return false; + } + + public void SetNewOwnedItem(int itemID, ulong count) + { + bool flag = this.HasOwnedItem(itemID); + if (!flag) + { + ItemList.RowData itemConf = XBagDocument.GetItemConf(itemID); + bool flag2 = itemConf == null; + if (!flag2) + { + XItemRequired data = XDataPool.GetData(); + data.itemID = itemID; + data.ownedCount = count; + this.m_OwnedItems.Add(data); + } + } + } + + public XItemRequired GetOwnedItem(int itemID) + { + for (int i = 0; i < this.m_OwnedItems.Count; i++) + { + bool flag = this.m_OwnedItems[i].itemID == itemID; + if (flag) + { + return this.m_OwnedItems[i]; + } + } + XItemRequired data = XDataPool.GetData(); + data.itemID = itemID; + data.ownedCount = XSingleton.singleton.Doc.XBagDoc.GetItemCount(itemID); + this.m_OwnedItems.Add(data); + return data; + } + } +} -- cgit v1.1-26-g67d0