| //--------------------------------------------------------  | 
| //    [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  | 
|     }  | 
| } |