//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, October 09, 2017 //-------------------------------------------------------- using Snxxz.UI; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using TableConfig; using UnityEngine; using UnityEngine.UI; using EnhancedUI.EnhancedScroller; namespace Snxxz.UI { public class MarketPutawayWin : Window { [SerializeField] ScrollerController putawayItemCtrl; [SerializeField] ScrollerController bagItemCtrl; [SerializeField] RectTransform m_NotItemPutTip; MarketModel m_Model = null; MarketModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } PlayerPackModel m_PackModel; PlayerPackModel PackModel { get { return m_PackModel ?? (m_PackModel = ModelCenter.Instance.GetModel()); } } #region Built-in protected override void BindController() { putawayItemCtrl.OnRefreshCell += OnRefreshPutawayItemCell; bagItemCtrl.OnRefreshCell += OnRefreshBagItemCell; } protected override void AddListeners() { } protected override void OnPreOpen() { model.m_AchievementIndex = -1; PlayerMarketData.OnRefreshPutaway += OnRefreshPutaway; PackModel.RefreshItemCountAct += ItemRefreshEvent; InitData(); } private void ItemRefreshEvent(PackType arg1, int arg2, int arg3) { InitBagData(); } private void InitPutawayItem() { putawayItemCtrl.Refresh(); List list = PlayerDatas.Instance.market.putawayList; if (list.Count > 0) { m_NotItemPutTip.gameObject.SetActive(false); int page = Mathf.CeilToInt((float)list.Count / 2); for (int i = 0; i < page; i++) { putawayItemCtrl.AddCell(ScrollerDataType.Header, i); } } else { m_NotItemPutTip.gameObject.SetActive(true); } putawayItemCtrl.Restart(); } private void OnRefreshPutaway() { InitPutawayItem(); } protected override void OnAfterOpen() { HandleAchievement(); } protected override void OnPreClose() { } protected override void OnAfterClose() { PlayerMarketData.OnRefreshPutaway -= OnRefreshPutaway; PackModel.RefreshItemCountAct -= ItemRefreshEvent; } #endregion private void InitData() { m_NotItemPutTip.gameObject.SetActive(true); InitBagData(); InitPutawayItem(); } private void InitBagData() { bagItemCtrl.Refresh(); model.bagItems.Clear(); SinglePackModel packTypeModel = PackModel.GetSinglePackModel(PackType.rptItem); if (packTypeModel != null) { Dictionary dic = packTypeModel.GetPackModelIndexDict(); if (dic != null && dic.Count > 0) { model.bagItems.AddRange(dic.Values.ToList()); model.bagItems.Sort(ComparePutawayItems); } } if (model.bagItems.Count > 0) { int page = Mathf.CeilToInt((float)model.bagItems.Count / 4); for (int i = 0; i < page; i++) { bagItemCtrl.AddCell(ScrollerDataType.Header, i); } } bagItemCtrl.Restart(); } int ComparePutawayItems(ItemModel x, ItemModel y) { bool putaway_ok_x = model.CheckItemPutaway(x, false, true); bool putaway_ok_y = model.CheckItemPutaway(y, false, true); if (putaway_ok_x != putaway_ok_y) { return -putaway_ok_x.CompareTo(putaway_ok_y); } bool item_x = x.chinItemModel != null && x.chinItemModel.Type <= 100; bool item_y = y.chinItemModel != null && y.chinItemModel.Type <= 100; if (item_x != item_y) { return -item_x.CompareTo(item_y); } else if (item_x && item_y) { return x.itemId.CompareTo(y.itemId); } bool wing_x = x.chinItemModel != null && x.chinItemModel.Type == 111; bool wing_y = y.chinItemModel != null && y.chinItemModel.Type == 111; if (wing_x != wing_y) { return -wing_x.CompareTo(wing_y); } else if (wing_x && wing_y) { if (x.chinItemModel.LV != y.chinItemModel.LV) { return x.chinItemModel.LV.CompareTo(y.chinItemModel.LV); } return -x.chinItemModel.ItemColor.CompareTo(y.chinItemModel.ItemColor); } bool equip_x = x.chinItemModel != null && (x.chinItemModel.Type > 100 && x.chinItemModel.Type <= 112); bool equip_y = y.chinItemModel != null && (y.chinItemModel.Type > 100 && y.chinItemModel.Type <= 112); if (equip_x != equip_y) { return -equip_x.CompareTo(equip_y); } else if (equip_x && equip_y) { if (x.chinItemModel.EquipPlace != y.chinItemModel.EquipPlace) { return x.chinItemModel.EquipPlace.CompareTo(y.chinItemModel.EquipPlace); } return -x.chinItemModel.ItemColor.CompareTo(y.chinItemModel.ItemColor); } return 0; } private void OnRefreshPutawayItemCell(ScrollerDataType type, CellView cell) { var _putCell = cell as MarketPutedItemCell; int page = cell.index; _putCell.Display(page * 2, page * 2 + 1); } private void OnRefreshBagItemCell(ScrollerDataType type, CellView cell) { var _bagCell = cell as MarketBagItemCell; int page = cell.index; int _index = 0; if (TryGetIndex(page, out _index)) { if (_bagCell.m_AchieveEffects[_index] == null) { var _effect = AchievementGuideEffectPool.Require(2); _bagCell.m_AchieveEffects[_index] = _effect; _effect.transform.SetParentEx(_bagCell[_index].transform, Vector3.zero, Vector3.zero, Vector3.one); (_effect.transform as RectTransform).anchoredPosition = Vector3.zero; if (_effect.effect != null) { _effect.effect.SetMask(); } //m_AchievementIndex = -1; } } else { for (int i = 0; i < 4; i++) { if (_bagCell.m_AchieveEffects[i] != null) { AchievementGuideEffectPool.Recycle(_bagCell.m_AchieveEffects[i]); _bagCell.m_AchieveEffects[i] = null; } } } _bagCell.Display(page * 4, page * 4 + 1, page * 4 + 2, page * 4 + 3); } public bool TryGetIndex(int _page,out int _index) { _index = 0; for (int i = 0; i < 4; i++) { if (model.m_AchievementIndex == _page * 4 + i) { _index = i; return true; } } return false; } void HandleAchievement() { model.m_AchievementIndex = -1; if (AchievementGoto.achievementType == AchievementGoto.MarketPutOn) { for (int i = 0; i < model.bagItems.Count; i++) { if (model.CheckItemPutaway(model.bagItems[i])) { model.m_AchievementIndex = i; break; } } if (model.m_AchievementIndex == -1) { SysNotifyMgr.Instance.ShowTip("Achievement_21"); } else { var _page = model.m_AchievementIndex / 4; bagItemCtrl.JumpIndex(_page); bagItemCtrl.m_Scorller.RefreshActiveCellViews(); } AchievementGoto.achievementType = 0; } } } }