using vnxbqy.UI; using System; using System.Collections.Generic; using System.Linq; using System.Text; using UnityEngine; public class BuyItemController : Singleton { Dictionary vipBuyCntDict = new Dictionary(); public bool CheckIsVipBuy(StoreConfig model, out int curVipIndex, out int nextVipIndex) { vipBuyCntDict.Clear(); curVipIndex = -1; nextVipIndex = -1; bool isVipBuy = false; if (model == null) return isVipBuy; if (model.VIPLV.Length < 2) { if (model.VIPLV[0] != 0) { isVipBuy = true; } else { isVipBuy = false; } } else { isVipBuy = true; } if (isVipBuy) { for (int i = model.VIPLV.Length - 1; i > -1; i--) { vipBuyCntDict.Add(model.VIPLV[i], model.GoumaiNumber[i]); } int playerVip = PlayerDatas.Instance.baseData.VIPLv; for (int i = model.VIPLV.Length - 1; i > -1; i--) { if (model.VIPLV[i] > playerVip) { nextVipIndex = i; } else if (model.VIPLV[i] <= playerVip) { curVipIndex = i; break; } } } return isVipBuy; } public bool CheckIsLimitBuyCnt(StoreConfig model, out int canBuyCnt, out int addBuyCnt) { canBuyCnt = 0; addBuyCnt = 0; if (model == null) return false; int[] canBuyNums = model.GoumaiNumber; int curVipIndex = -1; int nexVipIndex = -1; bool isVipBuy = CheckIsVipBuy(model, out curVipIndex, out nexVipIndex); if (isVipBuy) { if (curVipIndex != -1) { canBuyCnt = canBuyNums[curVipIndex]; } if (nexVipIndex != -1) { addBuyCnt = canBuyNums[nexVipIndex] - canBuyCnt; } return true; } else { if (canBuyNums[0] != 0) { canBuyCnt = canBuyNums[0]; return true; } else { return false; } } } public int goodId { get; private set; } public readonly LogicInt wannaBuyCount = new LogicInt(); StoreModel model { get { return ModelCenter.Instance.GetModel(); } } public void SetGood(int goodId) { this.goodId = goodId; wannaBuyCount.value = 1; } public void SetBuyCount(int goodId, int count) { var countLimit = GetBuyCountLimit(goodId, PlayerDatas.Instance.baseData.VIPLv); if (countLimit == -1) { wannaBuyCount.value = Mathf.Clamp(count, 1, 999); } else { wannaBuyCount.value = Mathf.Clamp(count, 1, countLimit); } } public bool IsVipLimitGood(int goodId) { var config = StoreConfig.Get(goodId); return config != null && config.VIPLV.Length > 1 && config.VIPLV[0] > 0; } /// /// 返回值为-1,表示没有vip限制,返回值为999表示已经没有下一个vip限制 /// /// /// /// public int GetNextCanbuyVipLevel(int goodId, int vipLevel) { if (!IsVipLimitGood(goodId)) { return -1; } var config = StoreConfig.Get(goodId); var nextLevel = 999; for (int i = 0; i < config.VIPLV.Length; i++) { if (config.VIPLV[i] > vipLevel) { nextLevel = config.VIPLV[i]; break; } } return nextLevel; } /// /// 返回值如果是-1,表示无限制 /// /// /// public int GetBuyCountLimit(int goodId, int vipLevel) { var config = StoreConfig.Get(goodId); if (config.GoumaiNumber.Length == 0 || config.GoumaiNumber[0] == 0) { return -1; } var isVipLimitGood = config != null && config.VIPLV.Length > 1; var canBuy = 0; if (isVipLimitGood) { var index = -1; for (var i = config.VIPLV.Length - 1; i >= 0; i--) { if (config.VIPLV[i] <= vipLevel) { index = i; break; } } if (index != -1) { canBuy = config.GoumaiNumber[index]; } else { canBuy = 0; } } else { canBuy = config.GoumaiNumber[0]; } var goodLimit = model.GetBuyShopLimit((uint)goodId); var haveBuy = goodLimit != null ? goodLimit.BuyCnt : 0; return canBuy - haveBuy; } public bool IsSellOut(int goodId, int vipLevel) { var limitCount = GetBuyCountLimit(goodId, vipLevel); return limitCount != -1 && limitCount <= 0; } public int GetTotalPrice(int goodId, int count) { var config = StoreConfig.Get(goodId); return config.MoneyNumber * count; } }