using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
|
/// <summary>
|
/// 双倍 (多倍充值)
|
/// </summary>
|
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<int> 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<int, int> multiRechargeDict = new Dictionary<int, int>();
|
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
|
}
|
}
|