//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, April 11, 2018 //-------------------------------------------------------- using System; using System.Collections.Generic; using UnityEngine; using System.Text; using Snxxz.UI; using UnityEngine.UI; namespace Snxxz.UI { public class HighSettingFadeInFadeOut : MonoBehaviour { [SerializeField] Button m_Switch;//切换按钮1 [SerializeField] Image m_ArrowOpen; [SerializeField] Image m_ArrowClose; [SerializeField] MainWinTopGrid[] m_GridGroup1; [SerializeField] MainWinTopGrid[] m_GridGroup2; State state = State.Closed; float closeTimer = 0f; TreasureFindHostModel hostModel { get { return ModelCenter.Instance.GetModel(); } } LimitedTimePackageItemClassModel limitedTimePackageItemModel { get { return ModelCenter.Instance.GetModel(); } } ImpactRankModel impactRankModel { get { return ModelCenter.Instance.GetModel(); } } OpenServiceAchievementModel OpenServerModel { get { return ModelCenter.Instance.GetModel(); } } void Start() { m_Switch.SetListener(() => { Switch(state == State.Closed); }); SwitchImmedidately(false); } public void Init() { RefreshGridsActiveState(); TimeUtility.OnServerOpenDayRefresh += OnStepServerDay; FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange; hostModel.TreasureFindHostCompleteAct += TreasureFindHostCompleteAct; RedpointCenter.Instance.redpointValueChangeEvent += UpdateRedpoint; OpenServerActivityCenter.Instance.openServerActivityStateChange += OpenServerActivityStateChange; OperationTimeHepler.Instance.operationStartEvent += OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent += OperationEndEvent; limitedTimePackageItemModel.UpdateLimitedTimePackageItem += UpdateLimitedTimePackageItem; impactRankModel.inImpactRankUpdate += InImpactRankUpdate; OpenServerModel.IsOpenEvent += IsOpenEvent; OpenServerModel.IsPreviewTimeUpdate += IsOpenEvent; OperationTimeHepler.Instance.operationAdvanceEvent += OperationAdvanceEvent; } public void UnInit() { FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange; hostModel.TreasureFindHostCompleteAct -= TreasureFindHostCompleteAct; TimeUtility.OnServerOpenDayRefresh -= OnStepServerDay; OpenServerActivityCenter.Instance.openServerActivityStateChange -= OpenServerActivityStateChange; RedpointCenter.Instance.redpointValueChangeEvent -= UpdateRedpoint; OperationTimeHepler.Instance.operationStartEvent -= OperationStartEvent; OperationTimeHepler.Instance.operationEndEvent -= OperationEndEvent; limitedTimePackageItemModel.UpdateLimitedTimePackageItem -= UpdateLimitedTimePackageItem; impactRankModel.inImpactRankUpdate -= InImpactRankUpdate; OpenServerModel.IsOpenEvent -= IsOpenEvent; OpenServerModel.IsPreviewTimeUpdate -= IsOpenEvent; OperationTimeHepler.Instance.operationAdvanceEvent -= OperationAdvanceEvent; } void Switch(bool active) { var index = 0; foreach (var grid in m_GridGroup1) { if (!grid.alwayShow) { grid.Switch(active, 0); } if (grid.gameObject.activeInHierarchy) { index++; } } index = 0; foreach (var grid in m_GridGroup2) { if (!grid.alwayShow) { grid.Switch(active, (index / 7) + 1); } if (grid.gameObject.activeInHierarchy) { index++; } } state = active ? State.Opened : State.Closed; DisplayArrow(state); if (state == State.Opened) { closeTimer = GeneralDefine.mainWinTopCloseTime; } } public void SwitchImmedidately(bool active) { foreach (var grid in m_GridGroup1) { if (!grid.alwayShow) { grid.SwitchImmediately(active, 0); } } var index = 0; foreach (var grid in m_GridGroup2) { if (!grid.alwayShow) { grid.SwitchImmediately(active, (index / 7) + 1); } if (grid.gameObject.activeInHierarchy) { index++; } } state = active ? State.Opened : State.Closed; DisplayArrow(state); if (state == State.Opened) { closeTimer = GeneralDefine.mainWinTopCloseTime; } } private void OperationAdvanceEvent(Operation obj) { RefreshGridsActiveState(); } private void IsOpenEvent() { RefreshGridsActiveState(); } private void InImpactRankUpdate() { RefreshGridsActiveState(); } private void UpdateLimitedTimePackageItem() { RefreshGridsActiveState(); } private void OperationEndEvent(Operation arg1, int arg2) { RefreshGridsActiveState(); } private void OperationStartEvent(Operation arg1, int arg2) { RefreshGridsActiveState(); } private void UpdateRedpoint(int redPointID) { if (redPointID == 201 || redPointID == 210) { RefreshGridsActiveState(); } } private void OpenServerActivityStateChange() { RefreshGridsActiveState(); } private void OnStepServerDay()//开服活动 { var days = ModelCenter.Instance.GetModel().openServerActivityDays; if (TimeUtility.OpenDay >= days) { RefreshGridsActiveState(); } } private void TreasureFindHostCompleteAct()//仙宝寻主 { RefreshGridsActiveState(); } private void OnFuncStateChange(int obj) { RefreshGridsActiveState(); } private void RefreshGridsActiveState() { foreach (var grid in m_GridGroup1) { var active = grid.IsOpen(); if (active && !grid.gameObject.activeSelf) { grid.gameObject.SetActive(true); } if (!active && grid.gameObject.activeSelf) { grid.gameObject.SetActive(false); } } foreach (var grid in m_GridGroup2) { var active = grid.IsOpen(); if (active && !grid.gameObject.activeSelf) { grid.gameObject.SetActive(true); } if (!active && grid.gameObject.activeSelf) { grid.gameObject.SetActive(false); } } m_Switch.gameObject.SetActive(IsShowButton()); } bool IsShowButton() { foreach (var grid in m_GridGroup1) { if (!grid.alwayShow && grid.gameObject.activeSelf) { return true; } } foreach (var grid in m_GridGroup2) { if (!grid.alwayShow && grid.gameObject.activeSelf) { return true; } } return false; } private void LateUpdate() { if (!NewBieCenter.Instance.inGuiding) { if (state == State.Opened) { closeTimer -= Time.deltaTime; if (closeTimer <= 0f) { Switch(false); } } } } private void DisplayArrow(State state) { m_ArrowOpen.gameObject.SetActive(state == State.Opened); m_ArrowClose.gameObject.SetActive(state == State.Closed); } public enum State { Opened, Closed, } } }