using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
public class AddUpRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk
|
{
|
Dictionary<int, Dictionary<int, List<Item>>> m_AddUpItems = new Dictionary<int, Dictionary<int, List<Item>>>();
|
|
public readonly Redpoint redpoint = new Redpoint(333);
|
|
public uint rewardRecord { get; private set; }
|
|
public event Action onRewardRecordUpdate;
|
|
VipModel vipModel { get { return ModelCenter.Instance.GetModel<VipModel>(); } }
|
|
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<int, List<Item>>();
|
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<Item>();
|
var itemArray = LitJson.JsonMapper.ToObject<int[][]>(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<Item> 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.coinPointTotal < 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;
|
}
|
|
}
|
}
|