using System; using System.Collections; using System.Collections.Generic; using Cysharp.Threading.Tasks; using UnityEngine; using UnityEngine.UI; //获得装备模板 public class EquipExchangeCell : MonoBehaviour { [SerializeField] Image equipImage; [SerializeField] Text itemName; [SerializeField] Text qualityName; [SerializeField] OutlineEx itemNameOutline; [SerializeField] OutlineEx qualityNameOutline; [SerializeField] Text placeName; [SerializeField] Text lvText; [SerializeField] Image bgFlower; //背景花纹变色 [SerializeField] Text fightPowerNum; [SerializeField] GameObject fightPowerGO; [SerializeField] GameObject equipedText; [SerializeField] List baseAttrNames; [SerializeField] List baseAttrValues; [SerializeField] List baseAttrStates; [SerializeField] GameObject fightAttrGameObj; [SerializeField] List fightAttrLine; [SerializeField] List fightAttrNames; [SerializeField] List fightAttrValues; [SerializeField] List fightAttrStates; [SerializeField] GameObject decomposeObject; [SerializeField] Toggle decomposeCheck; [SerializeField] GameObject btnsGO; [SerializeField] Button decomposeButton; [SerializeField] Button exchangeButton; [SerializeField] Button putonButton; [SerializeField] UIEffectPlayer uieffect; [SerializeField] RectTransform bgRect; int cmpResult = 0; // 装备对比结果 0相同 1更强 2更弱 bool isToggle = true; void Start() { putonButton.AddListener(() => { EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2); }); exchangeButton.AddListener(ExchangeEquip); decomposeButton.AddListener(DecomposeEquip); decomposeCheck.onValueChanged.RemoveAllListeners(); decomposeCheck.onValueChanged.AddListener((bool isOn) => { isToggle = !isToggle; }); } /// /// /// /// 本件装备物品数据 /// 是否新装备(即掉落背包里的装备) public void Display(ItemModel equip, bool isNewEquip) { var oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1); if (oldEquip == null) cmpResult = 1; equipImage.SetOrgSprite(equip.config.IconKey); itemName.text = UIHelper.AppendColor(equip.config.ItemColor, equip.config.ItemName, true, 1); qualityName.text = UIHelper.GetQualityNameWithColor(equip.config.ItemColor, Language.Get("equipQualityFormat")); itemNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor); qualityNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor); placeName.text = EquipModel.Instance.GetEquipPlaceName(equip.config.EquipPlace); lvText.text = Language.Get("EquipExchangeWin7", EquipModel.Instance.GetEquipLV(equip)); bgFlower.color = UIHelper.GetUIColor(equip.config.ItemColor); if (!isNewEquip) { equipedText.SetActive(true); fightPowerGO.SetActive(false); decomposeObject.SetActive(false); btnsGO.SetActive(false); } else { equipedText.SetActive(false); fightPowerGO.SetActive(true); decomposeObject.SetActive(true); btnsGO.SetActive(true); decomposeCheck.isOn = isToggle; long showFightPower = FightPowerManager.Instance.GetFightPowerChange(EquipModel.Instance.selectFloorEquip); if (showFightPower < 0) { fightPowerNum.text = UIHelper.AppendColor(TextColType.Red, $"-{UIHelper.ReplaceLargeNum(Math.Abs(showFightPower))}", false); cmpResult = 2; } else { cmpResult = showFightPower > 0 ? 1 : 0; fightPowerNum.text = UIHelper.AppendColor(TextColType.Green, $"+{UIHelper.ReplaceLargeNum(showFightPower)}", false); } } var baseAttrs = EquipModel.Instance.GetEquipBaseAttrs(equip); var baseValues = EquipModel.Instance.GetEquipBaseValues(equip); var fightAttrs = EquipModel.Instance.GetEquipFightAttrs(equip); var fightValues = EquipModel.Instance.GetEquipFightValues(equip); for (var i = 0; i < baseAttrNames.Count; i++) { if (i >= baseAttrs.Count) { baseAttrNames[i].text = ""; baseAttrValues[i].text = ""; } else { baseAttrNames[i].text = PlayerPropertyConfig.Get(baseAttrs[i]).Name; baseAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(baseAttrs[i], baseValues[i]); } } if (fightAttrs.IsNullOrEmpty()) { fightAttrGameObj.SetActive(false); } else { fightAttrGameObj.SetActive(true); for (var i = 0; i < fightAttrNames.Count; i++) { if (i >= fightAttrs.Count) { fightAttrNames[i].SetActive(false); } else { fightAttrNames[i].SetActive(true); fightAttrNames[i].text = PlayerPropertyConfig.Get(fightAttrs[i]).Name; fightAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(fightAttrs[i], fightValues[i]); } } } //先缩小,这样不会因为间隔帧产生明显的闪烁 uieffect.transform.localScale = Vector3.zero; ShowAttrState(isNewEquip); RefreshEffect(equip).Forget(); } //延迟处理特效大小 async UniTask RefreshEffect(ItemModel equip) { await UniTask.DelayFrame(3); int effectID = EquipModel.Instance.equipUIEffects[Math.Min(equip.config.ItemColor, EquipModel.Instance.equipUIEffects.Length) - 1]; if (effectID == 0) { uieffect.Stop(); } else { uieffect.Stop(); uieffect.effectId = effectID; //计算高度缩放比例 特效显示依赖rect的排版 uieffect.transform.localScale = new Vector3(0.98f, bgRect.rect.height / uieffect.GetComponent().rect.height, 1); uieffect.Play(); } } //替换装备 void ExchangeEquip() { //穿更弱装备 要提示 if (cmpResult == 2 && decomposeCheck.isOn) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("EquipExchangeWin4"), (bool ok) => { if (ok) { EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2, decomposeCheck.isOn); } }); } else { EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 2, decomposeCheck.isOn); } } //分解装备 void DecomposeEquip() { //分解更强装备要提示 if (cmpResult == 1) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("EquipExchangeWin5"), (bool ok) => { if (ok) { EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 1); } }); } else { EquipModel.Instance.SendEquipOP(new ushort[] { (ushort)EquipModel.Instance.selectFloorEquip.gridIndex }, 1); } } void ShowAttrState(bool isNewEquip) { ItemModel oldEquip = null; if (isNewEquip) { //找对比装备 oldEquip = PackManager.Instance.GetItemByIndex(PackType.Equip, EquipModel.Instance.selectFloorEquip.config.EquipPlace - 1); } if (oldEquip == null) { for (int i = 0; i < baseAttrStates.Count; i++) { baseAttrStates[i].SetActive(false); } for (int i = 0; i < fightAttrStates.Count; i++) { if (!isNewEquip) { //原装备不对比显示 fightAttrStates[i].SetActive(false); continue; } var list = EquipModel.Instance.GetEquipFightValues(EquipModel.Instance.selectFloorEquip); if (list == null || i >= list.Count) { fightAttrStates[i].SetActive(false); } else { fightAttrStates[i].SetActive(true); fightAttrStates[i].SetSprite("GiftState1"); fightAttrStates[i].SetNativeSize(); } } return; } //基础属性 排序和个数是一致的 for (int i = 0; i < baseAttrStates.Count; i++) { var list = EquipModel.Instance.GetEquipBaseValues(EquipModel.Instance.selectFloorEquip); var list2 = EquipModel.Instance.GetEquipBaseValues(oldEquip); if (list == null || i >= list.Count) { baseAttrStates[i].SetActive(false); } else { baseAttrStates[i].SetActive(true); var value = i < list2.Count ? list2[i] : 0; if (list[i] == value) { baseAttrStates[i].SetActive(false); } else { baseAttrStates[i].SetActive(true); baseAttrStates[i].SetSprite(value == 0 ? "GiftState1" : list[i] > value ? "EquipUpIcon" : "EquipDownIcon"); baseAttrStates[i].SetNativeSize(); } } } for (int i = 0; i < fightAttrStates.Count; i++) { //战斗属性 排序和个数不一致 根据ID进行对比 var list = EquipModel.Instance.GetEquipFightValues(EquipModel.Instance.selectFloorEquip); var list2 = EquipModel.Instance.GetEquipFightValues(oldEquip); var idList = EquipModel.Instance.GetEquipFightAttrs(EquipModel.Instance.selectFloorEquip); var idList2 = EquipModel.Instance.GetEquipFightAttrs(oldEquip); if (list == null || i >= list.Count) { fightAttrStates[i].SetActive(false); } else { fightAttrStates[i].SetActive(true); var value = !list2.IsNullOrEmpty() && i < list2.Count ? list2[i] : 0; var id = !idList2.IsNullOrEmpty() && i < idList2.Count ? idList2[i] : 0; if (idList[i] == id && list[i] == value) { fightAttrStates[i].SetActive(false); } else { fightAttrStates[i].SetActive(true); if (idList[i] != id) { fightAttrStates[i].SetSprite("GiftState1"); } else { fightAttrStates[i].SetSprite(list[i] > value ? "EquipUpIcon" : "EquipDownIcon"); } fightAttrStates[i].SetNativeSize(); } } } } }