using vnxbqy.UI; using System; using System.Collections.Generic; using UnityEngine.UI; using System.Linq; using LitJson; public class ManyDayRechargeModel : ILModel { 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 playerRecharges = new List(); //玩家的充值情况 List playerAwardState = new List(); public List rechargeList = new List(); //活动可参与的充值档次 //价格档位:红点 Dictionary titleRedpoints = new Dictionary(); 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(package.DayRechargeValues); playerAwardState = new List(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); } }