//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, December 17, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class GatherSoulDungeonGetItemWin : Window { [SerializeField] int m_LineCount = 5; [SerializeField] ScrollerController m_ScrollerControl; GatherSoulDungeonModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_ScrollerControl.OnRefreshCell += OnRefreshCell; m_ScrollerControl.OnGetDynamicSize += OnGetDynamicSize; m_ScrollerControl.lockType = EnhanceLockType.KeepVertical; } protected override void OnPreOpen() { model.missionHelpUpdate += MissionHelpUpdate; Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.missionHelpUpdate -= MissionHelpUpdate; } protected override void OnAfterClose() { } #endregion private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { height = 0; if (type == ScrollerDataType.Normal) { var weel = index / 100; var line = index % 100; bool requireLine = false; if (weel < model.mission.wheel) { List list; if (model.TryGetDungeonItems(weel, out list)) { if (line == list.Count / m_LineCount) { requireLine = true; } } } height = requireLine ? 92 : 82; return true; } return false; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { if (type == ScrollerDataType.Header) { var weelCell = cell as GatherSoulDungeonWeelCell; weelCell.Display(cell.index); } else if (type == ScrollerDataType.Normal) { var itemCell = cell as GatherSoulDungeonItemCell; var weel = cell.index / 100; var line = cell.index % 100; bool requireLine = false; if (weel < model.mission.wheel) { List list; if (model.TryGetDungeonItems(weel, out list)) { if (line == list.Count / m_LineCount) { requireLine = true; } } } itemCell.Display(weel, line, requireLine); } } private void MissionHelpUpdate() { Display(); } void Display() { m_ScrollerControl.Refresh(); var mission = model.mission; for (int i = 1; i <= mission.wheel; i++) { List list; if (model.TryGetDungeonItems(i, out list)) { m_ScrollerControl.AddCell(ScrollerDataType.Header, i); var line = Mathf.CeilToInt((float)list.Count / m_LineCount); for (int k = 0; k < line; k++) { m_ScrollerControl.AddCell(ScrollerDataType.Normal, i * 100 + k); } } } m_ScrollerControl.Restart(); } } }