TimeRecovery.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using UnityEngine;
  2. using System.Collections;
  3. using System;
  4. public class TimeRecovery : MonoBehaviour
  5. {
  6. /// <summary>
  7. ///
  8. /// </summary>
  9. private bool onCountDown = false;
  10. /// <summary>
  11. ///
  12. /// </summary>
  13. private string countDownTitle = "Start";
  14. /// <summary>
  15. ///
  16. /// </summary>
  17. public int totalSeconds = 60;
  18. /// <summary>
  19. ///
  20. /// </summary>
  21. private int _leftSeconds=0;
  22. /// <summary>
  23. ///
  24. /// </summary>
  25. private Action<int> callBack;
  26. /// <summary>
  27. ///
  28. /// </summary>
  29. public int leaveSeconds
  30. {
  31. get
  32. {
  33. return _leftSeconds;
  34. }
  35. set
  36. {
  37. if (_leftSeconds != value)
  38. {
  39. _leftSeconds = value;
  40. if (callBack != null)
  41. {
  42. callBack(_leftSeconds);
  43. }
  44. if (leaveSeconds <= 0)
  45. {
  46. StopTimer();
  47. }
  48. }
  49. }
  50. }
  51. /// <summary>
  52. ///
  53. /// </summary>
  54. /// <returns></returns>
  55. IEnumerator DoCountDown()
  56. {
  57. while (leaveSeconds > 0)
  58. {
  59. yield return new WaitForSeconds(1f);
  60. leaveSeconds--;
  61. }
  62. }
  63. /// <summary>
  64. ///
  65. /// </summary>
  66. /// <param name="totalTs"></param>
  67. public void StartTimer(int totalTs, Action<int> leftTsChangeCallBack)
  68. {
  69. StopTimer();
  70. totalSeconds = totalTs;
  71. leaveSeconds = totalTs;
  72. callBack = leftTsChangeCallBack;
  73. onCountDown = true;
  74. StartCoroutine(DoCountDown());
  75. }
  76. /// <summary>
  77. ///
  78. /// </summary>
  79. public void StopTimer()
  80. {
  81. onCountDown = false;
  82. StopAllCoroutines();
  83. }
  84. }