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 }