//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, July 18, 2018 //-------------------------------------------------------- using Spine; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; //砍树获得装备界面 namespace vnxbqy.UI { public class EquipExchangeWin : Window { [SerializeField] EquipExchangeCell oldEquipObj; [SerializeField] EquipExchangeCell newEquipObj; [SerializeField] List baseAttrStates; [SerializeField] List fightAttrStates; [SerializeField] Text fightPowerNum; [SerializeField] Toggle decomposeCheck; [SerializeField] Button decomposeButton; [SerializeField] Button exchangeButton; [SerializeField] Button putonButton; [SerializeField] Button closeButton; ItemModel oldEquip; PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } CutTreeModel cutTreeModel { get { return ModelCenter.Instance.GetModel(); } } EquipModel equipModel { get { return ModelCenter.Instance.GetModel(); } } AutoCutTreeModel autoCutTreeModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { decomposeCheck.onValueChanged.AddListener((bool isOn) => { LocalSave.SetBool("floorEDecomp" + PlayerDatas.Instance.baseData.PlayerID, isOn); }); decomposeButton.AddListener(DecomposeEquip); exchangeButton.AddListener(ExchangeEquip); putonButton.AddListener(() => { cutTreeModel.SendCutTreeEquipOP(new byte[] { (byte)cutTreeModel.selectFloorEquip.gridIndex }, 1); CloseClick(); }); closeButton.AddListener(CloseClick); } protected override void OnPreOpen() { decomposeCheck.isOn = LocalSave.GetBool("floorEDecomp" + PlayerDatas.Instance.baseData.PlayerID); packModel.refreshItemCountEvent += OnRefreshItem; Display(); if (cutTreeModel.newEquipIDToGuideID.ContainsKey(cutTreeModel.selectFloorEquip.itemId)) { if (!NewBieCenter.Instance.IsGuideCompleted(cutTreeModel.newEquipIDToGuideID[cutTreeModel.selectFloorEquip.itemId])) NewBieCenter.Instance.StartNewBieGuideEx(cutTreeModel.newEquipIDToGuideID[cutTreeModel.selectFloorEquip.itemId]); } } protected override void OnAfterOpen() { } protected override void OnPreClose() { packModel.refreshItemCountEvent -= OnRefreshItem; } protected override void OnAfterClose() { } #endregion void Display() { oldEquip = GetEquipByFloorEquip(); int oldScore = 0; if (oldEquip == null) { oldEquipObj.SetActive(false); newEquipObj.SetActive(true); newEquipObj.Display(cutTreeModel.selectFloorEquip); decomposeButton.SetActive(false); exchangeButton.SetActive(false); putonButton.SetActive(true); decomposeCheck.SetActive(false); oldScore = 0; } else { oldEquipObj.SetActive(true); newEquipObj.SetActive(true); oldEquipObj.Display(oldEquip); newEquipObj.Display(cutTreeModel.selectFloorEquip); decomposeButton.SetActive(true); exchangeButton.SetActive(true); putonButton.SetActive(false); decomposeCheck.SetActive(true); oldScore = oldEquip.score; } ShowAttrState(); int showFightPower = EquipFightPower.Instance.GetFightPowerBuyScore(cutTreeModel.selectFloorEquip.score - oldScore); if (showFightPower < 0) { fightPowerNum.text = showFightPower.ToString(); fightPowerNum.color = UIHelper.GetUIColor(TextColType.Red, true); } else { fightPowerNum.text = "+" + showFightPower; fightPowerNum.color = UIHelper.GetUIColor(TextColType.Green, true); } } void ShowAttrState() { if (oldEquip == null) { for (int i = 0; i < baseAttrStates.Count; i++) { var list = equipModel.GetEquipBaseValues(cutTreeModel.selectFloorEquip); if (list == null || i >= list.Count) { baseAttrStates[i].SetActive(false); } else { baseAttrStates[i].SetActive(true); baseAttrStates[i].SetSprite("EquipUpIcon"); baseAttrStates[i].SetNativeSize(); } } for (int i = 0; i < fightAttrStates.Count; i++) { var list = equipModel.GetEquipFightValues(cutTreeModel.selectFloorEquip); if (list == null || i >= list.Count) { fightAttrStates[i].SetActive(false); } else { fightAttrStates[i].SetActive(true); fightAttrStates[i].SetSprite("EquipAttrNew"); fightAttrStates[i].SetNativeSize(); } } return; } //基础属性 排序和个数是一致的 for (int i = 0; i < baseAttrStates.Count; i++) { var list = equipModel.GetEquipBaseValues(cutTreeModel.selectFloorEquip); var list2 = equipModel.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 ? "EquipAttrNew" : list[i] > value ? "EquipUpIcon" : "EquipDownIcon"); baseAttrStates[i].SetNativeSize(); } } } for (int i = 0; i < fightAttrStates.Count; i++) { //战斗属性 排序和个数不一致 根据ID进行对比 var list = equipModel.GetEquipFightValues(cutTreeModel.selectFloorEquip); var list2 = equipModel.GetEquipFightValues(oldEquip); var idList = equipModel.GetEquipFightAttrs(cutTreeModel.selectFloorEquip); var idList2 = equipModel.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("EquipAttrNew"); } else { fightAttrStates[i].SetSprite(list[i] > value ? "EquipUpIcon" : "EquipDownIcon"); } fightAttrStates[i].SetNativeSize(); } } } } //获取地板装备对应的身上装备 ItemModel GetEquipByFloorEquip() { var equipGuid = equipModel.GetEquip(new Int2(PlayerDatas.Instance.baseData.suitLevel, cutTreeModel.selectFloorEquip.config.EquipPlace)); if (string.IsNullOrEmpty(equipGuid)) return null; return packModel.GetItemByGuid(equipGuid); } void DecomposeEquip() { //战力判定进行二次确认 if (!cutTreeModel.dontNotifyDecompose && cutTreeModel.selectFloorEquip.score > oldEquip.score) { ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("EquipExchangeWin5"), Language.Get("FlyShoseConfirmwin_Text2"), (bool ok, bool isToggle) => { if (isToggle) { cutTreeModel.dontNotifyDecompose = true; } if (ok) { autoCutTreeModel.isWaitPlayer = false; cutTreeModel.SendCutTreeEquipOP(new byte[] { (byte)cutTreeModel.selectFloorEquip.gridIndex }, 2); } else { WindowCenter.Instance.Open(); } }, Language.Get("EquipExchangeWin6")); } else { autoCutTreeModel.isWaitPlayer = false; cutTreeModel.SendCutTreeEquipOP(new byte[] { (byte)cutTreeModel.selectFloorEquip.gridIndex }, 2); } CloseClick(); } void ExchangeEquip() { //战力判定进行二次确认 if (!cutTreeModel.dontNotifyExchangeDecompose && cutTreeModel.selectFloorEquip.score < oldEquip.score && decomposeCheck.isOn) { ConfirmCancel.ToggleConfirmCancel(Language.Get("Mail101"), Language.Get("EquipExchangeWin4"), Language.Get("FlyShoseConfirmwin_Text2"), (bool ok, bool isToggle) => { if (isToggle) { cutTreeModel.dontNotifyExchangeDecompose = true; } if (ok) { autoCutTreeModel.isWaitPlayer = false; cutTreeModel.SendCutTreeEquipOP(new byte[] { (byte)cutTreeModel.selectFloorEquip.gridIndex }, 1, decomposeCheck.isOn); } else { WindowCenter.Instance.Open(); } }, Language.Get("ItemHandle_Replace")); } else { autoCutTreeModel.isWaitPlayer = false; cutTreeModel.SendCutTreeEquipOP(new byte[] { (byte)cutTreeModel.selectFloorEquip.gridIndex }, 1, decomposeCheck.isOn); } if (decomposeCheck.isOn) { CloseClick(); } } void OnRefreshItem(PackType packType, int index, int itemID) { if (packType == PackType.EquipOnFloor) { Display(); } } } }