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("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<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();
|
|
}
|
}
|
}
|
}
|
|
}
|