//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Tuesday, July 16, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class EquipStarMaterialSelectWin : Window { [SerializeField] CyclicScroll m_MaterialScroll; [SerializeField] Text m_SuccessRate; [SerializeField] Button m_OneKeySelect; [SerializeField] Button m_Confirm; [SerializeField] Button m_Close; EquipModel equipModel { get { return ModelCenter.Instance.GetModel(); } } EquipStarModel starModel { get { return ModelCenter.Instance.GetModel(); } } EquipStarMaterialSelectModel model { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Confirm.SetListener(ConfirmSelectedMaterials); m_OneKeySelect.SetListener(OneKeyAddMaterials); m_Close.SetListener(() => { WindowCenter.Instance.Close(); }); } protected override void OnPreOpen() { } protected override void OnAfterOpen() { model.materialSelectEvent += DisplaySuccessRate; } protected override void OnPreClose() { model.materialSelectEvent -= DisplaySuccessRate; } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); model.ClearSelectedMaterials(); model.InitMaterials(starModel.normalMaterials.Fetch()); DisplayMaterials(); DisplaySuccessRate(); } #endregion private void DisplayMaterials() { var equipPosition = new Int2(starModel.selectedLevel.value, starModel.selectedPlace.value); var starLevel = starModel.GetStarLevel(equipPosition); var materials = starModel.GetMaterials(equipPosition, starLevel + 1); materials.Sort(MaterialSort); if (!materials.IsNullOrEmpty()) { m_MaterialScroll.gameObject.SetActive(true); m_MaterialScroll.Init(GetMaterialCouples(materials)); } else { m_MaterialScroll.gameObject.SetActive(false); } } private List GetMaterialCouples(List materials) { if (materials.IsNullOrEmpty()) { return null; } var couples = new List(); for (int i = 0; i < materials.Count; i++, i++) { var couple = new string[2]; couples.Add(couple); couple[0] = materials[i]; if (i + 1 < materials.Count) { couple[1] = materials[i + 1]; } } return couples; } private void OneKeyAddMaterials() { var equipPosition = new Int2(starModel.selectedLevel.value, starModel.selectedPlace.value); var starLevel = starModel.GetStarLevel(equipPosition); var materials = starModel.GetMaterials(equipPosition, starLevel + 1); materials.Sort(MaterialSort); for (var i = 0; i < materials.Count; i++) { model.AddMaterial(materials[i]); if (model.CalculateSuccessRate() >= 1.0f) { break; } } } private void ConfirmSelectedMaterials() { var materials = model.GetSelectedMaterials(); foreach (var guid in materials) { starModel.AddMaterial(guid); } WindowCenter.Instance.Close(); } private void DisplaySuccessRate() { int successRate = Mathf.RoundToInt(model.CalculateSuccessRate() * 100); m_SuccessRate.text = StringUtility.Contact("成功率:", successRate, "%"); if (successRate < 50) { m_SuccessRate.color = UIHelper.GetUIColor(TextColType.Red, true); } else if (successRate < 80) { m_SuccessRate.color = UIHelper.GetUIColor(TextColType.NavyBrown, true); } else { m_SuccessRate.color = UIHelper.GetUIColor(TextColType.Green, true); } } private int MaterialSort(string materialA, string materialB) { var itemA = packModel.GetItemByGuid(materialA); var itemB = packModel.GetItemByGuid(materialB); if (itemA.isAuction && !itemB.isAuction) { return 1; } var isFightUpA = ItemLogicUtility.Instance.IsFightUp(itemA.itemId, itemA.score) == 1; var isFightUpB = ItemLogicUtility.Instance.IsFightUp(itemB.itemId, itemB.score) == 1; if (isFightUpA && !isFightUpB) { return -1; } if (!isFightUpA && isFightUpB) { return 1; } var isSuitA = itemA.config.SuiteiD == 1; var isSuitB = itemB.config.SuiteiD == 1; if (isSuitA && !isSuitB) { return -1; } if (!isSuitA && isSuitB) { return 1; } if (itemA.score != itemB.score) { return itemA.score.CompareTo(itemB.score); } return itemA.itemId.CompareTo(itemB.itemId); } } }