using System; using TableConfig; using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; namespace Snxxz.UI { public class PreviewCell : MonoBehaviour { [SerializeField] Text suitNameText; [SerializeField] Text partNameText; [SerializeField] RectTransform partParent; [SerializeField] GameObject suitAttrObj; [SerializeField] RectTransform suitAttrParent; PlayerSuitModel _suitModel; PlayerSuitModel SuitModel { get { return _suitModel ?? (_suitModel = ModelCenter.Instance.GetModel()); } } ActivateSuitData suitData; EquipSuitAttrConfig suitAttrConfig = null; public string suitId { get; private set; } public Dictionary partNameDict = new Dictionary(); public Dictionary> suitAttrDict = new Dictionary>(); public readonly Color32 noActivityColor = new Color32(255, 244, 205, 153); Color32 lowSuitColor = new Color32(248, 152, 59, 255); Color32 highSuitColor = new Color32(250,1,1, 255); public void InitUI(string suitID) { this.suitId = suitID; suitAttrConfig = EquipSuitAttrConfig.GetSuitAttrConfigBySuitID(suitID); if (suitAttrConfig == null) return; partNameDict.Clear(); suitAttrDict.Clear(); CreatePart(); CreateSuitAttr(); } public void RefreshUI(string suitID) { this.suitId = suitID; suitData = SuitModel.GetSingleSuitAttr(suitID); if(!suitData.Equals(default(ActivateSuitData))) { DebugEx.Log("RefreshUI:" + suitID); string suitName = StringUtility.Contact(suitData.attrConfig.name, "(", suitData.suitCnt,"/", suitData.attrConfig.count3, ")"); suitNameText.text = suitName; if(suitData.attrConfig.suiteType == 1) { suitNameText.color = lowSuitColor; } else if(suitData.attrConfig.suiteType == 2) { suitNameText.color = highSuitColor; } this.gameObject.SetActive(true); foreach (var place in partNameDict.Keys) { partNameDict[place].gameObject.SetActive(true); if(suitData.equipPlacelist.Contains(place)) { partNameDict[place].color = UIHelper.s_DarkGreenColor; } else { partNameDict[place].color = noActivityColor; } } foreach(var suitCnt in suitAttrDict.Keys) { if(suitData.suitCnt >= suitCnt) { for(int i= 0; i < suitAttrDict[suitCnt].Count; i++) { suitAttrDict[suitCnt][i].color = UIHelper.s_DarkGreenColor; } } else { for (int i = 0; i < suitAttrDict[suitCnt].Count; i++) { suitAttrDict[suitCnt][i].color = noActivityColor; } } } } else { this.gameObject.SetActive(false); } } private void CreatePart() { for(int i = 0; i < suitAttrConfig.count3;i++) { Text go = Instantiate(partNameText); partNameText.gameObject.SetActive(false); go.transform.SetParent(partParent); go.transform.localPosition = Vector3.zero; go.transform.localScale = Vector3.one; string partName = StringUtility.Contact(suitAttrConfig.name, UIHelper.GetEquipAreaName(SuitModel.GetEquipPlaceByGroupType(suitAttrConfig.groupType)[i])); go.text = partName; int equipPlace = SuitModel.GetEquipPlaceByGroupType(suitAttrConfig.groupType)[i]; partNameDict.Add(equipPlace,go); } } private void CreateSuitAttr() { int[] firstProlist = ConfigParse.GetMultipleStr(suitAttrConfig.propList1); int[] firstProValuelist = ConfigParse.GetMultipleStr(suitAttrConfig.propValueList1); int[] secondProlist = ConfigParse.GetMultipleStr(suitAttrConfig.propList2); int[] secondProValuelist = ConfigParse.GetMultipleStr(suitAttrConfig.propValueList2); int[] thirdProlist = ConfigParse.GetMultipleStr(suitAttrConfig.propList3); int[] thirdProValuelist = ConfigParse.GetMultipleStr(suitAttrConfig.propValueList3); int sumLength = firstProlist.Length + secondProlist.Length + thirdProlist.Length; int length1 = firstProlist.Length; int length2 = firstProlist.Length + secondProlist.Length; List attrCnt1Textlist = new List(); List attrCnt2Textlist = new List(); List attrCnt3Textlist = new List(); for (int i = 0; i < sumLength; i++) { GameObject go = Instantiate(suitAttrObj); suitAttrObj.SetActive(false); go.SetActive(true); go.transform.SetParent(suitAttrParent); go.transform.localPosition = Vector3.zero; go.transform.localScale = Vector3.one; Text numText = go.transform.Find("NumText").GetComponent(); Text attrDesText = go.transform.Find("AttrDes").GetComponent(); if (i == 0) { numText.text = Language.Get("EquipSuit111", suitAttrConfig.count1.ToString()); numText.gameObject.SetActive(true); } else if (i == length1) { numText.text = Language.Get("EquipSuit111", suitAttrConfig.count2.ToString()); numText.gameObject.SetActive(true); } else if (i == length2) { numText.text = Language.Get("EquipSuit111", suitAttrConfig.count3.ToString()); numText.gameObject.SetActive(true); } else { numText.gameObject.SetActive(false); } PlayerPropertyConfig playerproModel = null; string attrDes = ""; if (i < length1) { playerproModel = Config.Instance.Get(firstProlist[i]); if (playerproModel != null) { attrDes = StringUtility.Contact(playerproModel.Name,"+", GetProValueTypeStr(playerproModel, firstProValuelist[i])); attrDesText.text = attrDes; } attrCnt1Textlist.Add(numText); attrCnt1Textlist.Add(attrDesText); if (!suitAttrDict.ContainsKey(suitAttrConfig.count1)) { suitAttrDict.Add(suitAttrConfig.count1, attrCnt1Textlist); } } else if (i >= length1 && i < length2) { playerproModel = Config.Instance.Get(secondProlist[i - length1]); if (playerproModel != null) { attrDes = StringUtility.Contact(playerproModel.Name, "+", GetProValueTypeStr(playerproModel, secondProValuelist[i-length1])); attrDesText.text = attrDes; } attrCnt2Textlist.Add(numText); attrCnt2Textlist.Add(attrDesText); if (!suitAttrDict.ContainsKey(suitAttrConfig.count2)) { suitAttrDict.Add(suitAttrConfig.count2, attrCnt2Textlist); } } else if (i >= length2 && i < sumLength) { playerproModel = Config.Instance.Get(thirdProlist[i - length2]); if (playerproModel != null) { attrDes = StringUtility.Contact(playerproModel.Name, "+", GetProValueTypeStr(playerproModel, thirdProValuelist[i - length2])); attrDesText.text = attrDes; } attrCnt3Textlist.Add(numText); attrCnt3Textlist.Add(attrDesText); if (!suitAttrDict.ContainsKey(suitAttrConfig.count3)) { suitAttrDict.Add(suitAttrConfig.count3, attrCnt3Textlist); } } } } public string GetProValueTypeStr(PlayerPropertyConfig playerproModel, int value) { string s = ""; if (playerproModel.ISPercentage == 0) { s = value.ToString(); } else if (playerproModel.ISPercentage == 1) { s = (float)Math.Round(value / 100f, 1) + "%"; } else if (playerproModel.ISPercentage == 2) { s = ((float)Math.Round(value / 100f, 1)).ToString(); } return s; } } }