//--------------------------------------------------------
|
// [Author]: 第二世界
|
// [ Date ]: Monday, October 23, 2017
|
//--------------------------------------------------------
|
|
using System;
|
using System.Collections;
|
using System.Collections.Generic;
|
using UnityEngine;
|
using UnityEngine.UI;
|
|
namespace vnxbqy.UI
|
{
|
|
public class DungeonGradeWin : Window
|
{
|
[SerializeField] TweenCurve m_PosTweenCurve1;
|
[SerializeField] TweenCurve m_PosTweenCurve2;
|
[SerializeField] TweenCurve m_ScaleTweenCurve1;
|
[SerializeField] TweenCurve m_ScaleTweenCurve2;
|
|
[SerializeField] float m_Duration1 = 0.5f;
|
[SerializeField] float m_Duration2 = 1.0f;
|
|
|
[SerializeField] PositionTween gradePosTween;
|
[SerializeField] ScaleTween gradeScaleTween;
|
[SerializeField] Image grade;
|
[SerializeField] Text surplusTime;
|
|
[SerializeField] PositionTween expPosTween;
|
[SerializeField] ScaleTween expScaleTween;
|
[SerializeField] Image expGrade;
|
[SerializeField] Text expText;
|
|
[SerializeField] GameObject gradeContainer;
|
[SerializeField] GameObject expContainer;
|
[SerializeField] RectTransform[] moveRects;
|
|
[SerializeField] Image expGrade2;
|
[SerializeField] Text expText2;
|
|
DateTime endTime;
|
DateTime dungeonEndTime;
|
|
private bool exitDungeonStage = false;
|
private DungeonModel model
|
{
|
get
|
{
|
return ModelCenter.Instance.GetModel<DungeonModel>();
|
}
|
}
|
|
private int lastStar = 0;
|
private bool timeZeroShow = false;
|
#region Built-in
|
protected override void BindController()
|
{ }
|
|
protected override void AddListeners()
|
{ }
|
|
protected override void OnPreOpen()
|
{
|
model.dungeonCoolDownEvent += DungeonCoolDownEvent;
|
SetTween(gradePosTween, gradeScaleTween, 0);
|
SetTween(expPosTween, expScaleTween, 0);
|
|
expContainer.SetActive(false);
|
|
dungeonEndTime = model.GetCoolDownEndTime(DungeonCoolDownType.FightStart);
|
endTime = model.GetCoolDownEndTime(DungeonCoolDownType.FlagTake);
|
var exitTime = model.GetCoolDownEndTime(DungeonCoolDownType.LeaveMap);
|
exitDungeonStage = exitTime > TimeUtility.ServerNow;
|
if (exitDungeonStage)
|
{
|
DungeonCoolDownEvent(DungeonCoolDownType.LeaveMap);
|
}
|
}
|
|
private void OnEnable()
|
{
|
Display(true);
|
}
|
|
//常显评分百分比
|
private void ShowGrade()
|
{
|
expGrade2.SetActive(false);
|
//if (PlayerDatas.Instance.baseData.MapID != 31080)
|
//{
|
// return;
|
//}
|
///根据具体副本显示具体数据
|
int _mapid = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
int rate = 0;
|
if (model.GetRewardRateWithGrade(_mapid, model.mission.grade, out rate))
|
{
|
expGrade2.SetActive(true);
|
expText2.text = Language.Get("DungeonGrade_2", rate);
|
}
|
}
|
|
private void UpdateMissionEvent()
|
{
|
if (lastStar == model.mission.grade || !gameObject.activeInHierarchy)
|
{
|
return;
|
}
|
lastStar = model.mission.grade;
|
///根据具体副本显示具体数据
|
int _mapid = model.GetDataMapIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
int rate = 0;
|
if (model.GetRewardRateWithGrade(_mapid, model.mission.grade, out rate))
|
{
|
if (PlayerDatas.Instance.baseData.MapID ==IceCrystalVeinModel.ICECRYSTALVEIN_MAPID)
|
{
|
expGrade.SetSprite(GetStarNum(model.mission.grade));
|
}
|
else
|
{
|
expGrade.SetSprite(StringUtility.Contact("Remark_", UIHelper.GetStar(model.mission.grade)));
|
}
|
expGrade.SetNativeSize();
|
expText.text = Language.Get("DungeonGrade_2", rate);
|
ShowAwardTween();
|
}
|
else
|
{
|
if (PlayerDatas.Instance.baseData.MapID == IceCrystalVeinModel.ICECRYSTALVEIN_MAPID)
|
{
|
grade.SetSprite(GetStarNum(model.mission.grade));
|
}
|
else
|
{
|
grade.SetSprite(StringUtility.Contact("Remark_", UIHelper.GetStar(model.mission.grade)));
|
}
|
grade.SetNativeSize();
|
}
|
}
|
|
private void ShowAwardTween()
|
{
|
SetTween(expPosTween, expScaleTween, 0);
|
expContainer.SetActive(true);
|
expPosTween.Play(() =>
|
{
|
OnExpTweenCom(0);
|
});
|
}
|
|
private void OnExpTweenCom(int index)
|
{
|
if (index == 0)
|
{
|
SetTween(expPosTween, expScaleTween, 1);
|
expPosTween.Play();
|
expScaleTween.Play(() =>
|
{
|
OnExpTweenCom(1);
|
});
|
}
|
else if (index == 1)
|
{
|
expContainer.SetActive(false);
|
if (PlayerDatas.Instance.baseData.MapID == IceCrystalVeinModel.ICECRYSTALVEIN_MAPID)
|
{
|
grade.SetSprite(GetStarNum(model.mission.grade));
|
}
|
else
|
{
|
grade.SetSprite(StringUtility.Contact("Remark_", UIHelper.GetStar(model.mission.grade)));
|
}
|
grade.SetNativeSize();
|
ShowGrade();
|
}
|
}
|
|
private void DungeonCoolDownEvent(DungeonCoolDownType type)
|
{
|
switch (type)
|
{
|
case DungeonCoolDownType.FightStart:
|
dungeonEndTime = model.GetCoolDownEndTime(type);
|
break;
|
case DungeonCoolDownType.FlagTake:
|
endTime = model.GetCoolDownEndTime(type);
|
break;
|
case DungeonCoolDownType.LeaveMap:
|
if (PlayerDatas.Instance.baseData.MapID == IceCrystalVeinModel.ICECRYSTALVEIN_MAPID)
|
{
|
surplusTime.text = Language.Get("IceCrystal_3", GetStarNumStr(model.mission.grade));
|
}
|
else
|
{
|
surplusTime.text = Language.Get("DungeonGrade_5", UIHelper.GetStar(model.mission.grade));
|
}
|
|
exitDungeonStage = true;
|
break;
|
}
|
}
|
|
protected override void OnAfterOpen()
|
{
|
Display(false);
|
model.updateMissionEvent += UpdateMissionEvent;
|
}
|
|
private void Display(bool _enable)
|
{
|
if (!gameObject.activeInHierarchy)
|
{
|
return;
|
}
|
if (model.mission.grade > 0)
|
{
|
lastStar = model.mission.grade;
|
gradeContainer.SetActive(true);
|
if (model.gradeTween && !_enable)
|
{
|
model.cacheGradeMap = PlayerDatas.Instance.baseData.MapID;
|
SetTween(gradePosTween, gradeScaleTween, 0);
|
gradePosTween.Play(OnGradeTweenCom);
|
model.gradeTween = false;
|
}
|
else
|
{
|
SetTween(gradePosTween, gradeScaleTween, 1);
|
gradePosTween.SetEndState();
|
gradeScaleTween.SetEndState();
|
}
|
}
|
else
|
{
|
expContainer.SetActive(false);
|
gradeContainer.SetActive(false);
|
}
|
if (PlayerDatas.Instance.baseData.MapID == IceCrystalVeinModel.ICECRYSTALVEIN_MAPID)
|
{
|
grade.SetSprite(GetStarNum(model.mission.grade));
|
}
|
else
|
{
|
grade.SetSprite(StringUtility.Contact("Remark_", UIHelper.GetStar(model.mission.grade)));
|
}
|
grade.SetNativeSize();
|
ShowGrade();
|
}
|
|
private void OnGradeTweenCom()
|
{
|
SetTween(gradePosTween, gradeScaleTween, 1);
|
gradePosTween.Play();
|
gradeScaleTween.Play();
|
}
|
|
protected override void OnPreClose()
|
{
|
model.dungeonCoolDownEvent -= DungeonCoolDownEvent;
|
model.updateMissionEvent -= UpdateMissionEvent;
|
}
|
|
protected override void OnAfterClose()
|
{ }
|
|
protected override void LateUpdate()
|
{
|
base.LateUpdate();
|
if (!exitDungeonStage)
|
{
|
var endSurplusSeconds = (dungeonEndTime - TimeUtility.ServerNow).TotalSeconds;
|
var stageSurplusSeconds = (endTime - TimeUtility.ServerNow).TotalSeconds;
|
|
if (model.mission.grade > 1 && stageSurplusSeconds < endSurplusSeconds)
|
{
|
var surplus = endTime - TimeUtility.ServerNow;
|
surplus = surplus < TimeSpan.Zero ? TimeSpan.Zero : surplus;
|
if (surplus.Equals(TimeSpan.Zero))
|
{
|
if (timeZeroShow)
|
{
|
return;
|
}
|
timeZeroShow = true;
|
}
|
else
|
{
|
timeZeroShow = false;
|
}
|
if (PlayerDatas.Instance.baseData.MapID == IceCrystalVeinModel.ICECRYSTALVEIN_MAPID)
|
{
|
surplusTime.text = Language.Get("DungeonGrade_3", TimeUtility.SecondsToHMSCHSRetain((int)surplus.TotalSeconds, false, false), GetStarNumStr(model.mission.grade - 1));
|
}
|
else
|
{
|
surplusTime.text = Language.Get("DungeonGrade_3", TimeUtility.SecondsToHMSCHSRetain((int)surplus.TotalSeconds, false, false), UIHelper.GetStar(model.mission.grade - 1));
|
}
|
|
}
|
else
|
{
|
var surplus = dungeonEndTime - TimeUtility.ServerNow;
|
surplus = surplus < TimeSpan.Zero ? TimeSpan.Zero : surplus;
|
surplusTime.text = Language.Get("DungeonGrade_4", TimeUtility.SecondsToHMSCHSRetain((int)surplus.TotalSeconds, false, false));
|
if (surplus.Equals(TimeSpan.Zero))
|
{
|
exitDungeonStage = true;
|
surplusTime.text = Language.Get("DungeonGrade_1");
|
}
|
}
|
}
|
}
|
|
private void OnDisable()
|
{
|
expContainer.SetActive(false);
|
SetTween(gradePosTween, gradeScaleTween, 1);
|
gradePosTween.SetEndState();
|
gradeScaleTween.SetEndState();
|
SetTween(expPosTween, expScaleTween, 0);
|
expPosTween.SetStartState();
|
expScaleTween.SetStartState();
|
}
|
#endregion
|
|
private string GetStarNum(int star)
|
{
|
switch (star)
|
{
|
case 5:
|
case 4:
|
case 3:
|
return "BJKM_9";
|
case 2:
|
return "BJKM_8";
|
case 1:
|
return "BJKM_6";
|
}
|
return string.Empty;
|
|
}
|
private string GetStarNumStr(int star)
|
{
|
switch (star)
|
{
|
case 5:
|
case 4:
|
case 3:
|
return Language.Get("PassStar3");
|
case 2:
|
return Language.Get("PassStar2");
|
case 1:
|
return Language.Get("PassStar1");
|
}
|
return string.Empty;
|
}
|
private void SetTween(PositionTween _posTween, ScaleTween _scaleTween, int index)
|
{
|
_posTween.from = moveRects[index].localPosition;
|
_posTween.to = moveRects[index + 1].localPosition;
|
_posTween.curve = index == 0 ? m_PosTweenCurve1 : m_PosTweenCurve2;
|
_scaleTween.curve = index == 0 ? m_ScaleTweenCurve1 : m_ScaleTweenCurve2;
|
_posTween.duration = index == 0 ? m_Duration1 : m_Duration2;
|
_posTween.delay = index == 0 ? 0 : 1.0f;
|
_posTween.SetStartState();
|
if (index == 0)
|
{
|
_scaleTween.SetStartState();
|
}
|
else
|
{
|
_scaleTween.delay = 1.0f;
|
}
|
}
|
|
#if UNITY_EDITOR
|
[ContextMenu("ExpTween")]
|
public void PreviewExpTween()
|
{
|
SetTween(expPosTween, expScaleTween, 0);
|
expPosTween.Play(OnPreviewExpTweenComplete);
|
}
|
|
[ContextMenu("GradeTween")]
|
public void PreviewGradeTween()
|
{
|
SetTween(gradePosTween, gradeScaleTween, 0);
|
gradePosTween.Play(OnPreviewGradeTweenComplete);
|
}
|
|
private void OnPreviewGradeTweenComplete()
|
{
|
SetTween(gradePosTween, gradeScaleTween, 1);
|
gradePosTween.Play();
|
gradeScaleTween.Play();
|
}
|
|
private void OnPreviewExpTweenComplete()
|
{
|
SetTween(expPosTween, expScaleTween, 1);
|
expPosTween.Play();
|
expScaleTween.Play();
|
}
|
#endif
|
}
|
}
|