//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Wednesday, August 01, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TrialExchangeWin : Window { [SerializeField] ScrollerController m_Controller; [SerializeField] Text m_SelectClass; [SerializeField] Button m_SelectClassUp; [SerializeField] TrialSelectClassBehaviour m_SelectClassBehaviour; //[SerializeField] ItemBehaviour[] m_Tokens; //[SerializeField] Text[] m_TokenCounts; [SerializeField] Button m_Close; TrialDungeonModel model { get { return ModelCenter.Instance.GetModel(); } } DungeonModel dungeonModel { get { return ModelCenter.Instance.GetModel(); } } PackModel packModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshCell; m_Close.onClick.AddListener(CloseClick); m_SelectClassUp.onClick.AddListener(SelectClassUp); } protected override void OnPreOpen() { model.selectEquipClass = 1; m_SelectClassBehaviour.gameObject.SetActive(false); m_SelectClassUp.transform.localEulerAngles = Vector3.zero.SetZ(180); foreach (var mapID in dungeonModel.GetDungeonIds(60010)) { DungeonConfig _tagDungeonModel = DungeonConfig.Get(mapID); DungeonRecord dungeonRecord; if (dungeonModel.TryGetRecord(60010, out dungeonRecord)) { if (dungeonRecord.lineGrades != null && dungeonRecord.lineGrades.ContainsKey(_tagDungeonModel.LineID) && dungeonRecord.lineGrades[_tagDungeonModel.LineID] > 0) { model.selectEquipClass = model.LineToTokenClass(_tagDungeonModel.LineID); } } } var maxClass = 0; if (model.TryGetSatisfyExchange(out maxClass)) { model.selectEquipClass = maxClass; } if (WindowJumpMgr.Instance.IsJumpState) { if (ItemOperateUtility.Instance.useItemModel != null && model.trialTokens.Contains(ItemOperateUtility.Instance.useItemModel.itemId)) { var itemId = ItemOperateUtility.Instance.useItemModel.itemId; var config = ItemConfig.Get(itemId); if (config != null) { model.selectEquipClass = config.LV; } ItemOperateUtility.Instance.useItemModel = null; } } if (model.openFromTask) { model.selectEquipClass = 1; } model.SelectEquipClassEvent += SelectEquipClassEvent; packModel.refreshItemCountEvent += RefreshItemCountAct; Display(); if (!model.openFromTask) { JumpToRedpoint(); } model.openFromTask = false; } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.SelectEquipClassEvent -= SelectEquipClassEvent; packModel.refreshItemCountEvent -= RefreshItemCountAct; } protected override void OnAfterClose() { } #endregion private void OnRefreshCell(ScrollerDataType type, CellView cell) { switch (type) { case ScrollerDataType.Header: var _class = cell.index / 100; var _line = cell.index % 100; TrialExchangeCell trialExchangeCell = cell as TrialExchangeCell; trialExchangeCell.Display(_class, _line); break; case ScrollerDataType.Normal: TrialExchangeTitleCell trialExchangeTitleCell = cell as TrialExchangeTitleCell; trialExchangeTitleCell.Display(cell.index); break; } } private void SelectClassUp() { bool _up = m_SelectClassBehaviour.gameObject.activeSelf; m_SelectClassBehaviour.gameObject.SetActive(!_up); if (!_up) { m_SelectClassBehaviour.Display(); } m_SelectClassUp.transform.localEulerAngles = Vector3.zero.SetZ(_up ? 180 : 0); } void Display() { DisplayTrialExchanges(); DisplaySelectClass(); DisplayTokens(); } void DisplayTrialExchanges() { m_Controller.Refresh(); if (model.selectEquipClass == 1) { var trialClasses = model.GetTotalClass(); for (int i = 0; i < trialClasses.Count; i++) { List list; if (model.TryGetTrialExchanges(trialClasses[i], out list)) { m_Controller.AddCell(ScrollerDataType.Normal, trialClasses[i]); var line = Mathf.CeilToInt((float)list.Count / 3); for (int k = 0; k < line; k++) { m_Controller.AddCell(ScrollerDataType.Header, trialClasses[i] * 100 + k); } } } } else { List list; if (model.TryGetTrialExchanges(model.selectEquipClass, out list)) { var line = Mathf.CeilToInt((float)list.Count / 3); for (int i = 0; i < line; i++) { m_Controller.AddCell(ScrollerDataType.Header, model.selectEquipClass * 100 + i); } } } m_Controller.Restart(); } private void RefreshItemCountAct(PackType packtype, int arg2, int itemId) { var config = ItemConfig.Get(itemId); if (config == null) { return; } if (packtype == PackType.Item) { if (model.trialTokens.Contains(itemId) || config.EquipPlace > 0) { m_Controller.m_Scorller.RefreshActiveCellViews(); DisplayTokens(); } } else if (packtype == PackType.Equip) { m_Controller.m_Scorller.RefreshActiveCellViews(); } } void DisplaySelectClass() { m_SelectClass.text = model.selectEquipClass == 1 ? Language.Get("TrialClassSeleclAll") : Language.Get("EquipSuitLV", Language.Get(StringUtility.Contact("Num_CHS_", model.selectEquipClass))); } void DisplayTokens() { //var list = model.trialClassTokens.ContainsKey(model.selectEquipClass) ? model.trialClassTokens[model.selectEquipClass] : null; //for (int i = 0; i < m_Tokens.Length; i++) //{ // if (list != null && i < list.Count) // { // m_Tokens[i].gameObject.SetActive(model.selectEquipClass != 1); // if (model.selectEquipClass != 1) // { // m_Tokens[i].SetItem(list[i], 0); // m_TokenCounts[i].text = model.GetTrialTokenCount(list[i]).ToString(); // } // } // else // { // m_Tokens[i].gameObject.SetActive(false); // } //} } private void SelectEquipClassEvent() { DisplayTrialExchanges(); DisplaySelectClass(); DisplayTokens(); bool _up = m_SelectClassBehaviour.gameObject.activeSelf; m_SelectClassUp.transform.localEulerAngles = Vector3.zero.SetZ(_up ? 0 : 180); JumpToRedpoint(); } private void JumpToRedpoint() { if (model.selectEquipClass == 1) { var trialClasses = model.GetTotalClass(); var index = 0; for (int i = 0; i < trialClasses.Count; i++) { var line = 0; index += 1; if (JumpToRedpoint(trialClasses[i], out line)) { m_Controller.JumpIndex(index + line); return; } else { List list; if (model.TryGetTrialExchanges(trialClasses[i], out list)) { index += Mathf.CeilToInt((float)list.Count / 3); } } } } else { var line = 0; JumpToRedpoint(model.selectEquipClass, out line); m_Controller.JumpIndex(line); } } private bool JumpToRedpoint(int _class, out int line) { var itemId = 0; line = 0; if (model.IsAnySatisfyExchangeBetterEquip(_class, out itemId)) { List list; if (model.TryGetTrialExchanges(_class, out list)) { for (int i = 0; i < list.Count; i++) { if (list[i].id == itemId) { line = i / 3; return true; } } } } return false; } } }