| | |
| | | //-------------------------------------------------------- |
| | | // [Author]: 第二世界 |
| | | // [ Date ]: Monday, October 23, 2017 |
| | | //-------------------------------------------------------- |
| | | |
| | | using System; |
| | | using System.Collections; |
| | | using System.Collections.Generic; |
| | | using UnityEngine; |
| | | using UnityEngine.UI; |
| | | |
| | | namespace Snxxz.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; |
| | | |
| | | DateTime endTime; |
| | | DateTime dungeonEndTime; |
| | | |
| | | [SerializeField] RectTransform[] moveRects; |
| | | |
| | | private bool isCanContinue = true; |
| | | |
| | | 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); |
| | | |
| | | dungeonEndTime = model.GetDungeonCoolDownEndTime(DungeonCoolDownType.TowerTake); |
| | | endTime = model.GetDungeonCoolDownEndTime(DungeonCoolDownType.FlagTake); |
| | | expContainer.SetActive(false); |
| | | |
| | | isCanContinue = true; |
| | | } |
| | | |
| | | private void OnEnable() |
| | | { |
| | | Display(true); |
| | | } |
| | | |
| | | private void UpdateMissionEvent() |
| | | { |
| | | if (lastStar == model.mission.grade || !gameObject.activeInHierarchy) |
| | | { |
| | | return; |
| | | } |
| | | lastStar = model.mission.grade; |
| | | ///根据具体副本显示具体数据 |
| | | int _mapid = model.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID); |
| | | int rate = 0; |
| | | if (model.GetRewardRateWithGrade(_mapid, model.mission.grade, out rate)) |
| | | { |
| | | expGrade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade))); |
| | | expText.text = Language.Get("DungeonGrade_2", rate); |
| | | ShowAwardTween(); |
| | | } |
| | | else |
| | | { |
| | | grade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade))); |
| | | } |
| | | } |
| | | |
| | | private void ShowAwardTween() |
| | | { |
| | | SetTween(expPosTween, expScaleTween, 0); |
| | | expContainer.gameObject.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); |
| | | grade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade))); |
| | | } |
| | | } |
| | | |
| | | private void DungeonCoolDownEvent(DungeonCoolDownType type) |
| | | { |
| | | switch (type) |
| | | { |
| | | case DungeonCoolDownType.TowerTake: |
| | | dungeonEndTime = model.GetDungeonCoolDownEndTime(type); |
| | | break; |
| | | case DungeonCoolDownType.FlagTake: |
| | | endTime = model.GetDungeonCoolDownEndTime(type); |
| | | break; |
| | | case DungeonCoolDownType.LeaveMap: |
| | | if (isCanContinue) |
| | | { |
| | | surplusTime.text = Language.Get("DungeonGrade_5", GetStar(model.mission.grade)); |
| | | } |
| | | isCanContinue = false; |
| | | 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); |
| | | } |
| | | grade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade))); |
| | | } |
| | | |
| | | 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 (isCanContinue) |
| | | { |
| | | if (model.mission.grade > 1) |
| | | { |
| | | var surplus = endTime - DateTime.Now; |
| | | surplus = surplus < TimeSpan.Zero ? TimeSpan.Zero : surplus; |
| | | if (surplus.Equals(TimeSpan.Zero)) |
| | | { |
| | | if (timeZeroShow) return; |
| | | timeZeroShow = true; |
| | | if (model.DungeonTrialMaps().Contains(PlayerDatas.Instance.baseData.MapID)) |
| | | { |
| | | surplusTime.text = Language.Get("DungeonGradeNextStage"); |
| | | return; |
| | | } |
| | | } |
| | | else timeZeroShow = false; |
| | | surplusTime.text = Language.Get("DungeonGrade_3", TimeUtility.SecondsToHMSCHSRetain((int)surplus.TotalSeconds, false, false), GetStar(model.mission.grade - 1)); |
| | | } |
| | | else |
| | | { |
| | | var surplus = dungeonEndTime - DateTime.Now; |
| | | 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)) |
| | | { |
| | | isCanContinue = false; |
| | | surplusTime.text = Language.Get("DungeonGrade_1"); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void OnDisable() |
| | | { |
| | | expContainer.gameObject.SetActive(false); |
| | | SetTween(gradePosTween, gradeScaleTween, 1); |
| | | gradePosTween.SetEndState(); |
| | | gradeScaleTween.SetEndState(); |
| | | SetTween(expPosTween, expScaleTween, 0); |
| | | expPosTween.SetStartState(); |
| | | expScaleTween.SetStartState(); |
| | | } |
| | | #endregion |
| | | |
| | | private string GetStar(int star) |
| | | { |
| | | switch (star) |
| | | { |
| | | case 5: |
| | | return "S"; |
| | | case 4: |
| | | return "A"; |
| | | case 3: |
| | | return "B"; |
| | | case 2: |
| | | return "C"; |
| | | case 1: |
| | | return "D"; |
| | | } |
| | | 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 |
| | | } |
| | | //--------------------------------------------------------
|
| | | // [Author]: 第二世界
|
| | | // [ Date ]: Monday, October 23, 2017
|
| | | //--------------------------------------------------------
|
| | |
|
| | | using System;
|
| | | using System.Collections;
|
| | | using System.Collections.Generic;
|
| | | using UnityEngine;
|
| | | using UnityEngine.UI;
|
| | |
|
| | | namespace Snxxz.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;
|
| | |
|
| | | DateTime endTime;
|
| | | DateTime dungeonEndTime;
|
| | |
|
| | | [SerializeField] RectTransform[] moveRects;
|
| | |
|
| | | private bool isCanContinue = true;
|
| | |
|
| | | 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);
|
| | |
|
| | | dungeonEndTime = model.GetDungeonCoolDownEndTime(DungeonCoolDownType.TowerTake);
|
| | | endTime = model.GetDungeonCoolDownEndTime(DungeonCoolDownType.FlagTake);
|
| | | expContainer.SetActive(false);
|
| | |
|
| | | isCanContinue = true;
|
| | | }
|
| | |
|
| | | private void OnEnable()
|
| | | {
|
| | | Display(true);
|
| | | }
|
| | |
|
| | | private void UpdateMissionEvent()
|
| | | {
|
| | | if (lastStar == model.mission.grade || !gameObject.activeInHierarchy)
|
| | | {
|
| | | return;
|
| | | }
|
| | | lastStar = model.mission.grade;
|
| | | ///根据具体副本显示具体数据
|
| | | int _mapid = model.GetDungeonDataIdByMapId(PlayerDatas.Instance.baseData.MapID);
|
| | | int rate = 0;
|
| | | if (model.GetRewardRateWithGrade(_mapid, model.mission.grade, out rate))
|
| | | {
|
| | | expGrade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade)));
|
| | | expText.text = Language.Get("DungeonGrade_2", rate);
|
| | | ShowAwardTween();
|
| | | }
|
| | | else
|
| | | {
|
| | | grade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade)));
|
| | | }
|
| | | }
|
| | |
|
| | | private void ShowAwardTween()
|
| | | {
|
| | | SetTween(expPosTween, expScaleTween, 0);
|
| | | expContainer.gameObject.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);
|
| | | grade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade)));
|
| | | }
|
| | | }
|
| | |
|
| | | private void DungeonCoolDownEvent(DungeonCoolDownType type)
|
| | | {
|
| | | switch (type)
|
| | | {
|
| | | case DungeonCoolDownType.TowerTake:
|
| | | dungeonEndTime = model.GetDungeonCoolDownEndTime(type);
|
| | | break;
|
| | | case DungeonCoolDownType.FlagTake:
|
| | | endTime = model.GetDungeonCoolDownEndTime(type);
|
| | | break;
|
| | | case DungeonCoolDownType.LeaveMap:
|
| | | if (isCanContinue)
|
| | | {
|
| | | surplusTime.text = Language.Get("DungeonGrade_5", GetStar(model.mission.grade));
|
| | | }
|
| | | isCanContinue = false;
|
| | | 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);
|
| | | }
|
| | | grade.SetSprite(StringUtility.Contact("Remark_", GetStar(model.mission.grade)));
|
| | | }
|
| | |
|
| | | 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 (isCanContinue)
|
| | | {
|
| | | if (model.mission.grade > 1)
|
| | | {
|
| | | var surplus = endTime - DateTime.Now;
|
| | | surplus = surplus < TimeSpan.Zero ? TimeSpan.Zero : surplus;
|
| | | if (surplus.Equals(TimeSpan.Zero))
|
| | | {
|
| | | if (timeZeroShow) return;
|
| | | timeZeroShow = true;
|
| | | if (model.DungeonTrialMaps().Contains(PlayerDatas.Instance.baseData.MapID))
|
| | | {
|
| | | surplusTime.text = Language.Get("DungeonGradeNextStage");
|
| | | return;
|
| | | }
|
| | | }
|
| | | else timeZeroShow = false;
|
| | | surplusTime.text = Language.Get("DungeonGrade_3", TimeUtility.SecondsToHMSCHSRetain((int)surplus.TotalSeconds, false, false), GetStar(model.mission.grade - 1));
|
| | | }
|
| | | else
|
| | | {
|
| | | var surplus = dungeonEndTime - DateTime.Now;
|
| | | 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))
|
| | | {
|
| | | isCanContinue = false;
|
| | | surplusTime.text = Language.Get("DungeonGrade_1");
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | private void OnDisable()
|
| | | {
|
| | | expContainer.gameObject.SetActive(false);
|
| | | SetTween(gradePosTween, gradeScaleTween, 1);
|
| | | gradePosTween.SetEndState();
|
| | | gradeScaleTween.SetEndState();
|
| | | SetTween(expPosTween, expScaleTween, 0);
|
| | | expPosTween.SetStartState();
|
| | | expScaleTween.SetStartState();
|
| | | }
|
| | | #endregion
|
| | |
|
| | | private string GetStar(int star)
|
| | | {
|
| | | switch (star)
|
| | | {
|
| | | case 5:
|
| | | return "S";
|
| | | case 4:
|
| | | return "A";
|
| | | case 3:
|
| | | return "B";
|
| | | case 2:
|
| | | return "C";
|
| | | case 1:
|
| | | return "D";
|
| | | }
|
| | | 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
|
| | | }
|
| | | } |