//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Saturday, January 19, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { [XLua.Hotfix] public class JadeDynastyBossVictoryWin : Window { [SerializeField] Transform m_ContainerPoivt; [SerializeField] Transform m_ContainerKill; [SerializeField] Text m_Rank; [SerializeField] Transform m_ContainerAssist; [SerializeField] Text m_AssistRank; [SerializeField] ScrollRect m_RewardsScroll; [SerializeField] Text m_ExitTimer; [SerializeField] HorizontalLayoutGroup m_RewardLayout; [SerializeField] ButtonEx m_Exit; float timer = 0f; List rewardBehaviours = new List(); DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } JadeDynastyBossModel jadeDynastyModel { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Exit.AddListener(ExitDungeon); } protected override void OnPreOpen() { timer = 0f; m_ContainerPoivt.gameObject.SetActive(false); } protected override void OnActived() { base.OnActived(); var config = DungeonOpenTimeConfig.Get(model.dungeonResult.dataMapID); StartCoroutine(Co_DelayDisplay(config.DelayTime * 0.001f)); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } protected override void LateUpdate() { base.LateUpdate(); var endTime = model.GetCoolDownEndTime(DungeonCoolDownType.LeaveMap); if (endTime > TimeUtility.ServerNow) { timer -= Time.deltaTime; if (timer < 0f) { timer = 1f; var seconds = (endTime - TimeUtility.ServerNow).TotalSeconds; m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp((int)seconds, 0, int.MaxValue)); } if (!m_ExitTimer.gameObject.activeInHierarchy) { m_ExitTimer.gameObject.SetActive(true); } } else { if (m_ExitTimer.gameObject.activeInHierarchy) { m_ExitTimer.gameObject.SetActive(false); } } } #endregion IEnumerator Co_DelayDisplay(float _delay) { yield return new WaitForSeconds(_delay); var endTime = model.GetCoolDownEndTime(DungeonCoolDownType.LeaveMap); var seconds = (endTime - TimeUtility.ServerNow).TotalSeconds; timer = 0f; m_ExitTimer.text = Language.Get("DungeonVictoryWin_Btn_Exit_1", Mathf.Clamp((int)seconds, 0, int.MaxValue)); m_ExitTimer.gameObject.SetActive(true); m_ContainerPoivt.gameObject.SetActive(true); DisplayRewards(); var rank = model.dungeonResult.rank; m_ContainerAssist.gameObject.SetActive(rank != 1); m_ContainerKill.gameObject.SetActive(rank == 1); if (rank == 1) { DisplayKill(); } else { DisplayAssist(); } } private void DisplayKill() { m_Rank.text = Language.Get("DemonJar7", 1); } private void DisplayAssist() { m_AssistRank.text = Language.Get("DemonJar7", 1); } private void DisplayRewards() { var serverItems = model.dungeonResult.itemInfo; var items = new List(); if (serverItems != null) { for (int i = 0; i < serverItems.Length; i++) { items.Add(new Item(serverItems[i].ItemID, serverItems[i].Count)); } } items.Sort(RewardSort); GenerateRewardBehaviour(m_RewardsScroll.content, items.Count); if (items.Count < 6) { m_RewardLayout.childAlignment = TextAnchor.MiddleCenter; (m_RewardLayout.transform as RectTransform).pivot = new Vector2(0.5f, 0.5f); } else { m_RewardLayout.childAlignment = TextAnchor.MiddleLeft; (m_RewardLayout.transform as RectTransform).pivot = new Vector2(0, 0.5f); } for (int i = 0; i < rewardBehaviours.Count; i++) { var behaviour = rewardBehaviours[i]; if (i < items.Count) { behaviour.gameObject.SetActive(true); behaviour.Display(items[i]); } else { behaviour.gameObject.SetActive(false); } } } private void ExitDungeon() { model.ExitCurrentDungeon(); } private int RewardSort(Item _lhs, Item _rhs) { var islhsJadeDynastyEquip = IsJadeDynastyEquip(_lhs); var isrhsJadeDynastyEquip = IsJadeDynastyEquip(_rhs); if (islhsJadeDynastyEquip != isrhsJadeDynastyEquip) { return -islhsJadeDynastyEquip.CompareTo(isrhsJadeDynastyEquip); } var islhsJadeDynasty138 = IsJadeDynasty138(_lhs); var isrhsJadeDynasty138 = IsJadeDynasty138(_rhs); if (islhsJadeDynasty138 == isrhsJadeDynasty138 && islhsJadeDynasty138) { return _lhs.id.CompareTo(_rhs.id); } else if (islhsJadeDynasty138 != isrhsJadeDynasty138) { return -islhsJadeDynasty138.CompareTo(isrhsJadeDynasty138); } var lhsConfig = ItemConfig.Get(_lhs.id); var rhsConfig = ItemConfig.Get(_rhs.id); if (lhsConfig != null && rhsConfig != null) { return -lhsConfig.ItemColor.CompareTo(rhsConfig.ItemColor); } return 0; } bool IsJadeDynastyEquip(Item item) { var config = ItemConfig.Get(item.id); var type = 0; if (config != null) { type = config.Type; } return type >= 128 && type <= 137; } bool IsJadeDynasty138(Item item) { var config = ItemConfig.Get(item.id); var type = 0; if (config != null) { type = config.Type; } return type == 138; } private void GenerateRewardBehaviour(RectTransform _parent, int _needCount) { var nowCount = rewardBehaviours.Count; var dif = _needCount - nowCount; if (dif > 0) { for (int i = 0; i < dif; i++) { var instance = UIUtility.CreateWidget("DemonJarRewardBehaviour", "DemonJarRewardBehaviour"); var behaviour = instance.GetComponent(); rewardBehaviours.Add(behaviour); instance.transform.SetParentEx(_parent, Vector3.zero, Vector3.zero, Vector3.one); } } } } }