//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, April 12, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class HazyDemonKingVictoryWin : Window { [SerializeField] Transform m_ContainerPoivt; [SerializeField] Text m_PlayerName; [SerializeField] ScrollRect m_RewardsScroll; [SerializeField] Text m_ExitTimer; [SerializeField] HorizontalLayoutGroup m_RewardLayout; [SerializeField] ButtonEx m_Exit; List m_Items = new List(); float timer = 0f; DungeonModel model { 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(PlayerDatas.Instance.baseData.MapID); 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(); DisplayBelongTo(); } private void DisplayRewards() { var serverItems = model.dungeonResult.itemInfo; var items = new List(); var itemCount = 0; if (serverItems != null) { for (int i = 0; i < serverItems.Length; i++) { items.Add(new Item(serverItems[i].ItemID, serverItems[i].Count)); } itemCount = serverItems.Length; } GenerateRewardBehaviour(m_RewardsScroll.content, items.Count); if (itemCount < 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 < m_Items.Count; i++) { var behaviour = m_Items[i]; if (i < items.Count) { behaviour.gameObject.SetActive(true); behaviour.Display(items[i]); } else { behaviour.gameObject.SetActive(false); } } } void DisplayBelongTo() { m_PlayerName.text = UIHelper.ServerStringTrim(model.dungeonResult.ownerName); } private void ExitDungeon() { if (PlayerDatas.Instance.baseData.MapID == HazyDemonKingModel.Client_MapID) { ModelCenter.Instance.GetModel().RequestExitClientDungeon(); } else { model.ExitCurrentDungeon(); } } private void GenerateRewardBehaviour(RectTransform _parent, int _needCount) { var nowCount = m_Items.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(); m_Items.Add(behaviour); instance.transform.SetParentEx(_parent, Vector3.zero, Vector3.zero, Vector3.one); } } } } }