using vnxbqy.UI;
|
using System;
|
using System.Collections.Generic;
|
using UnityEngine.UI;
|
using System.Linq;
|
using LitJson;
|
using UnityEngine;
|
|
//买1送5活动
|
public class Buy1Free5Model : ILModel<Buy1Free5Model>
|
{
|
public ILOpenServerActivityProxy activity;
|
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_Activity1;
|
public const int activityID = 4;
|
public const Operation operationType = Operation.default25;
|
|
public Redpoint redpoint = new Redpoint(MainRedPoint.RechargeGenerousGiftWinRedpoint,MainRedPoint.buy1Free5Redpoint);
|
public Redpoint leftRedpoint = new Redpoint(MainRedPoint.buy1Free5Redpoint*10 + 2);
|
public Redpoint rightRedpoint = new Redpoint(MainRedPoint.buy1Free5Redpoint*10 + 1);
|
public event Action UpdateFreeGiftEvent;
|
|
public List<int> freeGiftStates = new List<int>();
|
public int selectCTGIDIndex = 0; //界面切页
|
|
VipModel vipModel { get { return ModelCenter.Instance.GetModelEx<VipModel>(); } }
|
|
protected override void Init()
|
{
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent += OperationEvent;
|
GameEvent.beforePlayerDataInitializeEvent += OnBeforePlayerDataInitialize;
|
vipModel.rechargeCountEvent += OnRechargeEvent;
|
activity = new ILOpenServerActivityProxy(IsOpen, IsAdvance, priorityOpen);
|
OpenServerActivityCenter.Instance.Register(activityID, activity, activityType);
|
|
}
|
|
protected override void UnInit()
|
{
|
ILOperationTimeHepler.Instance.operationTimeUpdateEvent -= OperationEvent;
|
GameEvent.beforePlayerDataInitializeEvent -= OnBeforePlayerDataInitialize;
|
vipModel.rechargeCountEvent -= OnRechargeEvent;
|
}
|
|
public bool IsOpen()
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(operationType);
|
}
|
|
public bool IsAdvance()
|
{
|
return false;
|
}
|
|
public bool priorityOpen()
|
{
|
return false;
|
}
|
|
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
freeGiftStates.Clear();
|
}
|
|
private void OperationEvent(Operation opType)
|
{
|
if (opType == operationType)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
|
#region 服务端数据
|
public uint ActNum { get; private set; } //累充类型 对应界面
|
public void UpdateFreeGiftState(IL_HAA66_tagMCActBuyOnePlayerInfo package)
|
{
|
freeGiftStates.Clear();
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationBuy1Free5 operation = operationBase as OperationBuy1Free5;
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
ActNum = package.ActNum;
|
for (int i = 0; i < package.FreeRecordList.Length; i++)
|
{
|
freeGiftStates.Add((int)package.FreeRecordList[i]);
|
}
|
UpdateFreeGiftEvent?.Invoke();
|
UpdateRedpoint();
|
}
|
}
|
|
#endregion
|
|
//购买后可免费领取5份礼包
|
//0 未购买 1 可领取 2 已领取
|
//ctgIDIndex 充值档位索引 freeIndex 免费礼包索引
|
public int GetFreeGiftState(int ctgIDIndex, int ctgID, int freeIndex)
|
{
|
VipModel.RechargeCount rechargeCount;
|
vipModel.TryGetRechargeCount(ctgID, out rechargeCount);
|
if (rechargeCount.todayCount == 0)
|
return 0;
|
|
if (ctgIDIndex >= freeGiftStates.Count)
|
{
|
//有充值记录 但是没有领取记录
|
return 1;
|
}
|
//按二进制位判断是否可领取
|
if ((freeGiftStates[ctgIDIndex] & (1 << freeIndex)) != 0)
|
{
|
return 2;
|
}
|
return 1;
|
}
|
|
void OnRechargeEvent(int id)
|
{
|
if (!IsOpen())
|
return;
|
UpdateRedpoint();
|
}
|
|
|
|
public void UpdateRedpoint()
|
{
|
redpoint.state = RedPointState.None;
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationBuy1Free5 operation = operationBase as OperationBuy1Free5;
|
if (operation.ActNum != ActNum)
|
{
|
return;
|
}
|
//key一定是从0开始的
|
for (int i = 0; i < operation.indexToCTGIDDict.Keys.Count; i++)
|
{
|
int ctgID = operation.indexToCTGIDDict[i];
|
var itemList = operation.CTGIDToFreeDict[ctgID];
|
for (int j = 0; j < itemList.Count; j++)
|
{
|
if (GetFreeGiftState(i, ctgID, j) == 1)
|
{
|
redpoint.state = RedPointState.Simple;
|
return;
|
}
|
}
|
}
|
}
|
}
|
|
public void UpdateLRRedpoint()
|
{
|
leftRedpoint.state = RedPointState.None;
|
rightRedpoint.state = RedPointState.None;
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(operationType, out operationBase))
|
{
|
OperationBuy1Free5 operation = operationBase as OperationBuy1Free5;
|
if (operation.ActNum != ActNum)
|
{
|
return;
|
}
|
for (int i = 0; i < operation.indexToCTGIDDict.Keys.Count; i++)
|
{
|
int ctgID = operation.indexToCTGIDDict[i];
|
var itemList = operation.CTGIDToFreeDict[ctgID];
|
for (int j = 0; j < itemList.Count; j++)
|
{
|
if (GetFreeGiftState(i, ctgID, j) == 1)
|
{
|
if (i < selectCTGIDIndex)
|
{
|
leftRedpoint.state = RedPointState.Simple;
|
break;
|
}
|
if (i > selectCTGIDIndex)
|
{
|
rightRedpoint.state = RedPointState.Simple;
|
break;
|
}
|
}
|
}
|
}
|
}
|
}
|
}
|