using System; using UnityEngine; using UnityEngine.UI; using TableConfig; using System.Collections.Generic; using System.Text; using System.Collections; namespace Snxxz.UI { public class MakeDrugCell : MonoBehaviour { [SerializeField] Image icon; [SerializeField] Button iconBtn; [SerializeField] Image iconBGIcon; [SerializeField] Text itemCntText; [SerializeField] Slider numSlider; [SerializeField] Text useCntText; [SerializeField] Text attrDesText; [SerializeField] Text nameText; [SerializeField] Button useBtn; [SerializeField] Image useBtnBG; [SerializeField] Text useBtnText; [SerializeField] GameObject reachMaxUse; Dictionary attrDict = new Dictionary(); StringBuilder attrSB = new StringBuilder(); PlayerPackModel _playerPack; PlayerPackModel playerPack { get { return _playerPack ?? (_playerPack = ModelCenter.Instance.GetModel()); } } BlastFurnaceModel furnaceModel { get { return ModelCenter.Instance.GetModel(); } } ItemTipsModel _itemTipsModel; ItemTipsModel itemTipsModel { get { return _itemTipsModel ?? (_itemTipsModel = ModelCenter.Instance.GetModel()); } } int itemId = 0; Color32 brightColor = new Color32(64,28,6,255); Color32 greyColor = new Color32(247, 247, 247, 255); AttrFruitConfig fruitConfig; private void OnEnable() { attrDesText.gameObject.SetActive(false); iconBtn.AddListener(ClickIconBtn); playerPack.RefreshItemSumUseCntAct += RefreshItemUsce; playerPack.RefreshItemCountAct += RefreshItemCnt; StartCoroutine(SetAttrDesUI()); } private void OnDisable() { playerPack.RefreshItemSumUseCntAct -= RefreshItemUsce; playerPack.RefreshItemCountAct -= RefreshItemCnt; iconBtn.RemoveAllListeners(); useBtn.RemoveAllListeners(); } IEnumerator SetAttrDesUI() { yield return null; attrDesText.gameObject.SetActive(true); } public void InitModel(int id) { attrDict.Clear(); this.itemId = id ; ItemConfig itemConfig = Config.Instance.Get(itemId); if (itemConfig == null) return; fruitConfig = Config.Instance.Get(itemId); icon.SetSprite(itemConfig.IconKey); iconBGIcon.SetItemBackGround(itemConfig.ItemColor); nameText.text = itemConfig.ItemName; nameText.color = UIHelper.GetUIColor(itemConfig.ItemColor,true); numSlider.minValue = 0; numSlider.maxValue = fruitConfig.MaxUseCnt; if(itemConfig.Effect1 != 0) { attrDict.Add(itemConfig.Effect1,itemConfig.EffectValueA1); } if (itemConfig.Effect2 != 0) { attrDict.Add(itemConfig.Effect2, itemConfig.EffectValueA2); } if (itemConfig.Effect3 != 0) { attrDict.Add(itemConfig.Effect3, itemConfig.EffectValueA3); } if (itemConfig.Effect4 != 0) { attrDict.Add(itemConfig.Effect4, itemConfig.EffectValueA4); } if (itemConfig.Effect5 != 0) { attrDict.Add(itemConfig.Effect5, itemConfig.EffectValueA5); } RefreshUI(); } private void RefreshUI() { int haveCnt = playerPack.GetItemCountByID(PackType.rptItem, itemId); itemCntText.text = StringUtility.Contact(haveCnt,"/",1); int useNum = playerPack.GetSumUseCntByID(itemId); numSlider.value = useNum; useCntText.text = StringUtility.Contact(useNum,"/",numSlider.maxValue); attrSB.Length = 0; foreach(var id in attrDict.Keys) { PlayerPropertyConfig attrConfig = Config.Instance.Get(id); if(attrConfig != null) { int value = attrDict[id] * useNum; string valueStr = StringUtility.Contact("+", UIHelper.GetTextColorByItemColor(TextColType.Green, GetProValueTypeStr(attrConfig, value), true)); string attrStr = StringUtility.Contact(attrConfig.Name, valueStr); if(attrSB.Length != 0) { attrSB.Append(" " + attrStr); } else { attrSB.Append(attrStr); } } else { DebugEx.Log("属性表中不存在此属性:" + id + "丹药Id" + this.itemId); } } attrDesText.text = attrSB.ToString(); useBtn.RemoveAllListeners(); if (useNum < fruitConfig.MaxUseCnt) { reachMaxUse.SetActive(false); useBtnText.text = Language.Get("KnapS103"); useBtn.AddListener(ClickMakeUseBtn); useBtn.gameObject.SetActive(true); if (haveCnt > 0) { useBtnBG.material = MaterialUtility.GetUIDefaultGraphicMaterial(); useBtnText.color = brightColor; } else { useBtnBG.material = MaterialUtility.GetInstantiatedSpriteGrayMaterial(); useBtnText.color = greyColor; } } else { useBtn.gameObject.SetActive(false); reachMaxUse.SetActive(true); } } private void RefreshItemUsce(int id) { if (id != itemId) return; RefreshUI(); } private void RefreshItemCnt(PackType type, int index, int id) { if (type != PackType.rptItem || id != itemId) return; RefreshUI(); } 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; } private void ClickMakeUseBtn() { SinglePackModel singlePack = playerPack.GetSinglePackModel(PackType.rptItem); if (singlePack == null) return; List list = null; singlePack.GetItemCountByID(itemId,out list); if(list.Count > 0) { if(PackSendQuestMgr.Instance.CheckItemUselimit(list[0].chinItemModel)) { PackSendQuestMgr.Instance.SendMakeUseQuest(list[0].itemInfo.ItemPlace); } } } private void ClickRecycle() { furnaceModel.RecycleDrug(itemId, fruitConfig.RecycleExp); } private void ClickIconBtn() { ItemAttrData attrData = new ItemAttrData(itemId); itemTipsModel.SetItemTipsModel(attrData); } } }