using UnityEngine; using UnityEngine.UI; using System.Collections.Generic; using System; public class MinggeEquipChangeCell : MonoBehaviour { [SerializeField] MinggeItemCell itemCell; [SerializeField] Text itemName; [SerializeField] OutlineEx itemNameOutline; [SerializeField] GameObject presetGO; [SerializeField] Text presetName; [SerializeField] Image nameBG; [SerializeField] Image bgFlower; //背景花纹变色 [SerializeField] Text fightPowerNum; [SerializeField] List fightAttrNames; [SerializeField] List fightAttrValues; [SerializeField] List fightAttrStates; [SerializeField] Text skillDesc; [SerializeField] GameObject decomposeObject; [SerializeField] Toggle decomposeCheck; [SerializeField] Button decomposeButton; [SerializeField] Button exchangeButton; [SerializeField] Button putonButton; [SerializeField] UIEffectPlayer uieffect; int cmpResult = 0; // 装备对比结果 0相同 1更强 2更弱 int selectMinggePresetID = 0; void Start() { if (putonButton == null) { return; } putonButton.AddListener(() => { MinggeManager.Instance.SendChangeMingge(selectMinggePresetID, MinggeManager.Instance.selectFloorEquip.gridIndex, decomposeCheck.isOn); }); exchangeButton.AddListener(ExchangeEquip); decomposeButton.AddListener(DecomposeEquip); decomposeCheck.onValueChanged.RemoveAllListeners(); decomposeCheck.onValueChanged.AddListener((bool isOn) => { MinggeManager.Instance.isMGEquipUIDecomposeToggle = !MinggeManager.Instance.isMGEquipUIDecomposeToggle; }); } /// /// /// /// 本件命格物品数据 /// 是否新装备(即命格掉落背包里的装备) /// 比对的装备 /// 选中的方案对比 public void Display(ItemModel equip, bool isNewEquip, ItemModel oldEquip, int selectPresetID) { selectMinggePresetID = selectPresetID; if (oldEquip == null) cmpResult = 1; itemCell.Display(equip.guid); string qualityName = Language.Get("L1039", MGGuayuQualityConfig.Get(equip.config.ItemColor).ColorName); itemName.text = UIHelper.AppendColor(equip.config.ItemColor, qualityName + equip.config.ItemName, true, 2); itemNameOutline.OutlineColor = UIHelper.GetUIOutlineColor(equip.config.ItemColor); nameBG.SetSprite("MinggeNameBG" + equip.config.ItemColor); bgFlower.color = UIHelper.GetUIColor(equip.config.ItemColor + 1); var activePresetCnt = FuncPresetManager.Instance.GetUnlockCnt((int)FuncPresetType.Mingge); if (!isNewEquip) { presetGO.SetActive(activePresetCnt > 1); presetName.text = FuncPresetManager.Instance.GetFuncPreset((int)FuncPresetType.Mingge, MinggeManager.Instance.equipShowPresetID).PresetName; } else { if (oldEquip == null) { presetGO.SetActive(activePresetCnt > 1); presetName.text = FuncPresetManager.Instance.GetFuncPreset((int)FuncPresetType.Mingge, MinggeManager.Instance.equipShowPresetID).PresetName; } else { presetGO.SetActive(false); } decomposeCheck.isOn = MinggeManager.Instance.isMGEquipUIDecomposeToggle; if (oldEquip == null) { decomposeObject.SetActive(false); decomposeButton.SetActive(false); exchangeButton.SetActive(false); putonButton.SetActive(true); } else { decomposeObject.SetActive(true); decomposeButton.SetActive(true); exchangeButton.SetActive(true); putonButton.SetActive(false); } long showFightPower = FightPowerManager.Instance.GetFightPowerMinggeChange(MinggeManager.Instance.selectFloorEquip, selectPresetID); 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 fightAttrs = EquipModel.Instance.GetEquipFightAttrs(equip); var fightValues = EquipModel.Instance.GetEquipFightValues(equip); for (var i = 0; i < fightAttrNames.Count; i++) { if (i >= fightAttrs.Count) { //显示锁住 fightAttrNames[i].text = Language.Get("Mingge27", MinggeManager.Instance.unlockAttrLVList[i - 1]); fightAttrValues[i].SetActive(false); } else { fightAttrNames[i].text = PlayerPropertyConfig.Get(fightAttrs[i]).Name; fightAttrValues[i].SetActive(true); fightAttrValues[i].text = PlayerPropertyConfig.GetValueDescription(fightAttrs[i], fightValues[i]); } } ShowAttrState(isNewEquip); RefreshEffect(equip); var skillID = EquipModel.Instance.GetEquipSkillID(equip); if (skillID == 0) { skillDesc.text = ""; } else { var dict = MinggeManager.Instance.GetMinggeSkillCountDictByPresetID(selectMinggePresetID); //如果是旧装备 显示当前数量;新装备不同技能数量+1,同技能不变 var hasCnt = dict.ContainsKey(skillID) ? dict[skillID] : 0; var oldSkillID = isNewEquip && oldEquip != null ? EquipModel.Instance.GetEquipSkillID(oldEquip) : 0; var showCnt = isNewEquip ? (oldSkillID == skillID ? hasCnt : hasCnt + 1) : hasCnt; skillDesc.text = Language.Get("L1039", Language.Get($"MinggeSkillType_{skillID}")) + SkillConfig.Get(skillID + showCnt - 1).Description + " " + Language.Get("HeroFates11", showCnt, MinggeManager.Instance.maxSuiteSkillCount); } } void RefreshEffect(ItemModel equip) { int effectID = EquipModel.Instance.equipUIEffects[Math.Min(equip.config.ItemColor + 1, EquipModel.Instance.equipUIEffects.Length) - 1]; if (effectID == 0) { uieffect.Stop(); } else { uieffect.Stop(); uieffect.effectId = effectID; uieffect.Play(); } } //替换装备 void ExchangeEquip() { //穿更弱装备 要提示 if (cmpResult == 2 && decomposeCheck.isOn) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Mingge28"), (bool ok) => { if (ok) { MinggeManager.Instance.SendChangeMingge(selectMinggePresetID, MinggeManager.Instance.selectFloorEquip.gridIndex, decomposeCheck.isOn); } }); } else { MinggeManager.Instance.SendChangeMingge(selectMinggePresetID, MinggeManager.Instance.selectFloorEquip.gridIndex, decomposeCheck.isOn); } } //分解装备 void DecomposeEquip() { //分解更强装备要提示 if (cmpResult == 1) { ConfirmCancel.ShowPopConfirm(Language.Get("Mail101"), Language.Get("Mingge29"), (bool ok) => { if (ok) { MinggeManager.Instance.SendDecompose(new byte[] { (byte)MinggeManager.Instance.selectFloorEquip.gridIndex }); } }); } else { var item = PackManager.Instance.GetItemByIndex(PackType.MinggeDrop, MinggeManager.Instance.selectFloorEquip.gridIndex); if (item != null) { MinggeManager.Instance.SendDecompose(new byte[] { (byte)MinggeManager.Instance.selectFloorEquip.gridIndex }); } else { Debug.LogError("命格掉落物品已被删除" + MinggeManager.Instance.selectFloorEquip.gridIndex); UIManager.Instance.CloseWindow(); } } } void ShowAttrState(bool isNewEquip) { ItemModel oldEquip = null; if (isNewEquip) { //找是否有对比装备 oldEquip = PackManager.Instance.GetItemByIndex(PackType.Mingge, MinggeManager.Instance.GetPackIndex(selectMinggePresetID, MinggeManager.Instance.selectFloorEquip.config.EquipPlace)); } if (oldEquip == null) { //单装备 和 旧装备会走这个逻辑 for (int i = 0; i < fightAttrStates.Count; i++) { if (!isNewEquip) { //对比的时候旧装备UI oldEquip = PackManager.Instance.GetItemByIndex(PackType.Mingge, MinggeManager.Instance.GetPackIndex(selectMinggePresetID, MinggeManager.Instance.selectFloorEquip.config.EquipPlace)); var list2 = EquipModel.Instance.GetEquipFightValues(oldEquip); if (list2 == null || i >= list2.Count) { fightAttrStates[i].SetActive(true); fightAttrStates[i].SetOrgSprite("heroreborn_img_108", "Common"); fightAttrStates[i].SetNativeSize(); fightAttrStates[i].transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); } else { fightAttrStates[i].SetActive(false); } continue; } var list = EquipModel.Instance.GetEquipFightValues(MinggeManager.Instance.selectFloorEquip); if (list == null || i >= list.Count) { fightAttrStates[i].SetActive(true); fightAttrStates[i].SetOrgSprite("heroreborn_img_108", "Common"); fightAttrStates[i].SetNativeSize(); fightAttrStates[i].transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); } else { fightAttrStates[i].SetActive(true); fightAttrStates[i].SetSprite("GiftState2"); fightAttrStates[i].SetNativeSize(); fightAttrStates[i].transform.localScale = Vector3.one; } } return; } for (int i = 0; i < fightAttrStates.Count; i++) { //战斗属性 排序和个数不一致 根据ID进行对比 var list = EquipModel.Instance.GetEquipFightValues(MinggeManager.Instance.selectFloorEquip); var list2 = EquipModel.Instance.GetEquipFightValues(oldEquip); var idList = EquipModel.Instance.GetEquipFightAttrs(MinggeManager.Instance.selectFloorEquip); var idList2 = EquipModel.Instance.GetEquipFightAttrs(oldEquip); if (list == null || i >= list.Count) { fightAttrStates[i].SetActive(true); fightAttrStates[i].SetOrgSprite("heroreborn_img_108", "Common"); fightAttrStates[i].SetNativeSize(); fightAttrStates[i].transform.localScale = new Vector3(0.7f, 0.7f, 0.7f); } else { fightAttrStates[i].transform.localScale = Vector3.one; 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(); } } } } }