//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Thursday, January 25, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; namespace Snxxz.UI { public class DogzPackWin : Window { [SerializeField] List m_DogzEquips; [SerializeField] List m_DogzUnEquipBtns; [SerializeField] List m_DogzUnEquipContents; [SerializeField] Image m_DogzHeadIcon; [SerializeField] Button m_CloseBtn; [SerializeField] Button m_GetEquipBtn; [SerializeField] Button m_OneKeyPutBtn; [SerializeField] ScrollerController m_PackController; [SerializeField] Button qualitySelectBtn; [SerializeField] Button starSelectBtn; [SerializeField] Transform qualityArrow; [SerializeField] Transform starArrow; [SerializeField] SortTable qualitySort; [SerializeField] SortTable starSort; [SerializeField] List sliderImglist = new List(); DogzModel m_DogzModel; DogzModel dogzModel { get { return m_DogzModel ?? (m_DogzModel = ModelCenter.Instance.GetModel()); } } PackModel playerPack { get { return ModelCenter.Instance.GetModel(); } } DogzPackModel m_Model; DogzPackModel model { get { return m_Model ?? (m_Model = ModelCenter.Instance.GetModel()); } } List curSliderImglist = new List(); #region Built-in protected override void BindController() { } protected override void AddListeners() { m_CloseBtn.onClick.AddListener(CloseClick); m_GetEquipBtn.onClick.AddListener(GetEquipBtn); m_OneKeyPutBtn.AddListener(ClickOneKeyPutBtn); qualitySelectBtn.AddListener(ClickQualitySelect); starSelectBtn.AddListener(ClickStarSelect); } protected override void OnPreOpen() { curSliderImglist.Clear(); dogzModel.RefreshDogzEquipAct += RefreshDogzEquipEvent; playerPack.refreshItemCountEvent += RefreshDogzItemEvent; qualitySort.onSelectSortEvent += RefreshDogzSelectEvent; starSort.onSelectSortEvent += RefreshDogzSelectEvent; qualitySort.onSortCloseEvent += CloseQualitySort; starSort.onSortCloseEvent += CloseStarSort; dogzModel.SelectDogzItemQuality = 0; dogzModel.SelectDogzItemStart = 0; starSort.SetDefault(); qualitySort.SetDefault(); UpdateDogzEquip(); UpdateDogzPack(); SetDefalutDogzEquipState(); starSort.gameObject.SetActive(false); qualitySort.gameObject.SetActive(false); starArrow.localRotation = Quaternion.Euler(0, 0, 180); qualityArrow.localRotation = Quaternion.Euler(0, 0, 180); } protected override void OnAfterOpen() { } protected override void OnPreClose() { dogzModel.RefreshDogzEquipAct -= RefreshDogzEquipEvent; playerPack.refreshItemCountEvent -= RefreshDogzItemEvent; qualitySort.onSelectSortEvent -= RefreshDogzSelectEvent; starSort.onSelectSortEvent -= RefreshDogzSelectEvent; qualitySort.onSortCloseEvent -= CloseQualitySort; starSort.onSortCloseEvent -= CloseStarSort; } protected override void OnAfterClose() { } protected override void LateUpdate() { if(curSliderImglist.Count > 0) { for(int i = 0; i < curSliderImglist.Count; i++) { if(curSliderImglist[i].fillAmount < 1) { curSliderImglist[i].fillAmount += 0.1f; } } } } #endregion private void RefreshDogzEquipEvent(int dogzId) { if (dogzId != dogzModel.presentSelectDogz) return; UpdateDogzEquip(); UpdateDogzEquipState(dogzId); } private void UpdateDogzEquip() { var _dogzCfg = DogzConfig.Get(dogzModel.presentSelectDogz); m_DogzHeadIcon.SetSprite(_dogzCfg.HeadIcon); m_DogzHeadIcon.SetNativeSize(); for (int i = 0; i < m_DogzEquips.Count; i++) { ItemModel _data; int index = i; bool _equiped = dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz, i+101, out _data); m_DogzUnEquipBtns[i].DogzUnEquipBtn.gameObject.SetActive(!_equiped); m_DogzUnEquipBtns[i].RedpointBeh.redpointId = dogzModel.GetDogzEquipPlaceRedpointById(dogzModel.presentSelectDogz,i).id; m_DogzEquips[i].gameObject.SetActive(_equiped); if (_equiped) { m_DogzEquips[i].Display(_data); } else { var _itemColor = dogzModel.GetDogzEquipLimitByIndex(dogzModel.presentSelectDogz, i); m_DogzUnEquipContents[i].text = StringUtility.Contact(dogzModel.GetItemColorName(_itemColor), dogzModel.GetDogzPartNameByIndex(i)); m_DogzUnEquipContents[i].color = UIHelper.GetUIColor(_itemColor); m_DogzUnEquipBtns[i].DogzUnEquipBtn.RemoveAllListeners(); m_DogzUnEquipBtns[i].DogzUnEquipBtn.AddListener(() => { ClickEquipIndex(index); }); } } } private void SetDefalutDogzEquipState() { for(int i = 0; i < sliderImglist.Count; i++) { ItemModel itemModel = null; bool isPut = dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz, dogzModel.GetDogzEquipPlaceByIndex(i), out itemModel); if (!isPut) { sliderImglist[i].fillAmount = 0; sliderImglist[i].gameObject.SetActive(false); } else { sliderImglist[i].fillAmount = 1; sliderImglist[i].gameObject.SetActive(true); } } } private void UpdateDogzEquipState(int dogzId) { curSliderImglist.Clear(); foreach (var index in dogzModel.dogzEquipStateDict.Keys) { ItemModel itemModel = null; bool isPut = dogzModel.TryGetDogzEquip(dogzId,dogzModel.GetDogzEquipPlaceByIndex(index),out itemModel); if(!dogzModel.dogzEquipStateDict[index] && isPut) { sliderImglist[index].gameObject.SetActive(true); sliderImglist[index].fillAmount = 0; curSliderImglist.Add(sliderImglist[index]); } else if(!isPut) { sliderImglist[index].fillAmount = 0; sliderImglist[index].gameObject.SetActive(false); } else { sliderImglist[index].fillAmount = 1; sliderImglist[index].gameObject.SetActive(true); } } } private void ClickEquipIndex(int index) { dogzModel.GetDogzItemListByIndex(dogzModel.presentSelectDogz,index); if(dogzModel.selectEquipPlacelist.Count > 0) { WindowCenter.Instance.Open(); } else { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("DogzFunc101")); } } private void RefreshDogzSelectEvent(SortType sortType,int type) { switch (sortType) { case SortType.EquipQuality: dogzModel.SelectDogzItemQuality = type; break; case SortType.EquipStar: dogzModel.SelectDogzItemStart = type; break; } m_PackController.m_Scorller.RefreshActiveCellViews(); } private void RefreshDogzItemEvent(PackType type, int index, int id) { if (type != PackType.DogzItem && type != PackType.DogzEquip) return; m_PackController.m_Scorller.RefreshActiveCellViews(); } private void UpdateDogzPack() { if (m_PackController.GetNumberOfCells(m_PackController.m_Scorller) == 0) { m_PackController.Refresh(); var _line = dogzModel.DogzPackGridCnt / 4; for (int i = 0; i < _line; i++) { m_PackController.AddCell(ScrollerDataType.Header, i); } m_PackController.Restart(); } else { m_PackController.m_Scorller.RefreshActiveCellViews(); } } private void GetEquipBtn() { //--界面跳转 WindowJumpMgr.Instance.WindowJumpTo(JumpUIType.DogzDungeon); } private void ClickOneKeyPutBtn() { List indexlist = new List(); for(int i = 0; i < 5; i++) { dogzModel.GetDogzItemListByIndex(dogzModel.presentSelectDogz,i); if (dogzModel.selectEquipPlacelist.Count > 0) { ItemModel selectModel = dogzModel.selectEquipPlacelist[0]; ItemModel itemModel = null; int equipPlace = dogzModel.GetDogzEquipPlaceByIndex(i); dogzModel.TryGetDogzEquip(dogzModel.presentSelectDogz,equipPlace,out itemModel); if(itemModel == null) { indexlist.Add(selectModel.gridIndex); } else { int putStrenLv = 0; if (itemModel.GetUseData((int)ItemUseDataKey.dogzEquipPlus) != null) { putStrenLv = itemModel.GetUseData((int)ItemUseDataKey.dogzEquipPlus)[0]; } int selectStrenLv = 0; if (selectModel.GetUseData((int)ItemUseDataKey.dogzEquipPlus) != null) { selectStrenLv = selectModel.GetUseData((int)ItemUseDataKey.dogzEquipPlus)[0]; } if (itemModel.config.ItemColor < selectModel.config.ItemColor || (itemModel.config.StarLevel < selectModel.config.StarLevel && itemModel.config.ItemColor == selectModel.config.ItemColor) || (itemModel.score < selectModel.score && itemModel.config.ItemColor == selectModel.config.ItemColor && itemModel.config.StarLevel == selectModel.config.StarLevel) ||(itemModel.score == selectModel.score && itemModel.config.ItemColor == selectModel.config.ItemColor && itemModel.config.StarLevel == selectModel.config.StarLevel && putStrenLv < selectStrenLv)) { indexlist.Add(dogzModel.selectEquipPlacelist[0].gridIndex); } } } } if(indexlist.Count > 0) { dogzModel.SendPutOnEquip(indexlist); } else { if(dogzModel.GetDogzEquips(dogzModel.presentSelectDogz) != null && dogzModel.GetDogzEquips(dogzModel.presentSelectDogz).Count == 5) { SysNotifyMgr.Instance.ShowTip("DogzOneKeyBest"); } else { SysNotifyMgr.Instance.ShowTip("DogzOneKeyNone"); } } } private void ClickStarSelect() { starArrow.localRotation = Quaternion.Euler(0, 0, 0); if (!starSort.gameObject.activeInHierarchy) { starSort.gameObject.SetActive(true); } } private void ClickQualitySelect() { qualityArrow.localRotation = Quaternion.Euler(0, 0, 0); if (!qualitySort.gameObject.activeInHierarchy) { qualitySort.gameObject.SetActive(true); } } private void CloseQualitySort() { qualityArrow.localRotation = Quaternion.Euler(0, 0, 180); } private void CloseStarSort() { starArrow.localRotation = Quaternion.Euler(0, 0, 180); } [Serializable] public class DogzUnEquip { [SerializeField] Button m_DogzUnEquipBtn; public Button DogzUnEquipBtn { get { return m_DogzUnEquipBtn; } } [SerializeField] RedpointBehaviour m_RedpointBeh; public RedpointBehaviour RedpointBeh { get { return m_RedpointBeh; } } } } }