using vnxbqy.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
///
/// 活动界面-集字
///
public class MergeServerCollectWordsModel : ILModel
{
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 onStateUpdate;
//已兑换的记录 编号:已兑换次数
public Dictionary exchangeDict = new Dictionary();
public List wordsID = new List(); //活动的所有搜集物品ID
PackModel packModel { get { return ModelCenter.Instance.GetModelEx(); } }
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
}