//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, March 07, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class LevelGiftWin : Window { [SerializeField] ScrollerController m_LevelGiftCtrl; LevelGiftModel m_Model; LevelGiftModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_LevelGiftCtrl.OnRefreshCell += OnRefreshCell; } protected override void OnPreOpen() { PlayerDatas.Instance.playerDataRefreshEvent += PlayerDataRefreshInfoEvent; model.OnGetGiftUpdateEvent += OnGetGiftUpdateEvent; //model.OnLimitGiftUpdateEvent += OnLimitGiftUpdateEvent; if (m_LevelGiftCtrl.GetNumberOfCells(m_LevelGiftCtrl.m_Scorller) == 0) { m_LevelGiftCtrl.Refresh(); var _cfgs = LVAawrdConfig.GetValues(); for (int i = 0; i < _cfgs.Count; i++) { m_LevelGiftCtrl.AddCell(ScrollerDataType.Header, _cfgs[i].RewardID); } m_LevelGiftCtrl.Restart(); } var _index = 0; model.TryGetLevelGift(out _index); m_LevelGiftCtrl.JumpIndex(_index); m_LevelGiftCtrl.m_Scorller.RefreshActiveCellViews(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { PlayerDatas.Instance.playerDataRefreshEvent -= PlayerDataRefreshInfoEvent; model.OnGetGiftUpdateEvent -= OnGetGiftUpdateEvent; //model.OnLimitGiftUpdateEvent -= OnLimitGiftUpdateEvent; } protected override void OnAfterClose() { } #endregion private void OnRefreshCell(ScrollerDataType type, CellView cell) { LevelGiftCell _cell = cell as LevelGiftCell; var _award = model.levelGiftItemDict[_cell.index]; var _cfg = LVAawrdConfig.Get(_cell.index); var _isGet = model.IsGet(_cfg.RewardID); var _vipGot = model.IsVipGet(_cfg.RewardID); var _items = _award.GetAwardItem(PlayerDatas.Instance.baseData.Job); for (int i = 0; i < _cell.items.Length; i++) { if (i < _items.Count) { _cell.items[i].SetActive(true); _cell.gotImages[i].SetActive(_isGet); var _item = _items[i]; ItemCellModel _ItemData = new ItemCellModel(_item.id, true, (ulong)_item.count); _cell.items[i].Init(_ItemData); _cell.items[i].button.RemoveAllListeners(); _cell.items[i].button.AddListener(() => { ItemTipUtility.Show(_item.id); }); } else { _cell.items[i].SetActive(false); } } var _vipAward = model.m_VipItemDict[_cell.index]; ItemCellModel _vipDate = new ItemCellModel(_vipAward.item.id, true, (ulong)_vipAward.item.count); _cell.vipItem.Init(_vipDate); _cell.vipItem.button.RemoveAllListeners(); _cell.vipItem.button.AddListener(() => { ItemTipUtility.Show(_vipAward.item.id); }); _cell.vipGotImage.SetActive(_vipGot); _cell.vipText.text = StringUtility.Contact("V", _vipAward.vipLv); _cell.targetLevel.text = _cfg.LV.ToString(); int state = 0; if (!_isGet && PlayerDatas.Instance.baseData.LV < _cfg.LV) { state = 0; } else if (!_isGet && PlayerDatas.Instance.baseData.LV >= _cfg.LV) { state = 1; } else if (!_vipGot && PlayerDatas.Instance.baseData.VIPLv < _cfg.VIPLimit) { state = 2; } else if (!_vipGot && PlayerDatas.Instance.baseData.VIPLv >= _cfg.VIPLimit) { state = 3; } else if (_isGet && _vipGot) { state = 4; } _cell.getBtn.SetActive(state == 1 || state == 3); _cell.stateImg.SetActive(state == 0 || state == 4); _cell.effect.SetActive(state == 1 || state == 3); _cell.vipBtn.SetActive(state == 2); if (state == 0 || state == 4) { _cell.stateImg.SetSprite(state == 0 ? "LVReward2" : "LVReward1"); } _cell.getBtn.onClick.RemoveAllListeners(); _cell.getBtn.onClick.AddListener(() => { var _count = ModelCenter.Instance.GetModel().GetEmptyGridCount(PackType.Item); if (_items.Count > _count) { SysNotifyMgr.Instance.ShowTip("BagFull"); return; } CA504_tagCMPlayerGetReward _pak = new CA504_tagCMPlayerGetReward(); _pak.RewardType = 5; _pak.DataEx = (uint)_cfg.RewardID; _pak.DataExStr = string.Empty; _pak.DataExStrLen = 0; GameNetSystem.Instance.SendInfo(_pak); }); _cell.vipBtn.RemoveAllListeners(); _cell.vipBtn.AddListener((UnityEngine.Events.UnityAction)(() => { WindowJumpMgr.Instance.ClearJumpData(); WindowCenter.Instance.Close(); WindowCenter.Instance.Open(false, 0); })); } private void PlayerDataRefreshInfoEvent(PlayerDataType _type) { if (_type == PlayerDataType.LV) { m_LevelGiftCtrl.m_Scorller.RefreshActiveCellViews(); } else if (_type == PlayerDataType.VIPLv) { m_LevelGiftCtrl.m_Scorller.RefreshActiveCellViews(); } } private void OnGetGiftUpdateEvent() { m_LevelGiftCtrl.m_Scorller.RefreshActiveCellViews(); } private void OnLimitGiftUpdateEvent() { m_LevelGiftCtrl.m_Scorller.RefreshActiveCellViews(); } } }