using System; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace vnxbqy.UI { public class AddUpRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk { Dictionary>> m_AddUpItems = new Dictionary>>(); public readonly Redpoint redpoint = new Redpoint(333); public uint rewardRecord { get; private set; } public event Action onRewardRecordUpdate; VipModel vipModel { get { return ModelCenter.Instance.GetModel(); } } public override void Init() { ParseConfig(); PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshEvent; } public void OnBeforePlayerDataInitialize() { } public void OnPlayerLoginOk() { UpdateRedpoint(); } public override void UnInit() { PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshEvent; } void ParseConfig() { var configs = AddUpRechargeConfig.GetValues(); foreach (var config in configs) { m_AddUpItems[config.RewardID] = new Dictionary>(); var dict = m_AddUpItems[config.RewardID]; var json = LitJson.JsonMapper.ToObject(config.Reward); foreach (var jobKey in json.Keys) { var job = int.Parse(jobKey); dict[job] = new List(); var itemArray = LitJson.JsonMapper.ToObject(json[jobKey].ToJson()); for (int i = 0; i < itemArray.Length; i++) { dict[job].Add(new Item() { id = itemArray[i][0], count = itemArray[i][1], quality = itemArray[i].Length > 2 ? itemArray[i][2] : 0, }); } } } } private void PlayerDataRefreshEvent(PlayerDataType dataType) { if (dataType == PlayerDataType.VIPLv || dataType == PlayerDataType.ChangeCoinPointTotal) { UpdateRedpoint(); } } public bool TryGetItems(int id,out List items) { items = null; if (m_AddUpItems.ContainsKey(id)) { m_AddUpItems[id].TryGetValue(PlayerDatas.Instance.baseData.Job, out items); } return false; } public void ReceivePackage(HA328_tagMCHistoryReChargeAwardRecord package) { rewardRecord = package.AwardGetRecord; if (onRewardRecordUpdate != null) { onRewardRecordUpdate(); } UpdateRedpoint(); } public bool SatisfyAnyVipLevel() { var configs = AddUpRechargeConfig.GetValues(); foreach (var config in configs) { if (PlayerDatas.Instance.baseData.VIPLv >= config.VIPLimit) { return true; } } return false; } public int GetAddUpRechargeState(int id) { if (MathUtility.GetBitValue(rewardRecord, (ushort)id)) { return 1; } var config = AddUpRechargeConfig.Get(id); if (PlayerDatas.Instance.baseData.VIPLv < config.VIPLimit) { return -1; } if (PlayerDatas.Instance.baseData.coinTotal < config.Recharge) { return -1; } return 0; } public void SendGetReward(int id) { CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward(); pak.RewardType = (byte)GotServerRewardType.Def_RewardType_HistoryChargeAward; pak.DataEx = (uint)id; pak.DataExStrLen = 0; pak.DataExStr = string.Empty; GameNetSystem.Instance.SendInfo(pak); } public void UpdateRedpoint() { var isOpen = SatisfyAnyVipLevel(); var configs = AddUpRechargeConfig.GetValues(); var redable = false; foreach (var config in configs) { if (isOpen && GetAddUpRechargeState(config.RewardID) == 0) { redable = true; } } redpoint.state = redable ? RedPointState.Simple : RedPointState.None; } public bool IsCompleteAll() { var isOpen = SatisfyAnyVipLevel(); var configs = AddUpRechargeConfig.GetValues(); foreach (var config in configs) { if (isOpen && GetAddUpRechargeState(config.RewardID) != 1) { return false; } } return isOpen ? true:false; } } }