using System.Collections.Generic; using Common.Utility.CombatEvent; using Core.Utility; using Fort23.Core; using Utility; namespace GameLogic.Bag { public class BagController : Singleton { /// /// 玩家的所有道具(包含货币) /// private List m_bagList = new List(); /// /// 外部访问用 /// public List BagList => m_bagList; public void Init() { foreach (var itemData in AccountFileInfo.Instance.playerData.ItemListData) { m_bagList.Add(new ItemInfo(itemData)); } } #region 快速添加和扣除常用道具 /// /// 加金币 /// /// public void AddCoin(long count) { AddItem(GlobalParam.Item_Coin_ID, count); } /// /// 扣金币 /// /// public bool DeductCoin(long count) { return DeductItem(GlobalParam.Item_Coin_ID, count); } /// /// 加钻石 /// /// public void AddDiamond(long count) { AddItem(GlobalParam.Item_Diamond_ID, count); } /// /// 扣钻石 /// /// public bool DeductDiamond(long count) { return DeductItem(GlobalParam.Item_Diamond_ID, count); } /// /// 加英雄经验 /// /// public void AddHeroExp(long count) { AddItem(GlobalParam.Item_HeroExp_ID, count); } /// /// 扣英雄经验 /// /// public bool DuctHeroExp(long count) { return DeductItem(GlobalParam.Item_HeroExp_ID, count); } /// /// 道具是否足够 /// /// /// /// public bool IsEnough(ItemInfo item, long count) { if (item.config.ID <= 0) { return false; } if (item.count >= count) { return true; } else { return false; } } /// /// 道具是否足够 /// /// /// /// public bool IsEnough(int itemId, long count) { ItemInfo item = GetItemInfo(itemId); return IsEnough(item, count); } #endregion public bool AddItem(int itemId, long count) { ItemInfo item = GetItemInfo(itemId); return AddItem(item, count); } public bool AddItem(ItemInfo item, long count) { if (item.config.ID <= 0) { return false; } item.count += count; EventManager.Instance.Dispatch(CustomEventType.ItemUpdate, new ItemUpdateData() {ItemInfo = item}); return true; } public bool DeductItem(ItemInfo item, long count) { if (item.config.ID <= 0) { return false; } if (item.count >= count) { item.count -= count; } else { return false; } EventManager.Instance.Dispatch(CustomEventType.ItemUpdate, new ItemUpdateData() {ItemInfo = item}); AccountFileInfo.Instance.SaveItemData(item); return true; } public bool DeductItem(int itemId, long count) { ItemInfo item = GetItemInfo(itemId); return DeductItem(item, count); } public ItemInfo GetItemInfo(int itemId) { for (int i = 0; i < m_bagList.Count; i++) { ItemInfo item = m_bagList[i]; if (item.ID == itemId) { return item; } } ItemInfo newItem = new ItemInfo(itemId); if (newItem.config.ID > 0) { m_bagList.Add(newItem); } return newItem; } } }