using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class RoleTitle : Window { [SerializeField] Button m_GetTitleBtn; [SerializeField] Button m_ActivityTitleBtn; [SerializeField] Button m_VipTitleBtn; [SerializeField] Button m_AchieveTitleBtn; [SerializeField] Button m_CloseBtn; [SerializeField] ScrollerController m_Controller; [SerializeField] Button m_TitlePropertyBtn; [SerializeField] Text m_TitleTip; private TitleType presentType = TitleType.None; TitleModel m_TitleModel; TitleModel model { get { return m_TitleModel ?? (m_TitleModel = ModelCenter.Instance.GetModel()); } } private void OnTitlePropertyClick() { WindowCenter.Instance.Open(); } private void OnRefreshGainTitle() { switch (presentType) { case TitleType.Get: OnIsGetTitle(); break; case TitleType.Activity: case TitleType.Vip: case TitleType.Achivement: m_Controller.m_Scorller.RefreshActiveCellViews(); break; } } void OnIsGetTitle() { presentType = TitleType.Get; model.roleTitleList.Clear(); var _dict = model.GetAllGainTitle(); foreach (var _titleId in _dict.Keys) { if (model.IsTitleGain(_titleId)) { model.roleTitleList.Add(_titleId); } } m_TitleTip.gameObject.SetActive(model.roleTitleList.Count < 1); OnRefreshScroller(); SetTitleSelect(presentType); } private void SetTitleSelect(TitleType type) { m_GetTitleBtn.image.SetSprite("Title_TabDark"); m_VipTitleBtn.image.SetSprite("Title_TabDark"); m_AchieveTitleBtn.image.SetSprite("Title_TabDark"); m_ActivityTitleBtn.image.SetSprite("Title_TabDark"); switch (type) { case TitleType.Get: m_GetTitleBtn.image.SetSprite("Title_TabRight"); break; case TitleType.Activity: m_ActivityTitleBtn.image.SetSprite("Title_TabRight"); break; case TitleType.Vip: m_VipTitleBtn.image.SetSprite("Title_TabRight"); break; case TitleType.Achivement: m_AchieveTitleBtn.image.SetSprite("Title_TabRight"); break; } } void OnTitle(TitleType type) { if (presentType == type) { return; } model.roleTitleList.Clear(); m_TitleTip.gameObject.SetActive(false); List _list = DienstgradConfig.GetTitlesByType(type); if (_list != null) { foreach (DienstgradConfig cfg in _list) { model.roleTitleList.Add(cfg.ID); } } OnRefreshScroller(); presentType = type; SetTitleSelect(presentType); } void OnRefreshScroller() { model.roleTitleList.Sort(Compare); if (model.roleTitleList.Count > 0) { model.presentSelectTitle = model.roleTitleList[0]; } m_Controller.Refresh(); for (int i = 0; i < model.roleTitleList.Count; i++) { m_Controller.AddCell(ScrollerDataType.Normal, i, OnTitleItemClick); } m_Controller.Restart(); } void OnTitleItemClick(CellView cell) { int index = cell.index; if (index < model.roleTitleList.Count) { model.presentSelectTitle = model.roleTitleList[index]; WindowCenter.Instance.Open(); m_Controller.m_Scorller.RefreshActiveCellViews(); } } private int Compare(int x, int y) { bool newget_x = model.IsNewGet(x); bool newget_y = model.IsNewGet(y); if (newget_x.CompareTo(newget_y) != 0) { return -newget_x.CompareTo(newget_y); } bool isGetx = model.IsTitleGain(x); bool isGety = model.IsTitleGain(y); if (isGetx.CompareTo(isGety) != 0) { return -isGetx.CompareTo(isGety); } else if (x.CompareTo(y) != 0) { return -x.CompareTo(y); } else return 1; } protected override void BindController() { } protected override void AddListeners() { m_TitlePropertyBtn.onClick.AddListener(OnTitlePropertyClick); m_GetTitleBtn.onClick.AddListener(OnIsGetTitle); m_ActivityTitleBtn.onClick.AddListener(() => { OnTitle(TitleType.Activity); }); m_VipTitleBtn.onClick.AddListener(() => { OnTitle(TitleType.Vip); }); m_AchieveTitleBtn.onClick.AddListener(() => { OnTitle(TitleType.Achivement); }); m_CloseBtn.onClick.AddListener(CloseClick); m_Controller.lockType = EnhanceLockType.KeepVertical; } protected override void OnPreOpen() { model.OnRefreshGainTitle += OnRefreshGainTitle; C0335_tagCPlayerDienstgradRefresh titlePack = new C0335_tagCPlayerDienstgradRefresh(); GameNetSystem.Instance.SendInfo(titlePack); OnIsGetTitle(); m_Controller.JumpIndex(0); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { presentType = TitleType.None; model.OnRefreshGainTitle -= OnRefreshGainTitle; model.SetTitlesGet(); } } }