using System; using System.Collections; using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.UI; #if UNITY_EDITOR using UnityEditor; using UnityEditorInternal; #endif namespace vnxbqy.UI { //开服活动 独立界面 public class OpenServerActivityRankWin : Window { [SerializeField] ScrollerController m_ActivityCtrl; [SerializeField] Button m_BtnClose; List m_OpenServerActivities = new List(); ImpactRankModel impactRankModel { get { return ModelCenter.Instance.GetModel(); } } List openActivitys = new List(); List priorityActivitys = new List(); List alreadyOpenActivitys = new List(); protected override void BindController() { m_OpenServerActivities.Add(100); m_OpenServerActivities.Add(0); } protected override void AddListeners() { m_ActivityCtrl.OnRefreshCell += OnOpenServerActivityRefresh; m_ActivityCtrl.OnGetDynamicSize += OnGetDynamicSize; m_ActivityCtrl.lockType = EnhanceLockType.KeepVertical; m_BtnClose.onClick.AddListener(TryClose); } protected override void OnPreOpen() { TimeUtility.OnServerOpenDayRefresh += OnStepServerDayEvent; OpenServerActivityCenter.Instance.openServerActivityStateChange += OpenServerActivityStateChange; var impactDefaultType = impactRankModel.GetDefaultSelectType(); if (impactRankModel.IsLock(impactDefaultType)) { impactDefaultType = impactRankModel.impactRankSorts[0]; } impactRankModel.presentSelectType = impactDefaultType; impactRankModel.gotoImpactRankType = 0; CheckAlreadyOpen(); UpdateFunctionBtns(); } protected override void OnActived() { if (alreadyOpenActivitys.Count == 0) { CloseImmediately(); return; } if (functionOrder == 0 && !WindowJumpMgr.Instance.IsJumpState) { functionOrder = GetDefaultSelect(); UpdateFunctionBtns(); } if (functionOrder != 0) WindowCenter.Instance.Open(); else WindowCenter.Instance.Open(); var index = alreadyOpenActivitys.IndexOf(functionOrder); m_ActivityCtrl.JumpIndex(index); } protected override void OnAfterOpen() { impactRankModel.OSCEffectOpen = false; } protected override void OnPreClose() { TimeUtility.OnServerOpenDayRefresh -= OnStepServerDayEvent; OpenServerActivityCenter.Instance.openServerActivityStateChange -= OpenServerActivityStateChange; impactRankModel.gotoImpactRankType = 0; CloseOtherWin(); } protected override void OnAfterClose() { if (!WindowJumpMgr.Instance.IsJumpState) { WindowCenter.Instance.Open(); } } private void TryClose() { CloseClick(); } int GetDefaultSelect() { openActivitys.Clear(); priorityActivitys.Clear(); for (int i = 0; i < m_OpenServerActivities.Count; i++) { var activityId = m_OpenServerActivities[i]; if (OpenServerActivityCenter.Instance.IsActivityOpen(activityId)) { openActivitys.Add(activityId); if (OpenServerActivityCenter.Instance.IsPriorityOpenOpen(activityId)) { priorityActivitys.Add(activityId); } } } if (priorityActivitys.Count > 0) { priorityActivitys.Sort(Compare); return priorityActivitys[0]; } else { openActivitys.Sort(Compare); return openActivitys[0]; } } void CheckAlreadyOpen() { alreadyOpenActivitys.Clear(); for (int i = 0; i < m_OpenServerActivities.Count; i++) { if (OpenServerActivityCenter.Instance.IsActivityOpen(m_OpenServerActivities[i])) { alreadyOpenActivitys.Add(m_OpenServerActivities[i]); } } } private void OnOpenServerActivityRefresh(ScrollerDataType type, CellView cell) { switch (type) { case ScrollerDataType.Header: RefreshOpenActivityCell(cell as OpenServerActivityCell); break; case ScrollerDataType.Normal: RefreshActivityTypeCell(cell as OpenActivityRankTypeCell); break; } } private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { height = 74; //var sort = index; //if (type == ScrollerDataType.Header) //{ // if (!m_ActivitySpreadDict.ContainsKey(sort) || !m_ActivitySpreadDict[sort] // || !OpenServerActivityCenter.Instance.ExistChildBookmark(sort)) // { // height = 121; // return true; // } //} return false; } private void RefreshOpenActivityCell(OpenServerActivityCell _cell) { var activityType = 0; activityType = _cell.index >= 1000 ? _cell.index / 1000 : _cell.index; var extraValue = _cell.index % 1000; var customActivity = m_OpenServerActivities.Find((x) => { return x == activityType; }); _cell.containerTimer.SetActive(false); _cell.activityType = activityType; _cell.redpoint.redpointId = MainRedDot.REDPOINT_OPENRANK * 100 + activityType; _cell.SetSelect(_cell.activityType == functionOrder); if (_cell.activityType == 0) _cell.icon.SetSprite("OpenServerActivty_QMCB"); else _cell.icon.SetSprite("OpenServerActivty_BOSSFK"); _cell.downArrow.SetActive(false); _cell.upArrow.SetActive(false); _cell.funcBtn.onClick.RemoveAllListeners(); _cell.funcBtn.onClick.AddListener(() => { OnActivityClick(_cell.activityType); }); } private void CloseOtherWin() { var children = WindowConfig.GetChildWindows("OpenServerActivityRankWin"); foreach (var window in children) { WindowCenter.Instance.Close(window); } } private void OnActivityClick(int _order) { if (functionOrder != _order) { functionOrder = _order; OnOpenActivity(functionOrder); } UpdateFunctionBtns(); } private void OnOpenActivity(int _order) { CloseOtherWin(); var functionInfos = WindowConfig.GetWindowFunctionInfos("OpenServerActivityRankWin"); var index = functionInfos.FindIndex((x) => { return x.order == _order; }); if (index != -1) { WindowCenter.Instance.Open(functionInfos[index].window, true); } } private void OnStepServerDayEvent() { UpdateFunctionBtns(); } private void RefreshActivityTypeCell(OpenActivityRankTypeCell _cell) { int _order = _cell.index / 100; int _type = _cell.index % 100; _cell.redpoint.redpointId = (MainRedDot.REDPOINT_OPENRANK * 100 + _order) * 100 + _type; _cell.titleTxt.text = Language.Get(StringUtility.Contact("ImpactRankType_", _type)); _cell.SetSelect(_type == impactRankModel.presentSelectType); _cell.functionBtn.onClick.RemoveAllListeners(); _cell.functionBtn.onClick.AddListener(() => { OnActivityType(_cell.index); }); if (impactRankModel.IsLock(_type)) { _cell.functionBtn.SetColorful(null, false); _cell.lockImage.SetActive(true); } else { _cell.functionBtn.SetColorful(null, true); _cell.lockImage.SetActive(false); } } private void UpdateFunctionBtns() { m_ActivityCtrl.Refresh(); for (int i = 0; i < m_OpenServerActivities.Count; i++) { var activityId = m_OpenServerActivities[i]; if (!alreadyOpenActivitys.Contains(activityId)) { continue; } switch (activityId) { case 0: m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId); foreach (var _type in impactRankModel.impactRankSorts) { //if (impactRankModel.IsLock(_type)) //{ // continue; //} m_ActivityCtrl.AddCell(ScrollerDataType.Normal, activityId * 100 + _type); } break; default: m_ActivityCtrl.AddCell(ScrollerDataType.Header, activityId); break; } } m_ActivityCtrl.Restart(); m_ActivityCtrl.m_Scorller.RefreshActiveCellViews(); } private void OnActivityType(int _index) { if (!WindowCenter.Instance.IsOpen()) OnActivityClick(0); var _order = _index / 100; var _type = _index % 100; if (impactRankModel.IsLock(_type)) { SysNotifyMgr.Instance.ShowTip("ImpactRankActivityUnOpen", Language.Get(StringUtility.Contact("ImpactRankType_", _type)), impactRankModel.GetOpenStartDay(_type)); return; } impactRankModel.presentSelectType = _type; m_ActivityCtrl.m_Scorller.RefreshActiveCellViews(); } private int Compare(int order_x, int order_y) { var index_x = m_OpenServerActivities.FindIndex((x) => { return order_x == x; }); var index_y = m_OpenServerActivities.FindIndex((x) => { return order_y == x; }); return index_x.CompareTo(index_y); } private void OpenServerActivityStateChange() { bool _update = false; for (int i = 0; i < m_OpenServerActivities.Count; i++) { var activityId = m_OpenServerActivities[i]; if (OpenServerActivityCenter.Instance.IsActivityOpen(activityId) && !alreadyOpenActivitys.Contains(activityId)) { alreadyOpenActivitys.Add(activityId); _update = true; } } if (_update) { UpdateFunctionBtns(); } } } }