using LitJson;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
//包含任意充值界面和 多日充值界面的管理,第一档充值额度为1代表任意充值(配置国内是1元,境外是0.01美元,下发包都是1)
|
public class HolidayMultiRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
|
{
|
public const int redPointID = 28003; //任意充值界面
|
public Redpoint redpoint = new Redpoint(MainRedDot.RedPoint_HolidayWishes, redPointID);
|
public Redpoint multiRedpoint = new Redpoint(MainRedDot.RedPoint_HolidayWishes, 28011); //多日累充界面
|
public Operation operationType = Operation.HolidayMultiRecharge;
|
|
public List<int> holidayLabelOrder = new List<int>(); //节日界面的标签重排序显示 暂放在这里,删除需要转移
|
|
//节日祝福 id从101开始和精彩活动区分
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_JRZF;
|
public const int activityID = 111; //以多日充值界面为主
|
public bool IsOpen
|
{
|
get
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType);
|
}
|
}
|
|
public bool IsAdvance
|
{
|
get
|
{
|
return false;
|
}
|
}
|
|
public bool priorityOpen
|
{
|
get { return redpoint.state == RedPointState.Simple; }
|
}
|
|
public event Action accumulateRechargeUpdate;
|
public event Action<int> onStateUpdate;
|
|
public override void Init()
|
{
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
|
OpenServerActivityCenter.Instance.Register(activityID, this, activityType);
|
|
holidayLabelOrder = new List<int>(JsonMapper.ToObject<int[]>(FuncConfigConfig.Get("HolidayWishs").Numerical1));
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
rechargeTotal = 0;
|
getRewardRecord = 0;
|
}
|
|
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(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 uint rechargeTotal { get; private set; } //充值总额
|
public uint getRewardRecord { get; private set; } //领取记录
|
public uint ActNum { get; private set; } //累充类型 对应界面
|
public void UpdateAccumulateRecharge(HAA1C_tagMCTotalRechargePlayerInfo package)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
ActNum = package.ActNum;
|
rechargeTotal = 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;
|
}
|
|
// 累充中存在任意充值档位,独立界面处理,指定判断充值额度为0.01(requireGold=1)
|
// isAnyRecharge 判断是否任意充值档
|
public bool SatisfyGetReward(OperationAccumulateRecharge.Recharge recharge, bool isAnyRecharge = false)
|
{
|
if (!IsOpen)
|
{
|
return false;
|
}
|
if (IsRewardGot(recharge))
|
{
|
return false;
|
}
|
if (rechargeTotal >= recharge.requireGold)
|
{
|
if (isAnyRecharge == true && recharge.requireGold != 1)
|
{
|
//没有任意充值档位
|
return false;
|
}
|
|
return true;
|
}
|
return false;
|
}
|
|
//判断是否有任意档位
|
//累充中存在任意充值档位,独立界面处理,指定判断充值额度为0.01(requireGold=1)
|
public bool hasAnyRecharge()
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
|
var reward = operation.GetReward(TimeUtility.ServerNow);
|
if (reward != null)
|
{
|
if (reward.recharges.Count > 0)
|
{
|
var recharge = reward.recharges[0];
|
if (recharge.requireGold == 1)
|
return true;
|
}
|
}
|
}
|
|
return false;
|
}
|
|
|
public bool MoreRecharge()
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
|
var reward = operation.GetReward(TimeUtility.ServerNow);
|
if (reward != null)
|
{
|
if (reward.recharges.Count == 1)
|
{
|
var recharge = reward.recharges[0];
|
if (recharge.requireGold != 1)
|
return true;
|
}
|
|
if (reward.recharges.Count > 1)
|
{
|
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))
|
{
|
OperationAccumulateRecharge operation = operationBase as OperationAccumulateRecharge;
|
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 void UpdateRedpoint()
|
{
|
redpoint.state = RedPointState.None;
|
multiRedpoint.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 (i == 0)
|
{
|
//任意充值单独界面红点
|
if (SatisfyGetReward(recharge, true))
|
{
|
redpoint.state = RedPointState.Simple;
|
}
|
}
|
//累计充值界面红点
|
if (recharge.requireGold != 1 && SatisfyGetReward(recharge))
|
{
|
multiRedpoint.state = RedPointState.Simple;
|
break;
|
}
|
}
|
}
|
}
|
}
|
#endregion
|
}
|
}
|