using System.Collections.Generic; using UnityEngine; public class SimpleMinggeAttributeWin : UIBase { [SerializeField] TextEx title; [SerializeField] ScrollerController scroller; [SerializeField] ScrollerController skillScroller; [SerializeField] SimpleMinggeAttributeCell simpleMinggeAttributeCell; Dictionary simpleAttrDict; List simpleAttrSortList; string simpleAttrTitleName; Dictionary skillDic; List skillList; protected override void OnPreOpen() { simpleAttrDict = AttributeManager.Instance.simpleAttrDict; simpleAttrSortList = AttributeManager.Instance.simpleAttrSortList; simpleAttrTitleName = AttributeManager.Instance.simpleAttrTitleName; skillDic = AttributeManager.Instance.skillDic; skillList = AttributeManager.Instance.skillList; skillScroller.OnGetDynamicSize += OnGetSkillChatDynamicSize; skillScroller.OnRefreshCell += OnRefreshSkillCell; scroller.OnRefreshCell += OnRefreshCell; title.text = simpleAttrTitleName; CreateScroller(); CreateSkillScroller(); } protected override void OnPreClose() { scroller.OnRefreshCell -= OnRefreshCell; skillScroller.OnGetDynamicSize -= OnGetSkillChatDynamicSize; skillScroller.OnRefreshCell -= OnRefreshSkillCell; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, simpleAttrSortList, simpleAttrDict); } private void OnRefreshSkillCell(ScrollerDataType type, CellView cell) { var _cell = cell.GetComponent(); _cell?.Display(cell.index, skillList, skillDic); } private void CreateSkillScroller() { skillScroller.Refresh(); if (skillList != null) { for (int i = 0; i < skillList.Count; i++) { skillScroller.AddCell(ScrollerDataType.Header, i); } } skillScroller.Restart(); } private bool OnGetSkillChatDynamicSize(ScrollerDataType type, int index, out float height) { height = 0; if (skillList.IsNullOrEmpty() || index < 0 || index >= skillList.Count) return false; if (!TryGetContentByIndex(index, out string content)) return false; height = simpleMinggeAttributeCell.GetHeight(content); return true; } private bool TryGetContentByIndex(int index, out string content) { content = string.Empty; if (skillDic.IsNullOrEmpty() || index < 0 || index >= skillList.Count) return false; int skillID = skillList[index]; int lv = skillDic == null || !skillDic.ContainsKey(skillID) ? 0 : skillDic[skillID]; if (!AttributeManager.Instance.TryGetInfoBySkillID(skillID, lv, out string name, out content)) return false; return true; } private void CreateScroller() { scroller.Refresh(); if (simpleAttrSortList != null) { int rowCount = (int)Mathf.Ceil((float)simpleAttrSortList.Count / AttributeManager.Instance.SimpleAttributeMaxRowCnt); for (int i = 0; i < rowCount; i++) { scroller.AddCell(ScrollerDataType.Header, i); } } scroller.Restart(); } }