using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; namespace vnxbqy.UI { public class SingleRechargeSumModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { const int activityID = 38; public const Operation operType = Operation.default28; public bool IsOpen { get { return OperationTimeHepler.Instance.SatisfyOpenCondition(operType); } } public bool IsAdvance { get { return false; } } public bool priorityOpen { get { return redpoint.state == RedPointState.Simple; } } public event Action accumulateRechargeUpdate; public event Action onStateUpdate; public override void Init() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; OpenServerActivityCenter.Instance.Register(activityID, this); } public void OnBeforePlayerDataInitialize() { awardStateInfo.Clear(); } public void OnPlayerLoginOk() { UpdateRedpoint(); } public override void UnInit() { OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; } private void DayResetEvent(int resetType) { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(operType, out operationBase)) { if (resetType == operationBase.resetType) { UpdateRedpoint(); } } } private void OperationEndEvent(Operation operationType, int state) { if (operationType == operType && state == 0) { UpdateRedpoint(); if (onStateUpdate != null) { onStateUpdate(activityID); } } } private void OperationStartEvent(Operation operationType, int state) { if (operationType == operType && state == 0) { UpdateRedpoint(); if (onStateUpdate != null) { onStateUpdate(activityID); } } } #region 服务端数据 Dictionary awardStateInfo = new Dictionary(); public uint ActNum { get; private set; } public void UpdateSingleRecharge(HAA51_tagMCActSingleRechargePlayerInfo package) { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(operType, out operationBase)) { OperationSingleRecharge operation = operationBase as OperationSingleRecharge; if (operation.ActNum != package.ActNum) { return; } ActNum = package.ActNum; for (int i = 0; i < package.AwardRecordList.Length; i++) { awardStateInfo[package.AwardRecordList[i].AwardIndex] = new Int2(package.AwardRecordList[i].CanGetCount, package.AwardRecordList[i].GetCount); } UpdateRedpoint(); if (accumulateRechargeUpdate != null) { accumulateRechargeUpdate(); } } } bool IsRewardGot(int index) { return awardStateInfo[index].y >= GetMaxRewardCnt(index); } bool CanRewardGet(int index) { return awardStateInfo[index].x > awardStateInfo[index].y; } public int GetRewardGotCnt(int index) { return awardStateInfo[index].y; } public int GetCanRewardGetCnt(int index) { return awardStateInfo[index].x; } public int GetMaxRewardCnt(int index) { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(SingleRechargeSumModel.operType, out operationBase)) { OperationSingleRecharge operation = operationBase as OperationSingleRecharge; return operation.awardMaxCount[index].x; } return 0; } //0 未达标 1 可领取 2 已领取 public int GetRewardState(int index) { if (!IsOpen) { return 0; } if (IsRewardGot(index)) { return 2; } if (CanRewardGet(index)) { return 1; } return 0; } public void SendGetReward(int index) { OperationBase operationBase; if (!OperationTimeHepler.Instance.InOperationTime(operType)) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } if (OperationTimeHepler.Instance.TryGetOperationTime(operType, out operationBase)) { OperationSingleRecharge operation = operationBase as OperationSingleRecharge; if (GetRewardState(index) != 1) { return; } CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward(); pak.RewardType = 43; pak.DataEx = (uint)index; pak.DataExStrLen = (byte)ActNum.ToString().Length; pak.DataExStr = ActNum.ToString(); GameNetSystem.Instance.SendInfo(pak); } } #endregion #region 红点 public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20900 + activityID); public void UpdateRedpoint() { redpoint.state = RedPointState.None; if (!IsOpen) { return; } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(operType, out operationBase)) { OperationSingleRecharge operation = operationBase as OperationSingleRecharge; var count = operation.singleRechargeAwards.Keys.Count; for (int i = 0; i < count; i++) { if (GetRewardState(i) == 1) { redpoint.state = RedPointState.Simple; break; } } } } #endregion } }