using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 双倍 (多倍充值)
///
namespace vnxbqy.UI
{
public class MultiRechargeModel : Model, IBeforePlayerDataInitialize, IPlayerLoginOk, IOpenServerActivity
{
Operation multiRechargeType = Operation.MultiRecharge;
int regesitType = 24;
public bool IsOpen
{
get
{
return OperationTimeHepler.Instance.SatisfyOpenCondition(multiRechargeType);
}
}
public bool IsAdvance
{
get
{
return false;
}
}
public bool priorityOpen
{
get { return redpoint.state == RedPointState.Simple; }
}
public event Action MultiRechargeUpdate;
public event Action onStateUpdate;
public override void Init()
{
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
OpenServerActivityCenter.Instance.Register(regesitType, this);
}
public void OnBeforePlayerDataInitialize()
{
multiRechargeDict.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(multiRechargeType, out operationBase))
{
if (resetType == operationBase.resetType)
{
UpdateRedpoint();
}
}
}
private void OperationEndEvent(Operation operationType, int state)
{
if (operationType == multiRechargeType && state == 0)
{
UpdateRedpoint();
if (onStateUpdate != null)
{
onStateUpdate(regesitType);
}
}
}
private void OperationStartEvent(Operation operationType, int state)
{
if (operationType == multiRechargeType && state == 0)
{
UpdateRedpoint();
if (onStateUpdate != null)
{
onStateUpdate(regesitType);
}
}
}
#region 服务端数据
public Dictionary multiRechargeDict = new Dictionary();
public void UpdateMultiRecharge(HAA28_tagMCRechargePrizePlayerInfo package)
{
for (int i = 0; i < package.Count; i++)
{
multiRechargeDict[package.PlayerInfoList[i].CTGID] = package.PlayerInfoList[i].PrizeCount;
}
UpdateRedpoint();
if (MultiRechargeUpdate != null)
{
MultiRechargeUpdate();
}
}
//是否有多倍充值
public bool isFirstRechageActiveByCTGID(int ctgID)
{
if (!IsOpen)
{
return false;
}
OperationBase operationBase;
if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
{
OperationMultiRecharge multiOP = operationBase as OperationMultiRecharge;
var reward = multiOP.GetReward(TimeUtility.ServerNow);
if (reward != null)
{
for (int i = 0; i < reward.recharges.Count; i++)
{
var recharge = reward.recharges[i];
if (recharge.CTGID == ctgID)
{
if (multiRechargeDict.ContainsKey(ctgID) && multiRechargeDict[ctgID] < recharge.PrizeCountLimit)
{
return true;
}
}
}
}
}
return false;
}
//首充返利仙玉金额,外部调用根据金额地板除获得倍数
public int GetFirstRechageNumByCTGID(int ctgID)
{
if (!IsOpen)
{
return 0;
}
OperationBase operationBase;
if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
{
OperationMultiRecharge multiOP = operationBase as OperationMultiRecharge;
var reward = multiOP.GetReward(TimeUtility.ServerNow);
if (reward != null)
{
for (int i = 0; i < reward.recharges.Count; i++)
{
var recharge = reward.recharges[i];
if (recharge.CTGID == ctgID)
{
return recharge.GoldPrize;
}
}
}
}
return 0;
}
#endregion
#region 红点
public Redpoint redpoint = new Redpoint(MainRedDot.REDPOINT_OPENSERVER, 20924);
public bool isOpenWin = false;
public void UpdateRedpoint()
{
redpoint.state = RedPointState.None;
if (!IsOpen)
{
return;
}
OperationBase operationBase;
if (OperationTimeHepler.Instance.TryGetOperationTime(multiRechargeType, out operationBase))
{
redpoint.state = isOpenWin ? RedPointState.None : RedPointState.Simple;
}
}
#endregion
}
}