aeroson

Untitled

May 22nd, 2016
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. using System;
  2. using UnityEngine;
  3.  
  4.  
  5. namespace MyGame
  6. {
  7. public class GameTimeController : MonoBehavior
  8. {
  9. public static GameTimeController Instance { get; private set; }
  10.  
  11. public float CurrentHour
  12. {
  13. get
  14. {
  15. return currentDateTime.Hour + currentDateTime.Minute / 60f + currentDateTime.Second / 60f / 60f;
  16. }
  17. set
  18. {
  19. currentDateTime = DateTimeSetHour(currentDateTime, value, moveOnlyForwardInTime: true);
  20. }
  21. }
  22.  
  23. /// <summary>
  24. /// If set to 1 it takes 1 second in real life to pass 1 ingame second.
  25. /// If its set to 10 it takes 1 second in real life to pass 10 ingame second.
  26. /// </summary>
  27. public float CurrentGameTimeSpeed { get; set; }
  28.  
  29.  
  30. DateTime currentDateTime;
  31.  
  32. DateTime dateTimeToSkipTo;
  33. bool doSkipTime;
  34. float skipSpeed;
  35.  
  36.  
  37. public void SkipHourTo(int hourToSkipTo, float skipSpeed = 100f)
  38. {
  39. doSkipTime = true;
  40. this.skipSpeed = skipSpeed;
  41. dateTimeToSkipTo = DateTimeSetHour(currentDateTime, hourToSkipTo, moveOnlyForwardInTime: true);
  42. }
  43.  
  44.  
  45. static DateTime DateTimeSetHour(DateTime dateTime, float targetHour, bool moveOnlyForwardInTime = false)
  46. {
  47. if (dateTime.Hour > targetHour)
  48. {
  49. // hour is alreardy past the one we need, either end day, or rever time
  50. if (moveOnlyForwardInTime)
  51. {
  52. // current hour is too far, must end the day
  53. dateTime.AddHours(24 - dateTime.Hour); // end the day, go to 0:00;
  54. dateTime.AddHours(targetHour); // go to our target hour
  55. } else
  56. {
  57. // lets revert time
  58. dateTime.AddHours(targetHour - dateTime.Hour);
  59. }
  60. }
  61. else
  62. {
  63. // target hour is in the future, add it
  64. dateTime.AddHours(dateTime.Hour - targetHour);
  65. }
  66. return dateTime;
  67. }
  68.  
  69.  
  70.  
  71. void Start()
  72. {
  73. currentDateTime = DateTime.Now;
  74. Instance = this;
  75. }
  76.  
  77. void Update()
  78. {
  79. if (doSkipTime)
  80. {
  81. CurrentGameTimeSpeed = skipSpeed;
  82. if (currentDateTime > dateTimeToSkipTo)
  83. {
  84. doSkipTime = false;
  85. CurrentGameTimeSpeed = 1;
  86. }
  87. }
  88.  
  89. currentDateTime.AddSeconds(Time.deltaTime * CurrentGameTimeSpeed);
  90. weatherSystem.azure_PassTime = CurrentGameTimeSpeed;
  91. weatherSystem.azure_TIME_of_DAY = CurrentHour;
  92. }
  93.  
  94. public SkyControl_v2_0_AnimatedCloud weatherSystem;
  95. }
  96. }
Advertisement
Add Comment
Please, Sign In to add comment