using vnxbqy.UI;
|
using System;
|
using System.Collections.Generic;
|
using UnityEngine.UI;
|
using System.Linq;
|
using LitJson;
|
|
public class ManyDayRechargeModel : ILModel<ManyDayRechargeModel>
|
{
|
public ILOpenServerActivityProxy activity;
|
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_JCHD;
|
//精彩活动表中的ID
|
public const int activityID = 32;
|
public const Operation operationType = Operation.default1; //多日连充
|
|
List<uint> playerRecharges = new List<uint>(); //玩家的充值情况
|
List<uint> playerAwardState = new List<uint>();
|
public List<int> rechargeList = new List<int>(); //活动可参与的充值档次
|
|
//价格档位:红点
|
Dictionary<int, Redpoint> titleRedpoints = new Dictionary<int, Redpoint>();
|
public const int redpointID = 20932;
|
public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, redpointID);
|
public event Action onSelectUpdate;
|
public event Action onRechargeInfoUpdate;
|
|
|
//连充档位 价格
|
int m_SelectType = 0;
|
public int selectType
|
{
|
get { return m_SelectType; }
|
set
|
{
|
if (m_SelectType != value)
|
{
|
m_SelectType = value;
|
if (onSelectUpdate != null)
|
{
|
onSelectUpdate();
|
}
|
}
|
}
|
}
|
|
|
|
|
|
protected override void Init()
|
{
|
GameEvent.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent;
|
activity = new ILOpenServerActivityProxy(IsOpen, IsAdvance, priorityOpen);
|
OpenServerActivityCenter.Instance.Register(activityID, activity, activityType);
|
}
|
|
protected override void UnInit()
|
{
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent;
|
GameEvent.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
|
}
|
|
public bool IsOpen()
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType);
|
}
|
|
public bool IsAdvance()
|
{
|
return false;
|
}
|
|
public bool priorityOpen()
|
{
|
//红点
|
return redpoint.state == RedPointState.Simple;
|
}
|
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
playerRecharges.Clear();
|
playerAwardState.Clear();
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
|
}
|
|
public void UpdateManyRechargePlayerInfo(IL_HAA49_tagMCActManyDayRechargePlayerInfo package)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationManyDayRecharge operation = operationBase as OperationManyDayRecharge;
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
|
playerRecharges = new List<uint>(package.DayRechargeValues);
|
playerAwardState = new List<uint>(package.AwardRecord);
|
|
UpdateRedpoint();
|
|
onRechargeInfoUpdate?.Invoke();
|
|
}
|
|
|
public int GetSelectType()
|
{
|
var keyList = titleRedpoints.Keys.ToList();
|
for (int i = 0; i < keyList.Count; i++)
|
{
|
var type = keyList[i];
|
if (titleRedpoints[type].state == RedPointState.Simple)
|
{
|
return type;
|
}
|
}
|
|
return rechargeList[0];
|
}
|
|
public int jumpIndex {
|
get { return rechargeList.IndexOf(selectType); }
|
}
|
|
|
|
private void operationTimeUpdateEvent(Operation type)
|
{
|
if (type == operationType)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationManyDayRecharge operation = operationBase as OperationManyDayRecharge;
|
|
//用于排版和红点
|
rechargeList = operation.drlcInfoDict.Keys.ToList();
|
rechargeList.Sort();
|
titleRedpoints.Clear();
|
for (int i = 0; i < rechargeList.Count; i++)
|
{
|
titleRedpoints.Add(rechargeList[i], new Redpoint(redpointID, redpointID * 100 + i));
|
}
|
|
UpdateRedpoint();
|
}
|
}
|
|
//获取指定档位连充几天,判断充值大小
|
public int GetRechargeDayCnt(int NeedRecharge)
|
{
|
int days = 0;
|
|
for (int i = 0; i < playerRecharges.Count; i++)
|
{
|
if (playerRecharges[i] >= NeedRecharge)
|
{
|
days++;
|
}
|
}
|
return days;
|
}
|
|
//获取档位状态 0未达成,1可领取,2已领取
|
public int GetRechargeStateByIndex(int NeedRecharge, int NeedDays, int AwardIndex)
|
{
|
if (NeedDays > GetRechargeDayCnt(NeedRecharge))
|
return 0;
|
|
//每个数按位存31个激活索引
|
var listIndex = AwardIndex / 31;
|
var bitIndex = AwardIndex % 31;
|
if (((int)Math.Pow(2, bitIndex) & playerAwardState[listIndex]) == 0)
|
{
|
return 1;
|
}
|
|
return 2;
|
}
|
|
void UpdateRedpoint()
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
return;
|
}
|
OperationManyDayRecharge operation = operationBase as OperationManyDayRecharge;
|
|
var keyList = titleRedpoints.Keys.ToList();
|
for (int i = 0; i < keyList.Count; i++)
|
{
|
titleRedpoints[keyList[i]].state = RedPointState.None;
|
var rechargeList = operation.drlcInfoDict[keyList[i]];
|
for (int j = 0; j < rechargeList.Count; j++)
|
{
|
if (GetRechargeStateByIndex(keyList[i], rechargeList[j].NeedDays, rechargeList[j].AwardIndex) == 1)
|
{
|
titleRedpoints[keyList[i]].state = RedPointState.Simple;
|
}
|
}
|
}
|
}
|
|
|
public void SendGetReward(int awardIndex, int actNumd)
|
{
|
var pak = new IL_CA504_tagCMPlayerGetReward();
|
pak.RewardType = 41;
|
pak.DataEx = (uint)awardIndex;
|
pak.DataExStr = actNumd.ToString();
|
pak.DataExStrLen = (byte)actNumd.ToString().Length;
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
|
}
|