//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Friday, December 22, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
|
namespace Snxxz.UI
|
{
|
|
public class DemonJarVictoryWin : Window
|
{
|
[SerializeField] Transform m_ContainerPoivt;
|
[SerializeField] Transform m_KillRewardExplain;
|
[SerializeField] Text m_Rank;
|
[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<DemonJarRewardBehaviour> rewardBehaviours = new List<DemonJarRewardBehaviour>();
|
DungeonModel model { get { return ModelCenter.Instance.GetModel<DungeonModel>(); } }
|
DemonJarModel demonJarModel { get { return ModelCenter.Instance.GetModel<DemonJarModel>(); } }
|
|
#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 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.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);
|
|
var rank = model.dungeonResult.rank;
|
m_Rank.text = Language.Get("DemonJar7", rank);
|
m_FirstRankRewardTip.gameObject.SetActive(rank == 1);
|
m_KillRewardExplain.gameObject.SetActive(rank == 1);
|
m_DamageFirstEffect.gameObject.SetActive(rank == 1);
|
m_VictoryFontContainer.gameObject.SetActive(rank != 1);
|
|
var demonJarConfig = DemonJarConfig.Get(demonJarModel.selectedBoss);
|
m_DoubleReward.gameObject.SetActive(rank == 1);
|
m_DoubleChallenge.gameObject.SetActive(demonJarConfig != null && demonJarConfig.CanEnterTimes == 0 && demonJarModel.isDoubleAward);
|
|
var serverItems = model.dungeonResult.itemInfo;
|
var items = new List<Item>();
|
|
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);
|
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.gameObject.SetActive(true);
|
behaviour.Display(items[i]);
|
}
|
else
|
{
|
behaviour.gameObject.SetActive(false);
|
}
|
}
|
|
}
|
|
private void ExitDungeon()
|
{
|
if (ClientDungeonStageUtility.isClientDungeon)
|
{
|
ClientDungeonStageUtility.ExitNormalClientDungeon();
|
}
|
else
|
{
|
model.ExitCurrentDungeon();
|
}
|
}
|
|
private int RewardSort(Item _lhs, Item _rhs)
|
{
|
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<DemonJarRewardBehaviour>();
|
rewardBehaviours.Add(behaviour);
|
instance.transform.SetParentEx(_parent, Vector3.zero, Vector3.zero, Vector3.one);
|
}
|
}
|
}
|
|
}
|
|
}
|
|
|
|
|