using System.Collections.Generic; using FairyGUI; using UnityEngine; namespace GFGGame { public class ItemDataManager { private static Dictionary _dataDic = new Dictionary(); private static Dictionary _prepareDic = new Dictionary(); public static void Add(int itemID, int itemNum, bool sendToServer = true) { switch (itemID) { case ConstItemID.EXP: RoleDataManager.exp += itemNum; return; case ConstItemID.POWER: RoleDataManager.power += itemNum; return; case ConstItemID.GOLD: RoleDataManager.gold += itemNum; return; case ConstItemID.DIAMOND_PURPLE: RoleDataManager.diaP += itemNum; return; case ConstItemID.DIAMOND_RED: RoleDataManager.diaR += itemNum; return; } ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemID); if (itemCfg == null) { Debug.LogError($"添加了一个不存在的物品 {itemID}"); return; } ItemData itemData = null; if (_dataDic.ContainsKey(itemID)) { itemData = _dataDic[itemID]; if (itemCfg.itemType == ConstItemType.CARD) { return;//每张卡牌只有一张 } } else { itemData = ItemDataPool.GetItemData(itemID); _dataDic.Add(itemID, itemData); } itemData.num += itemNum; if (ItemUtil.IsDressUpItem(itemID) && itemID % GameConst.MAX_COUNT_EVERY_TYPE_ITEM > 0) { DressUpMenuItemDataManager.Add(itemID); } //Debug.Log("itemid:"+ itemID); //Debug.Log("itemCfg:" + itemCfg); if (itemCfg.itemType == ConstItemType.CARD) { CardDataManager.Add(itemID); } PhotographDataManager.Instance.Add(itemID); if (sendToServer) { PrepareUpdateToServer(itemData.id, itemData.num); } EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID); } public static void Remove(int itemID, int itemNum) { switch (itemID) { case ConstItemID.EXP: RoleDataManager.exp -= itemNum; return; case ConstItemID.POWER: RoleDataManager.power -= itemNum; return; case ConstItemID.GOLD: RoleDataManager.gold -= itemNum; return; case ConstItemID.DIAMOND_PURPLE: RoleDataManager.diaP -= itemNum; return; case ConstItemID.DIAMOND_RED: RoleDataManager.diaR -= itemNum; return; } if (_dataDic.ContainsKey(itemID)) { ItemData itemData = _dataDic[itemID]; itemData.num -= itemNum; if (itemData.num <= 0) { itemData.num = 0; _dataDic.Remove(itemID); if (ItemUtil.IsDressUpItem(itemID)) { DressUpMenuItemDataManager.Remove(itemID); } PrepareUpdateToServer(itemData.id, itemData.num); } EventAgent.DispatchEvent(ConstMessage.ITEM_CHANGED, itemID); } } public static int GetItemNum(int itemID) { switch (itemID) { case ConstItemID.EXP: return RoleDataManager.exp; case ConstItemID.POWER: return RoleDataManager.power; case ConstItemID.GOLD: return RoleDataManager.gold; case ConstItemID.DIAMOND_PURPLE: return RoleDataManager.diaP; case ConstItemID.DIAMOND_RED: return RoleDataManager.diaR; } if (_dataDic.ContainsKey(itemID)) { ItemData itemData = _dataDic[itemID]; return itemData.num; } return 0; } public static void InitServerData(List list) { _dataDic.Clear(); _prepareDic.Clear(); if (list != null) { foreach (RoleItem roleItem in list) { Add(roleItem.itemId, roleItem.num, false); } } } private static void PrepareUpdateToServer(int itemId, int itemNum) { _prepareDic[itemId] = itemNum; if (!Timers.inst.Exists(UpdateToServer)) { Timers.inst.Add(0.1f, 1, UpdateToServer); } } private static void UpdateToServer(object param) { List list = new List(); foreach (KeyValuePair item in _prepareDic) { RoleItem roleItem = new RoleItem(); roleItem.itemId = item.Key; roleItem.num = item.Value; list.Add(roleItem); } GameProxy.ReqUpdateRoleItems(list); _prepareDic.Clear(); } public static Dictionary GetItemDic() { return _dataDic; } public static void GetMainScore(int itemId, out int mainScore, out int mainScoreValue) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); //五个属性中最大的为主属性 mainScore = 1; mainScoreValue = 0; if (itemCfg.score1 > mainScoreValue) { mainScoreValue = itemCfg.score1; mainScore = 1; } if (itemCfg.score2 > mainScoreValue) { mainScoreValue = itemCfg.score2; mainScore = 2; } if (itemCfg.score3 > mainScoreValue) { mainScoreValue = itemCfg.score3; mainScore = 3; } if (itemCfg.score4 > mainScoreValue) { mainScoreValue = itemCfg.score4; mainScore = 4; } } public static int GetItemScoreValue(int itemId, int scoreType) { ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(itemId); if (scoreType == 1) { return itemCfg.score1; } else if (scoreType == 2) { return itemCfg.score2; } else if (scoreType == 3) { return itemCfg.score3; } else if (scoreType == 4) { return itemCfg.score4; } return 0; } } }