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<Text> baseAttrNames; 
 | 
    [SerializeField] List<Text> baseAttrValues; 
 | 
    [SerializeField] List<Image> baseAttrStates; 
 | 
    [SerializeField] GameObject fightAttrGameObj; 
 | 
    [SerializeField] List<GameObject> fightAttrLine; 
 | 
    [SerializeField] List<Text> fightAttrNames; 
 | 
    [SerializeField] List<Text> fightAttrValues; 
 | 
    [SerializeField] List<Image> 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; 
 | 
        }); 
 | 
  
 | 
    } 
 | 
    /// <summary> 
 | 
    ///  
 | 
    /// </summary> 
 | 
    /// <param name="equip">本件装备物品数据</param> 
 | 
    /// <param name="isNewEquip">是否新装备(即掉落背包里的装备)</param> 
 | 
    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("L1039")); 
 | 
        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<RectTransform>().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(); 
 | 
  
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
} 
 |