using vnxbqy.UI; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 合服-累充 /// public class MergeServerRechargeModel : ILModel { public ILOpenServerActivityProxy activity; public Operation operationType = Operation.default8; public const int activityID = 1; public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_HFHD; public bool IsOpen() { return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType); } public bool IsAdvance() { return false; } public bool priorityOpen() { //红点 return redpoint.state == RedPointState.Simple; } public event Action onStateUpdate; //已兑换的记录 编号:已兑换次数 PackModel packModel { get { return ModelCenter.Instance.GetModelEx(); } } protected override void Init() { OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent += DayResetEvent; GameEvent.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize; GameEvent.playerLoginOkEvent += OnPlayerLoginOk; activity = new ILOpenServerActivityProxy(IsOpen, IsAdvance, priorityOpen); OpenServerActivityCenter.Instance.Register(activityID, activity, activityType); } public void OnBeforePlayerDataInitialize() { rechargeTotal = 0; getRewardRecord = 0; } public void OnPlayerLoginOk() { UpdateRedpoint(); } protected override void UnInit() { OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent; GameEvent.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize; GameEvent.playerLoginOkEvent -= OnPlayerLoginOk; } public event Action accumulateRechargeUpdate; private void DayResetEvent(int resetType) { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase)) { if (resetType == operationBase.resetType) { UpdateRedpoint(); } } } private void OperationEndEvent(Operation operation, int state) { if (operation == operationType && state == 0) { UpdateRedpoint(); if (onStateUpdate != null) { onStateUpdate(activityID); } } } private void OperationStartEvent(Operation operation, int state) { if (operation == operationType && state == 0) { UpdateRedpoint(); if (onStateUpdate != null) { onStateUpdate(activityID); } } } #region 服务端数据 public float rechargeTotal { get; private set; } //充值总额 public uint getRewardRecord { get; private set; } //领取记录 public uint ActNum = 20; //累充类型 对应界面 public void UpdateAccumulateRecharge(HAA1C_tagMCTotalRechargePlayerInfo package) { OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase)) { OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge; if (ActNum != package.ActNum) { return; } rechargeTotal = UIHelper.GetRealCoin((int)package.GoldTotal); getRewardRecord = package.AwardRecord; UpdateRedpoint(); if (accumulateRechargeUpdate != null) { accumulateRechargeUpdate(); } } } //判断是否已领取 public bool IsRewardGot(OperationAccumulateRecharge.Recharge recharge) { if (recharge != null) { return IsRewardGot(recharge.index); } return false; } bool IsRewardGot(int index) { return (getRewardRecord & (1 << index)) != 0; } //是否可领取 public bool SatisfyGetReward(OperationAccumulateRecharge.Recharge recharge) { if (!IsOpen()) { return false; } if (IsRewardGot(recharge)) { return false; } if (rechargeTotal >= recharge.requireGold) { return true; } return false; } //领取奖励封包 public void GetAccumulateRechargeReward(OperationAccumulateRecharge.Recharge recharge) { OperationBase operationBase; if (!OperationTimeHepler.Instance.InOperationTime(operationType)) { SysNotifyMgr.Instance.ShowTip("ActiveOutTime"); return; } if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase)) { if (IsRewardGot(recharge.index)) { return; } else if (rechargeTotal < recharge.requireGold) { return; } CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward(); pak.RewardType = (byte)GotServerRewardType.Def_RewardType_TotalRecharge; pak.DataEx = (uint)recharge.index; pak.DataExStrLen = (byte)ActNum.ToString().Length; pak.DataExStr = ActNum.ToString(); GameNetSystem.Instance.SendInfo(pak); } } #endregion #region 红点 public Redpoint redpoint = new Redpoint(MainRedPoint.hfhdRedPoint, MainRedPoint.hfhdRedPoint * 100 + activityID); public void UpdateRedpoint() { redpoint.state = RedPointState.None; if (!IsOpen()) { return; } OperationBase operationBase; if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase)) { OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge; var reward = operation.GetReward(TimeUtility.ServerNow); if (reward != null) { for (int i = 0; i < reward.recharges.Count; i++) { var recharge = reward.recharges[i]; //累计充值界面红点 if (SatisfyGetReward(recharge)) { redpoint.state = RedPointState.Simple; break; } } } } } #endregion }