using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
namespace vnxbqy.UI
|
{
|
|
public class HolidayConsumeRebateModel : Model, IPlayerLoginOk, IBeforePlayerDataInitialize, IOpenServerActivity
|
{
|
int regesitType = 110;
|
|
public event Action consumeRebateUpdateEvent;
|
public event Action<int> onStateUpdate;
|
|
public override void Init()
|
{
|
PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent;
|
OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent;
|
OperationTimeHepler.Instance.dayResetEvent += DayResetEvent;
|
OpenServerActivityCenter.Instance.Register(regesitType, this, (int)OpenServerActivityCenter.ActivityType.AT_JRZF);
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
costTotal = 0;
|
}
|
|
public void OnPlayerLoginOk()
|
{
|
UpdateRedpoint();
|
}
|
|
public override void UnInit()
|
{
|
PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent;
|
OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent;
|
OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent;
|
OperationTimeHepler.Instance.dayResetEvent -= DayResetEvent;
|
}
|
|
public bool IsOpen
|
{
|
get
|
{
|
OperationBase operation;
|
OperationTimeHepler.Instance.TryGetOperationTime(Operation.HolidayConsumeRebate, out operation);
|
return operation != null && operation.InTime(TimeUtility.ServerNow) && operation.SatisfyOpenCondition();
|
}
|
}
|
|
public int displayIndex { get; set; }
|
|
public int costTotal { get; private set; }
|
|
private uint consumeGotRecord { get; set; }
|
|
public bool priorityOpen
|
{
|
get
|
{
|
return consumeRebateRedpoint.state == RedPointState.GetReward;
|
}
|
}
|
|
public bool IsAdvance
|
{
|
get
|
{
|
return OperationTimeHepler.Instance.SatisfyAdvanceCondition(Operation.HolidayConsumeRebate);
|
}
|
}
|
|
public bool IsRebateGot(int day, int _index)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.HolidayConsumeRebate, out operationBase))
|
{
|
OperationConsumeRebate operation = operationBase as OperationConsumeRebate;
|
if (day >= 0 && day < operation.rebates.Count)
|
{
|
var rebate = operation.rebates[day];
|
if (_index >= 0 && _index < rebate.rebateGrades.Count)
|
{
|
return IsRebateGot(rebate.rebateGrades[_index].index);
|
}
|
}
|
}
|
return false;
|
}
|
|
private void PlayerDataRefreshInfoEvent(PlayerDataType refreshType)
|
{
|
if (refreshType == PlayerDataType.LV)
|
{
|
UpdateRedpoint();
|
}
|
}
|
|
private void DayResetEvent(int resetType)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.HolidayConsumeRebate, out operationBase))
|
{
|
if (resetType == operationBase.resetType)
|
{
|
UpdateRedpoint();
|
}
|
}
|
}
|
|
private void OperationStartEvent(Operation type, int state)
|
{
|
if (type == Operation.HolidayConsumeRebate && state == 0)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(regesitType);
|
}
|
}
|
}
|
|
private void OperationEndEvent(Operation type, int state)
|
{
|
if (type == Operation.HolidayConsumeRebate && state == 0)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(regesitType);
|
}
|
}
|
}
|
|
bool IsRebateGot(int _index)
|
{
|
return (consumeGotRecord & (1 << _index)) != 0;
|
}
|
|
public void GotConsumeRebate(int _day, int _index)
|
{
|
OperationBase operationBase;
|
if (!OperationTimeHepler.Instance.InOperationTime(Operation.HolidayConsumeRebate))
|
{
|
SysNotifyMgr.Instance.ShowTip("ActiveOutTime");
|
return;
|
}
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.HolidayConsumeRebate, out operationBase))
|
{
|
OperationConsumeRebate operation = operationBase as OperationConsumeRebate;
|
if (_day >= 0 && _day < operation.rebates.Count)
|
{
|
var rebate = operation.rebates[_day];
|
if (_index >= 0 && _index < rebate.rebateGrades.Count)
|
{
|
if (IsRebateGot(rebate.rebateGrades[_index].index))
|
{
|
SysNotifyMgr.Instance.ShowTip("ConsumeRebateGot");
|
return;
|
}
|
else if (costTotal < rebate.rebateGrades[_index].needGold)
|
{
|
SysNotifyMgr.Instance.ShowTip("ConsumeRebateNoSatisfy");
|
return;
|
}
|
CA504_tagCMPlayerGetReward pak = new CA504_tagCMPlayerGetReward();
|
pak.RewardType = (byte)GotServerRewardType.Def_RewardType_ConsumeRebate;
|
pak.DataEx = (uint)_index;
|
pak.DataExStrLen = (byte)operation.ActNum.ToString().Length; ;
|
pak.DataExStr = operation.ActNum.ToString();
|
GameNetSystem.Instance.SendInfo(pak);
|
}
|
}
|
}
|
}
|
|
public void UpdateConsumeRebate(HAA10_tagMCCostRebatePlayerInfo package)
|
{
|
OperationConsumeRebate operation;
|
if (!OperationTimeHepler.Instance.TryGetOperation(Operation.HolidayConsumeRebate, out operation))
|
{
|
return;
|
}
|
if (operation.ActNum != package.ActNum)
|
{
|
return;
|
}
|
|
costTotal = (int)package.CostGoldTotal;
|
consumeGotRecord = package.AwardRecord;
|
if (consumeRebateUpdateEvent != null)
|
{
|
consumeRebateUpdateEvent();
|
}
|
UpdateRedpoint();
|
}
|
|
public int GetTotalConsume()
|
{
|
return costTotal;
|
}
|
|
public Redpoint consumeRebateRedpoint = new Redpoint(MainRedDot.RedPoint_HolidayWishes, 28010);
|
private void UpdateRedpoint()
|
{
|
consumeRebateRedpoint.state = RedPointState.None;
|
if (!IsOpen)
|
{
|
return;
|
}
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(Operation.HolidayConsumeRebate, out operationBase))
|
{
|
OperationConsumeRebate operation = operationBase as OperationConsumeRebate;
|
var rebate = operation.GetRebate(TimeUtility.ServerNow);
|
if (rebate != null)
|
{
|
for (int i = 0; i < rebate.rebateGrades.Count; i++)
|
{
|
var rebateGrade = rebate.rebateGrades[i];
|
if (IsRebateGot(rebateGrade.index))
|
{
|
continue;
|
}
|
else if (costTotal < rebateGrade.needGold)
|
{
|
continue;
|
}
|
consumeRebateRedpoint.state = RedPointState.GetReward;
|
break;
|
}
|
}
|
}
|
}
|
}
|
}
|