//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, December 22, 2017 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace vnxbqy.UI { public class DemonJarVictoryWin : Window { [SerializeField] Transform m_ContainerPoivt; [SerializeField] Transform m_KillRewardExplain; [SerializeField] Text m_Rank; [SerializeField] Text m_RankTitle; [SerializeField] Text m_AssistTitle; [SerializeField] RectTransform m_FirstRankRewardTip; [SerializeField] Transform m_DoubleReward; [SerializeField] Transform m_DoubleChallenge; [SerializeField] ScrollRect m_RewardsScroll; [SerializeField] Text m_ExitTimer; [SerializeField] RectTransform m_VictoryFontContainer; [SerializeField] HorizontalLayoutGroup m_RewardLayout; [SerializeField] UIEffect m_DamageFirstEffect; [SerializeField] ButtonEx m_Exit; float timer = 0f; List rewardBehaviours = new List(); DungeonModel model { get { return ModelCenter.Instance.GetModel(); } } DemonJarModel demonJarModel { 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.SetActive(false); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } protected override void OnActived() { base.OnActived(); var config = DungeonOpenTimeConfig.Get(model.dungeonResult.dataMapID); StartCoroutine(Co_DelayDisplay(config.DelayTime * 0.001f)); } 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.SetActive(true); } } else { if (m_ExitTimer.gameObject.activeInHierarchy) { m_ExitTimer.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.SetActive(true); m_ContainerPoivt.SetActive(true); var rank = model.dungeonResult.rank; if (model.dungeonResult.isAssist == 1) { m_RankTitle.SetActive(false); m_Rank.SetActive(false); m_AssistTitle.SetActive(true); } else { m_RankTitle.SetActive(true); m_Rank.SetActive(true); m_AssistTitle.SetActive(false); m_Rank.text = Language.Get("DemonJar7", rank); } m_FirstRankRewardTip.SetActive(rank == 1); m_KillRewardExplain.SetActive(rank == 1); m_DamageFirstEffect.SetActive(rank == 1); m_VictoryFontContainer.SetActive(rank != 1); var demonJarConfig = DemonJarConfig.Get(demonJarModel.selectedBoss); m_DoubleReward.SetActive(rank == 1); m_DoubleChallenge.SetActive(demonJarConfig != null && demonJarConfig.CanEnterTimes == 0 && demonJarModel.isDoubleAward); var serverItems = model.dungeonResult.itemInfo; var items = new List(); for (int i = 0; i < serverItems.Length; i++) { items.Add(new Item(serverItems[i].ItemID, serverItems[i].Count)); } if (model.dungeonResult.money != null && model.dungeonResult.money.Length > 0) { for (int i = 0; i < model.dungeonResult.money.Length; i++) { var moneyType = model.dungeonResult.money[i].moneyType; if (GeneralDefine.moneyDisplayIds.ContainsKey(moneyType)) { items.Add(new Item(GeneralDefine.moneyDisplayIds[moneyType], model.dungeonResult.money[i].moneyValue)); } } } items.Sort(RewardSort); GenerateRewardBehaviour(m_RewardsScroll.content, items.Count); m_RewardsScroll.horizontalNormalizedPosition = 0f; 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.SetActive(true); behaviour.Display(items[i]); } else { behaviour.SetActive(false); } } } private void ExitDungeon() { if (ClientDungeonStageUtility.isClientDungeon) { ClientDungeonStageUtility.ExitNormalClientDungeon(); } else { model.ExitCurrentDungeon(); } } private int RewardSort(Item _lhs, Item _rhs) { var bossId = demonJarModel.GetBossIdByLine(PlayerDatas.Instance.baseData.dungeonLineId); var demonJarConfig = DemonJarConfig.Get(bossId); var isOwnReward1 = 0; var isOwnReward2 = 0; for (int i = 0; i < demonJarConfig.MustItemID.Length; i++) { if (isOwnReward1 == 0) { isOwnReward1 = demonJarConfig.MustItemID[i] == _lhs.id ? -1 : 0; } if (isOwnReward2 == 0) { isOwnReward2 = demonJarConfig.MustItemID[i] == _rhs.id ? -1 : 0; } if (isOwnReward1 == -1 && isOwnReward2 == -1) { break; } } if (isOwnReward1 != isOwnReward2) { return isOwnReward1.CompareTo(isOwnReward2); } var config1 = ItemConfig.Get(_lhs.id); var config2 = ItemConfig.Get(_rhs.id); var isEquip1 = config1.EquipPlace != 0; var isEquip2 = config2.EquipPlace != 0; if (!isEquip1 && isEquip2) { return -1; } else if (isEquip1 && !isEquip2) { return 1; } else if (!isEquip1 && !isEquip2) { if (config1.Type == 13 && config2.Type != 13) { return -1; } else if (config1.Type != 13 && config2.Type == 13) { return 1; } else { return config1.ItemColor > config2.ItemColor ? -1 : 1; } } else { if (config1.ItemColor != config2.ItemColor) { return config2.ItemColor.CompareTo(config1.ItemColor); } else { return config2.LV.CompareTo(config1.LV); } } } 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); } } } } }