using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace GFGGame { public class LuckyBoxDataManager : SingletonBase { public const int BOX_ID_1 = 1; public const int BOX_ID_2 = 2; public const int BOX_ID_3 = 3; public const int ONCE_TIME = 1; public const int TEN_TIME = 10; private List _rewardsList;//当前奖励,每次抽奖后刷新 private Dictionary _firstRewardsList = new Dictionary();//首次获得的奖励 public string probShow; private List _showList; public int[] luckyBoxIds = new int[] { 2, 3 };//奖池列表 public int startTime = 1635157620; public int endTime = 1704038400; public int times = 0; public int luckyBoxId; public List RewardList { get { return _rewardsList; } set { _rewardsList = value; _firstRewardsList.Clear(); int dicIndex = 0; foreach (ItemData itemData in _rewardsList) { if (ItemDataManager.GetItemNum(itemData.id) == 1) { _firstRewardsList.Add(dicIndex, itemData); } dicIndex++; } } } public Dictionary FirstRewardList { get { return _firstRewardsList; } set { _firstRewardsList = value; } } private int _currentBoxId; public int currentBoxId { get { return _currentBoxId; } set { if (_currentBoxId != value) { _currentBoxId = value; InitData(_currentBoxId); } } } private void InitData(int boxId) { LuckyBoxCfg luckyBoxCfg = LuckyBoxCfgArray.Instance.GetCfg(boxId); probShow = luckyBoxCfg.probShow; _showList = GetBonusDataList(luckyBoxCfg.bonusShowArr); } private List GetBonusDataList(int[] idsList) { List list = new List(); foreach (int id in idsList) { BonusListCfg bonusListCfg = BonusListCfgArray.Instance.GetCfg(id); LuckyBoxBonusData luckyBoxBonusData = new LuckyBoxBonusData(); luckyBoxBonusData.id = id; luckyBoxBonusData.name = bonusListCfg.name; luckyBoxBonusData.itemList = ItemUtil.CreateItemDataList(bonusListCfg.bonusListArr); list.Add(luckyBoxBonusData); } return list; } public int GetOwnedCount() { int count = 0; foreach (LuckyBoxBonusData luckyBoxBonusData in _showList) { foreach (ItemData itemData in luckyBoxBonusData.itemList) { if (ItemDataManager.GetItemNum(itemData.id) > 0) { count++; } } } return count; } public List GetCurrentShowList() { return _showList.GetRange(0, _showList.Count); } //获取首次获得的服装的列表 public List GetFirstClothingList() { ItemData[] cardArray = new ItemData[LuckyBoxDataManager.Instance.FirstRewardList.Count]; LuckyBoxDataManager.Instance.FirstRewardList.Values.CopyTo(cardArray, 0); List cardList = new List(cardArray); return cardList; } public void CheckItemEnough(int boxId, int times, Action onSuccess) { int costId = LuckyBoxCfgArray.Instance.GetCfg(boxId).costID; ItemCfg itemCfg = ItemCfgArray.Instance.GetCfg(costId); int costNum = GetCostNum(boxId, times); int hasNum = ItemDataManager.GetItemNum(itemCfg.id); if (hasNum >= costNum) { AlertUI.Show(string.Format("是否花费{0}个{1}摘星{2}次?", costNum, itemCfg.name, times)).SetLeftButton(true).SetRightButton(true, "确定", (object data) => { onSuccess(); }); } else { int needNum = costNum - hasNum; // ItemExchangeCfgArray.Instance.GetMoneyIdAndNum(costId, ItemDataManager.GetItemExchangeTimes(costId), times, out int costItemId, out int costItemNeedNum, out int buyNum); ItemExchangeCfg itemExchangeCfg = ItemExchangeCfgArray.Instance.GetCfg(costId); int exchangedTimes = ItemDataManager.GetItemExchangeTimes(costId); int costItemNeedNum = 0; int costbuyNum = 0; int buyNum = 0; for (var i = exchangedTimes + 1; i <= exchangedTimes + times; i++) { ItemExchangeCfgArray.Instance.GetCostAndBuyNum(itemExchangeCfg, i, out int _costNum, out int _buyNum); costItemNeedNum += _costNum; costbuyNum += _buyNum; buyNum += itemExchangeCfg.num; if (buyNum >= needNum) break; } int costHasNum = ItemDataManager.GetItemNum(itemExchangeCfg.costId); if (costHasNum >= costItemNeedNum)//购买消耗品的道具足够,提示购买 { if (costId == ConstItemID.GOLD) { ItemUtil.ExchangeItemById(costId, needNum, false, onSuccess); } else { BuyTipsController.Show(costId, needNum, onSuccess); } } else//购买消耗品的道具不足,提示购买 购买消耗品的道具 { ItemUtil.ExchangeItemById(itemExchangeCfg.costId, costItemNeedNum - costHasNum, true, null, true, GameConst.MAX_COUNT_TO_BUY_DIAMOND_RED, true); } } } private int GetCostNum(int boxId, int times) { LuckyBoxCfg cfg = LuckyBoxCfgArray.Instance.GetCfg(boxId); if (times == LuckyBoxDataManager.ONCE_TIME) { return cfg.costNum; } else if (times == LuckyBoxDataManager.TEN_TIME) { return cfg.costNumTen; } return 0; } } }