using System; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class HolidayLoginModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity { public event Action onStateUpdate; public const int redPointID = 28001; public Redpoint redPoint = new Redpoint(MainRedDot.RedPoint_HolidayWishes, redPointID); private uint LoginState; //活动期间的登录状态 private uint LoginAwardState; //领取状态 //节日祝福 id从101开始和精彩活动区分 public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_JRZF; public const int activityID = 101; public int selectIndex = 0; //被选中的天 public event Action UpdateHolidayLogin; //节日登录 public override void Init() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent; OpenServerActivityCenter.Instance.Register(activityID, this, activityType); } public void OnBeforePlayerDataInitialize() { } public void OnPlayerLoginOk() { } public override void UnInit() { } public bool IsOpen { get { return OperationTimeHepler.Instance.SatisfyOpenCondition(Operation.HolidayLogin); } } public bool priorityOpen { get { return redPoint.state == RedPointState.Simple; } } public bool IsAdvance { get { return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.HolidayLogin); } } private void OperationEndEvent(Operation type, int state) { if (type == Operation.HolidayLogin && state == 0) { if (onStateUpdate != null) { onStateUpdate(activityID); } UpdateRedpoint(); } } private void OperationAdvanceEvent(Operation type) { if (type == Operation.HolidayLogin) { if (onStateUpdate != null) { onStateUpdate(activityID); } } } private void OperationStartEvent(Operation type, int state) { if (type == Operation.HolidayLogin && state == 0) { if (onStateUpdate != null) { onStateUpdate(activityID); } } } //0 不可领取 1 可领取 2 已领取 public int GetLoginAwardState(int day) { //校验登录 if (((int)Math.Pow(2, day - 1) & LoginState) == 0) { return 0; } if (((int)Math.Pow(2, day - 1) & LoginAwardState) == 0) { return 1; } return 2; } void UpdateRedpoint() { OperationHolidayLogin holiday; OperationTimeHepler.Instance.TryGetOperation(Operation.HolidayLogin, out holiday); redPoint.state = RedPointState.None; if (holiday == null) return; //封包顺序如果有问题 此处为空 for (int i = 0; i < holiday.loginAwards.Count; i++) { if (GetLoginAwardState(holiday.loginAwards[i].DayNum) == 1) { redPoint.state = RedPointState.Simple; return; } } } public void UpdateLoginInfo(HAA39_tagMCFeastLoginPlayerInfo netPack) { LoginState = netPack.LoginState; LoginAwardState = netPack.LoginAward; if (UpdateHolidayLogin != null) UpdateHolidayLogin(); UpdateRedpoint(); } public void SendGetAward(uint day) { CA504_tagCMPlayerGetReward getReward = new CA504_tagCMPlayerGetReward(); getReward.RewardType = (byte)GotServerRewardType.Def_RewardType_HolidayLogin; getReward.DataEx = day; getReward.DataExStrLen = 0; getReward.DataExStr = string.Empty; GameNetSystem.Instance.SendInfo(getReward); } } }