using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using TableConfig; namespace Snxxz.UI { public class RoleAttrWin : Window { [SerializeField] Button closeBtn; [SerializeField] Button baseBtn; [SerializeField] Button specialBtn; [SerializeField] Image baseImg; [SerializeField] Image specialImg; [SerializeField] Text m_BaseTxt; [SerializeField] Text m_SpecialTxt; private readonly Color selectTxtCol = new Color32(52, 7, 1, 255); private readonly Color unSelectTxtCol = new Color32(125, 91, 52, 255); [SerializeField] ScrollerController m_Controller; private int attrShowType = 0; PlayerPetDatas m_petModel; PlayerPetDatas petmodel { get { return m_petModel ?? (m_petModel = ModelCenter.Instance.GetModel()); } } List propList = null; [SerializeField] Text descText; private void OnSpecialBtn() { if (attrShowType == 2) return; attrShowType = 2; specialImg.SetSprite("2LVSelectTab_b"); baseImg.SetSprite("2LVUnSelectTab_b"); m_BaseTxt.color = unSelectTxtCol; m_SpecialTxt.color = selectTxtCol; OnRefreshScroll(); } private void OnBaseBtn() { if (attrShowType == 1) return; attrShowType = 1; specialImg.SetSprite("2LVUnSelectTab_b"); baseImg.SetSprite("2LVSelectTab_b"); m_BaseTxt.color = selectTxtCol; m_SpecialTxt.color = unSelectTxtCol; OnRefreshScroll(); } private void OnRefreshScroll() { propList = PlayerPropertyConfig.GetPropByType(attrShowType); m_Controller.Refresh(); if (propList != null) { for (int i = 0; i < propList.Count; i++) { PlayerPropertyConfig cfg = propList[i]; m_Controller.AddCell(ScrollerDataType.Header, i); m_Controller.AddCell(ScrollerDataType.Normal, i); } } m_Controller.Restart(); } private void OnRefreshCell(ScrollerDataType type, CellView cell) { int index = cell.index; if (propList != null && index < propList.Count) { PlayerPropertyConfig cfg = propList[index]; switch (type) { case ScrollerDataType.Header: { Text text = cell.transform.Find("Text").GetComponent(); if ((AttrEnum)cfg.ID == AttrEnum.ATK) { text.text = StringUtility.Contact(cfg.Name, " ", "", UIHelper.ReplaceLargeNum(PlayerDatas.Instance.extersion.MINATK), "-", UIHelper.ReplaceLargeNum(PlayerDatas.Instance.extersion.MAXATK), ""); return; } else if ((AttrEnum)cfg.ID == AttrEnum.PetHurt) { if (petmodel.MaxAtkNunber == 0) { text.text = StringUtility.Contact(cfg.Name, " ", "", 0, ""); } else { text.text = StringUtility.Contact(cfg.Name, " ", "", petmodel.MinAtkNunber, "-", petmodel.MaxAtkNunber, ""); } return; } text.text = StringUtility.Contact(cfg.Name, " ", "", UIHelper.ReplaceLargeNum(UIHelper.ReplacePercentage(UIHelper.GetPropertyMapPlayerData((AttrEnum)cfg.ID), cfg.ISPercentage)), cfg.ISPercentage == 1 ? "%" : string.Empty, ""); } break; case ScrollerDataType.Normal: { Text text = cell.transform.Find("DescText").GetComponent(); text.text = cfg.desc; } break; } } } private bool OnGetDynamicSize(ScrollerDataType type, int index, out float height) { height = 0; switch (type) { case ScrollerDataType.Normal: { if (propList != null && index < propList.Count) { PlayerPropertyConfig cfg = propList[index]; height = descText.cachedTextGeneratorForLayout.GetPreferredHeight(cfg.desc, descText.GetGenerationSettings(new Vector2(descText.rectTransform.rect.size.x, 0.0f))) / descText.pixelsPerUnit; } } return true; } return false; } void OnClose() { Close(); } protected override void BindController() { } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshCell; m_Controller.OnGetDynamicSize += OnGetDynamicSize; specialBtn.onClick.AddListener(OnSpecialBtn); baseBtn.onClick.AddListener(OnBaseBtn); closeBtn.onClick.AddListener(OnClose); } protected override void OnPreOpen() { OnBaseBtn(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } } }