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
}