using System; using System.Collections.Generic; namespace vnxbqy.UI { //充值自选功能 public class CustomizedRechargeModel : Model { public const int MaxGridCount = 4; //最多4个可选格子 //用户选择面板 public int chooseWinIndex = 0; //用户选择面板 当前选中的格子(自选位索引) public int chooseCTGID = 0; //用户选择面板 当前选中的礼包id public Dictionary chooseIndexDict = new Dictionary(); //用户在选择面板中已选中物品栏中的索引 public Action UpdateWin; VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { } public override void UnInit() { } //自选礼包 物品信息 //count为固定的数量,sumCount包含自选格子总数量不管是否已选 public bool TryGetRechargeItemEx(int ctgId, out List items, out int count, out int sumCount) { count = 0; sumCount = 0; items = new List(); List awards = new List(); if (!vipModel.TryGetRechargeItem(ctgId, out awards)) return false; VipModel.RechargeCount rechargeCount; if (!vipModel.TryGetRechargeCount(ctgId, out rechargeCount)) { return false; } count = awards.Count; for (int i = 0; i < awards.Count; i++) { items.Add(awards[i]); } var selectItemInfo = CTGConfig.Get(ctgId).SelectItemInfo; if (selectItemInfo != null && selectItemInfo.Length != 0) { sumCount = selectItemInfo.Length + items.Count; var selectedItemIndexs = ModelCenter.Instance.GetModel().GetSelectedItems(rechargeCount.selectItemValue); //自选 for (int j = 0; j < selectedItemIndexs.Count; j++) { int selectID = selectItemInfo[j][selectedItemIndexs[j] - 1]; items.Add(new Item(CTGSelectItemConfig.Get(selectID).ItemID, CTGSelectItemConfig.Get(selectID).ItemCount)); } } else { sumCount = count; } return true; } //约定最多4个可选, 只有全选和未选两种状态 public List GetSelectedItems(int SelectItemValue) { if (SelectItemValue <= 0) return new List(); var list = new List(); for (int i = 0; i < MaxGridCount; i++) { int itemIndex = (int)(SelectItemValue % 100); if (itemIndex == 0) break; SelectItemValue /= 100; list.Add(itemIndex); } return list; } public uint GetSelectedItemValue() { uint SelectItemValue = 0; for (int i = 0; i < MaxGridCount; i++) { if (chooseIndexDict.ContainsKey(i)) { SelectItemValue += (uint)(chooseIndexDict[i] * Math.Pow(100, i)); } } return SelectItemValue; } public void InitChoose() { VipModel.RechargeCount rechargeCount; vipModel.TryGetRechargeCount(chooseCTGID, out rechargeCount); var selectedItemIndexs = ModelCenter.Instance.GetModel().GetSelectedItems(rechargeCount.selectItemValue); if (selectedItemIndexs.Count == 0) { chooseIndexDict.Clear(); return; } for (int i = 0; i < selectedItemIndexs.Count; i++) { chooseIndexDict[i] = selectedItemIndexs[i]; } } //0 未选中,从1开始 public int GetChooseSubIndex(int index) { if (chooseIndexDict.ContainsKey(index)) return chooseIndexDict[index]; return 0; } public void ShowUIItems(List itemCells, int ctgID) { int goodsCount; //固定商品种类数量 int goodsSumCount; //商品总数量 List awards = new List(); TryGetRechargeItemEx(ctgID, out awards, out goodsCount, out goodsSumCount); VipModel.RechargeCount rechargeCount; vipModel.TryGetRechargeCount(ctgID, out rechargeCount); for (int i = 0; i < itemCells.Count; i++) { if (i < goodsSumCount) { itemCells[i].SetActive(true); int index = i; if (i < awards.Count) { var award = awards[i]; var itemData = new ItemCellModel(award.id, false, (ulong)award.count); itemCells[i].Init(itemData); itemCells[i].button.SetListener(() => { if (index < goodsCount) ItemTipUtility.Show(award.id); else { //可自选 chooseWinIndex = index - goodsCount; chooseCTGID = ctgID; WindowCenter.Instance.Open(); } }); } else { itemCells[i].Init(null); itemCells[i].button.SetListener(() => { chooseWinIndex = index - goodsCount; chooseCTGID = ctgID; WindowCenter.Instance.Open(); }); } } else { itemCells[i].SetActive(false); } } } } }