using vnxbqy.UI;
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
|
|
/// <summary>
|
/// 活动界面-集字
|
/// </summary>
|
|
public class MergeServerCollectWordsModel : ILModel<MergeServerCollectWordsModel>
|
{
|
public ILOpenServerActivityProxy activity;
|
public Operation collectWordsType = Operation.default10;
|
public const int activityID = 3;
|
public const int activityType = (int)OpenServerActivityCenter.ActivityType.AT_HFHD;
|
|
public bool IsOpen()
|
{
|
return OperationTimeHepler.Instance.SatisfyOpenCondition(collectWordsType);
|
}
|
|
public bool IsAdvance()
|
{
|
return false;
|
}
|
|
public bool priorityOpen()
|
{
|
//红点
|
return redpoint.state == RedPointState.Simple;
|
}
|
|
|
public event Action ExChangeInfoUpdate;
|
public event Action<int> onStateUpdate;
|
//已兑换的记录 编号:已兑换次数
|
public Dictionary<int, int> exchangeDict = new Dictionary<int, int>();
|
public List<int> wordsID = new List<int>(); //活动的所有搜集物品ID
|
|
PackModel packModel { get { return ModelCenter.Instance.GetModelEx<PackModel>(); } }
|
|
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);
|
|
OperationTimeHepler.Instance.operationTimeUpdateEvent += operationTimeUpdateEvent;
|
packModel.refreshItemCountEvent += RefreshItemCountEvent;
|
}
|
|
public void OnBeforePlayerDataInitialize()
|
{
|
exchangeDict.Clear();
|
wordsID.Clear();
|
}
|
|
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;
|
OperationTimeHepler.Instance.operationTimeUpdateEvent -= operationTimeUpdateEvent;
|
packModel.refreshItemCountEvent -= RefreshItemCountEvent;
|
}
|
|
private void DayResetEvent(int resetType)
|
{
|
OperationBase operationBase;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(collectWordsType, out operationBase))
|
{
|
if (resetType == operationBase.resetType)
|
{
|
UpdateRedpoint();
|
}
|
}
|
}
|
|
private void OperationEndEvent(Operation operationType, int state)
|
{
|
if (operationType == collectWordsType && state == 0)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
}
|
}
|
|
private void OperationStartEvent(Operation operationType, int state)
|
{
|
if (operationType == collectWordsType && state == 0)
|
{
|
UpdateRedpoint();
|
if (onStateUpdate != null)
|
{
|
onStateUpdate(activityID);
|
}
|
}
|
}
|
|
private void operationTimeUpdateEvent(Operation obj)
|
{
|
if (obj != collectWordsType)
|
{
|
return;
|
}
|
wordsID.Clear();
|
OperationBase operationBase = null;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(collectWordsType, out operationBase))
|
{
|
OperationCollectWords operation = operationBase as OperationCollectWords;
|
|
for (int i = 0; i < operation.exchangeWords.Count; i++)
|
{
|
var wordList = operation.exchangeWords[i];
|
for (int j = 0; j < wordList.NeedItemCount; j++)
|
{
|
int itemID = (int)wordList.NeedItemList[j].ItemID;
|
if (!wordsID.Contains(itemID))
|
wordsID.Add(itemID);
|
}
|
}
|
}
|
}
|
|
#region 服务端数据
|
|
private void RefreshItemCountEvent(PackType packType, int index, int itemId)
|
{
|
if (!wordsID.Contains(itemId)) return;
|
UpdateRedpoint();
|
if (ExChangeInfoUpdate != null)
|
{
|
ExChangeInfoUpdate();
|
}
|
}
|
|
public void UpdateExchangeInfo(HAA41_tagMCActCollectWordsPlayerInfo package)
|
{
|
OperationBase operationBase = null;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(collectWordsType, out operationBase))
|
{
|
OperationCollectWords operation = operationBase as OperationCollectWords;
|
if (20 != package.ActNum)
|
{
|
return;
|
}
|
|
for (int i = 0; i < package.ExchangeCount; i++)
|
{
|
//已兑换次数
|
exchangeDict[package.ExchangeInfoList[i].ExchangeNum] = package.ExchangeInfoList[i].ExchangeCount;
|
}
|
UpdateRedpoint();
|
if (ExChangeInfoUpdate != null)
|
{
|
ExChangeInfoUpdate();
|
}
|
}
|
}
|
|
//文字兑换奖励
|
public void SendExchangeWord(byte exchangeNum)
|
{
|
|
IL_CAA09_tagCMActCollectWordsExchange sendInfo = new IL_CAA09_tagCMActCollectWordsExchange();
|
sendInfo.ActNum = 20;
|
sendInfo.ExchangeNum = exchangeNum;
|
GameNetSystem.Instance.SendInfo(sendInfo);
|
}
|
|
#endregion
|
|
#region 红点
|
public Redpoint redpoint = new Redpoint(MainRedPoint.hfhdRedPoint, MainRedPoint.hfhdRedPoint * 100 + activityID);
|
public int jumpIndex = 0;
|
public void UpdateRedpoint()
|
{
|
redpoint.state = RedPointState.None;
|
if (!IsOpen())
|
{
|
return;
|
}
|
if (exchangeDict.Count == 0)
|
{
|
return;
|
}
|
|
jumpIndex = 0;
|
OperationBase operationBase = null;
|
if (OperationTimeHepler.Instance.TryGetOperationTime(collectWordsType, out operationBase))
|
{
|
OperationCollectWords operation = operationBase as OperationCollectWords;
|
for (int i = 0; i < operation.exchangeWords.Count; i++)
|
{
|
var wordList = operation.exchangeWords[i];
|
if (!exchangeDict.ContainsKey(wordList.ExchangeNum) || exchangeDict[wordList.ExchangeNum] >= wordList.ExchangeCountMax)
|
{
|
continue;
|
}
|
var isEnough = true;
|
for (int j = 0; j < wordList.NeedItemCount; j++)
|
{
|
int itemID = (int)wordList.NeedItemList[j].ItemID;
|
var cnt = packModel.GetItemCountByID(PackType.Item, itemID);
|
if (cnt < wordList.NeedItemList[j].ItemCount)
|
{
|
isEnough = false;
|
break;
|
}
|
}
|
|
if (isEnough)
|
{
|
redpoint.state = RedPointState.Simple;
|
jumpIndex = i;
|
return;
|
}
|
}
|
}
|
}
|
#endregion
|
}
|