//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, April 10, 2018 //-------------------------------------------------------- using System.Collections.Generic; using UnityEngine; namespace vnxbqy.UI { public class RightBottomFadeInOut : MonoBehaviour { [SerializeField] List m_Grids; [SerializeField] RectTransform m_Container; [SerializeField] Vector2 m_GridSize; [SerializeField] Vector2 m_Space; public void Init() { RefreshGridsActiveState(); FuncOpen.Instance.OnFuncStateChangeEvent += OnFuncStateChange; } public void UnInit() { FuncOpen.Instance.OnFuncStateChangeEvent -= OnFuncStateChange; } public void Switch(bool show) { var index = 0; foreach (var grid in m_Grids) { var offset = index / 4; grid.Switch(show, offset * (m_GridSize.x + m_Space.x), offset * 0.1f); if (grid.gameObject.activeInHierarchy) { index++; } } } public void SwitchImmedidately(bool show) { var index = 0; foreach (var grid in m_Grids) { var offset = index / 4; grid.SwitchImmediately(show, offset * (m_GridSize.x + m_Space.x)); if (grid.gameObject.activeInHierarchy) { index++; } } } private void OnFuncStateChange(int functionId) { RefreshGridsActiveState(); } private void RefreshGridsActiveState() { m_Grids.Sort((MainWinRightBottomGrid x, MainWinRightBottomGrid y) => { return x.index.CompareTo(y.index); }); foreach (var grid in m_Grids) { var active = grid.IsOpen(); if (active && !grid.gameObject.activeSelf) { grid.SetActive(true); } if (!active && grid.gameObject.activeSelf) { grid.SetActive(false); } } Layout(); } [ContextMenu("Layout")] public void Layout() { var index = 0; foreach (var grid in m_Grids) { if (grid.gameObject.activeSelf) { var row = index % 4; var column = index / 4; var x = m_Container.rect.width * 0.5f - m_GridSize.x * (column + 0.5f) - m_Space.x * column; var y = m_Container.rect.height * 0.5f - m_GridSize.y * (row + 0.5f) - m_Space.y * row; grid.rectTransform.anchoredPosition = new Vector2(x, y); index++; } } foreach (var grid in m_Grids) { if (grid.gameObject.activeSelf) { grid.transform.SetAsFirstSibling(); } } } } }