//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Monday, December 24, 2018 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class KingTreasureWin : Window { [SerializeField] PositionTween m_PositionTween; [SerializeField] Image m_TreasureNameIcon; [SerializeField] RectTransform m_ContainerOnGoing; [SerializeField] Text m_SeasonOnGoingRemind; [SerializeField] RectTransform m_ContainerEnd; [SerializeField] Text m_SeasonEndRemind; [SerializeField] RectTransform m_ContainerGot; [SerializeField] Image m_DivisionIcon; [SerializeField] Text m_Division; [SerializeField] Text m_Score; [SerializeField] RectTransform m_ContainerBaseProperty; [SerializeField] PropertyBehaviour[] m_BasePropertys; [SerializeField] RectTransform m_ContainerSpecialProperty; [SerializeField] PropertyBehaviour[] m_SpecialPropertys; [SerializeField] Text m_Remind; [SerializeField] Button m_Goto; TreasureModel model { get { return ModelCenter.Instance.GetModel(); } } KingTreasureModel kingTreasureModel { get { return ModelCenter.Instance.GetModel(); } } CrossServerOneVsOneModel crossServerOneVsOneModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { m_Goto.onClick.AddListener(Goto); } protected override void AddListeners() { } protected override void OnPreOpen() { UI3DTreasureSelectStage.Instance.SetStartState(); model.treasureSelectedEvent += TreasureSelectedEvent; TreasureBaseWin.allowSelectTreasure += AllowSelectTreasure; Display(); var countDisplay = string.Empty; if (kingTreasureModel.wearCountLimit == 2) { countDisplay = Language.Get("Num_CHS_Two"); } else { countDisplay = Language.Get(StringUtility.Contact("Num_CHS_", kingTreasureModel.wearCountLimit)); } m_Remind.text = Language.Get("KingTreasureLimitRemind", countDisplay); } protected override void OnActived() { base.OnActived(); DisplayTween(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { model.treasureSelectedEvent -= TreasureSelectedEvent; TreasureBaseWin.allowSelectTreasure -= AllowSelectTreasure; } protected override void OnAfterClose() { } #endregion public void Display() { DisplayBase(); DisplayState(); DisplayGoto(); } void DisplayBase() { var config = TreasureConfig.Get(model.selectedTreasure); if (config != null) { m_TreasureNameIcon.SetSprite(config.TreasureNameIcon); } } void DisplayState() { Treasure treasure; m_ContainerEnd.gameObject.SetActive(false); m_ContainerGot.gameObject.SetActive(false); m_ContainerOnGoing.gameObject.SetActive(false); if (model.TryGetTreasure(model.selectedTreasure, out treasure)) { var season = 0; kingTreasureModel.TryGetSeason(model.selectedTreasure, out season); if (treasure.state == TreasureState.Collected) { DisplayGot(); } else if (kingTreasureModel.GetSeasonState(model.selectedTreasure) == 2) { DisplayEnd(); } else { DisplayOnGoing(); } } } void DisplayGot() { m_ContainerGot.gameObject.SetActive(true); CrossServerOneVsOneModel.CrossServerOneVsOneHistory history; var session = 0; if (kingTreasureModel.TryGetSeason(model.selectedTreasure, out session) && crossServerOneVsOneModel.TryGetOneVsOneHistory(session, out history)) { m_Score.text = history.score.ToString(); var divisionConfig = CrossServerArenaConfig.Get(history.division); if (divisionConfig != null) { m_DivisionIcon.SetSprite(divisionConfig.IconKey); m_Division.text = divisionConfig.Name; m_Division.color = UIHelper.GetDanLVColor(history.division); } KingTreasureModel.Division division; bool containsDivision = kingTreasureModel.TryGetDivision(model.selectedTreasure, history.rewardLevel, out division); m_ContainerBaseProperty.gameObject.SetActive(containsDivision && division.basePropertys.Count > 0); m_ContainerSpecialProperty.gameObject.SetActive(containsDivision && division.specialPropertys.Count > 0); var index = 0; if (containsDivision && division.basePropertys.Count > 0) { foreach (var key in division.basePropertys.Keys) { if (index < m_BasePropertys.Length) { m_BasePropertys[index].gameObject.SetActive(true); m_BasePropertys[index].DisplayUpper(key, division.basePropertys[key]); } index++; } } for (int i = index; i < m_BasePropertys.Length; i++) { m_BasePropertys[i].gameObject.SetActive(false); } index = 0; if (containsDivision && division.specialPropertys.Count > 0) { foreach (var key in division.specialPropertys.Keys) { if (index < m_SpecialPropertys.Length) { m_SpecialPropertys[index].gameObject.SetActive(true); m_SpecialPropertys[index].DisplayUpper(key, division.specialPropertys[key]); } index++; } } for (int i = index; i < m_SpecialPropertys.Length; i++) { m_SpecialPropertys[i].gameObject.SetActive(false); } } } void DisplayEnd() { m_ContainerEnd.gameObject.SetActive(true); m_SeasonEndRemind.text = UIHelper.ReplaceNewLine(Language.Get("KingTreasureEndRemind")); } void DisplayOnGoing() { m_ContainerOnGoing.gameObject.SetActive(true); m_SeasonOnGoingRemind.text = UIHelper.ReplaceNewLine(Language.Get("KingTreasureOnGoingRemind")); } void DisplayGoto() { var season = 0; kingTreasureModel.TryGetSeason(model.selectedTreasure, out season); m_Goto.gameObject.SetActive(CrossServerOneVsOnePKSeason.Instance.SeasonID == season); } void DisplayTween() { m_PositionTween.Play(); } private void TreasureSelectedEvent(int id) { m_PositionTween.SetEndState(); Display(); } private bool AllowSelectTreasure(int id) { var list = kingTreasureModel.GetDisplayList(); if (kingTreasureModel.GetSeasonState(id) == 0) { SysNotifyMgr.Instance.ShowTip("TreasureOneVsOneSeasonNotStart"); return false; } return list.Contains(id); } private void Goto() { WindowJumpMgr.Instance.WindowJumpTo((JumpUIType)278); } } }