You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.9 KiB
110 lines
3.9 KiB
using UnityEngine; |
|
using System; |
|
using System.Collections; |
|
|
|
public class SampleTimer : MonoBehaviour { |
|
|
|
private DateTime simpleTimerEndTimestamp; |
|
private DateTime unbiasedTimerEndTimestamp; |
|
|
|
void Awake () { |
|
// Read PlayerPrefs to restore scheduled timers |
|
// By default initiliaze both timers in 60 seconds from now |
|
simpleTimerEndTimestamp = this.ReadTimestamp("simpleTimer", DateTime.Now.AddSeconds(60)); |
|
unbiasedTimerEndTimestamp = this.ReadTimestamp("unbiasedTimer", UnbiasedTime.Instance.Now().AddSeconds(60)); |
|
} |
|
|
|
void OnApplicationPause (bool paused) { |
|
if (paused) { |
|
this.WriteTimestamp("simpleTimer", simpleTimerEndTimestamp); |
|
this.WriteTimestamp("unbiasedTimer", unbiasedTimerEndTimestamp); |
|
} |
|
else { |
|
simpleTimerEndTimestamp = this.ReadTimestamp("simpleTimer", DateTime.Now.AddSeconds(60)); |
|
unbiasedTimerEndTimestamp = this.ReadTimestamp("unbiasedTimer", UnbiasedTime.Instance.Now().AddSeconds(60)); |
|
} |
|
} |
|
|
|
void OnApplicationQuit () { |
|
this.WriteTimestamp("simpleTimer", simpleTimerEndTimestamp); |
|
this.WriteTimestamp("unbiasedTimer", unbiasedTimerEndTimestamp); |
|
} |
|
|
|
void OnGUI () { |
|
// Calculate remaining time |
|
TimeSpan simpleRemaining = simpleTimerEndTimestamp - DateTime.Now; |
|
TimeSpan unbiasedRemaining = unbiasedTimerEndTimestamp - UnbiasedTime.Instance.Now(); |
|
|
|
float w = Screen.width; |
|
float h = Screen.height; |
|
|
|
GUIStyle boxStyle = GUI.skin.box; |
|
boxStyle.fontSize = (int) (12 * h / 480); |
|
|
|
GUIStyle labelStyle = GUI.skin.label; |
|
labelStyle.fontSize = (int) (24 * h / 480); |
|
labelStyle.alignment = TextAnchor.UpperCenter; |
|
|
|
GUIStyle btnStyle = GUI.skin.button; |
|
btnStyle.fontSize = (int) (14 * h / 480); |
|
|
|
// Simple timer gui |
|
string simpleFormatted = "END"; |
|
if (simpleRemaining.TotalSeconds > 0) { |
|
simpleFormatted = string.Format("{0}:{1:D2}:{2:D2}", simpleRemaining.Hours, simpleRemaining.Minutes, simpleRemaining.Seconds); |
|
} |
|
|
|
GUI.Box (new Rect(0.075f * w, 0.2f * h, 0.4f * w, 0.6f * h), "Simple timer", boxStyle); |
|
GUI.Label (new Rect(0.075f * w, 0.3f * h, 0.4f * w, 0.1f * h), simpleFormatted, labelStyle); |
|
|
|
if (GUI.Button (new Rect(0.1f * w, 0.5f * h, 0.35f * w, 0.1f * h), "+60 seconds", btnStyle)) { |
|
simpleTimerEndTimestamp = simpleTimerEndTimestamp.AddSeconds(60); |
|
this.WriteTimestamp("simpleTimer", simpleTimerEndTimestamp); |
|
} |
|
|
|
if (GUI.Button (new Rect(0.1f * w, 0.65f * h, 0.35f * w, 0.1f * h), "Reset", btnStyle)) { |
|
simpleTimerEndTimestamp = DateTime.Now.AddSeconds(60); |
|
this.WriteTimestamp("simpleTimer", simpleTimerEndTimestamp); |
|
} |
|
|
|
|
|
// Unbiased timer gui |
|
string unbiasedFormatted = "END"; |
|
if (unbiasedRemaining.TotalSeconds > 0) { |
|
unbiasedFormatted = string.Format("{0}:{1:D2}:{2:D2}", unbiasedRemaining.Hours, unbiasedRemaining.Minutes, unbiasedRemaining.Seconds); |
|
} |
|
|
|
string unbiasedName; |
|
if (UnbiasedTime.Instance.IsUsingSystemTime()) { |
|
unbiasedName = "Unbiased fallback"; |
|
} |
|
else { |
|
unbiasedName = "Unbiased timer"; |
|
} |
|
|
|
GUI.Box (new Rect(0.525f * w, 0.2f * h, 0.4f * w, 0.6f * h), unbiasedName, boxStyle); |
|
GUI.Label (new Rect(0.525f * w, 0.3f * h, 0.4f * w, 0.1f * h), unbiasedFormatted, labelStyle); |
|
|
|
if (GUI.Button (new Rect(0.55f * w, 0.5f * h, 0.35f * w, 0.1f * h), "+60 seconds", btnStyle)) { |
|
unbiasedTimerEndTimestamp = unbiasedTimerEndTimestamp.AddSeconds(60); |
|
this.WriteTimestamp("unbiasedTimer", unbiasedTimerEndTimestamp); |
|
} |
|
|
|
if (GUI.Button (new Rect(0.55f * w, 0.65f * h, 0.35f * w, 0.1f * h), "Reset", btnStyle)) { |
|
unbiasedTimerEndTimestamp = UnbiasedTime.Instance.Now().AddSeconds(60); |
|
this.WriteTimestamp("unbiasedTimer", unbiasedTimerEndTimestamp); |
|
} |
|
} |
|
|
|
private DateTime ReadTimestamp (string key, DateTime defaultValue) { |
|
long tmp = Convert.ToInt64(PlayerPrefs.GetString(key, "0")); |
|
if ( tmp == 0 ) { |
|
return defaultValue; |
|
} |
|
return DateTime.FromBinary(tmp); |
|
} |
|
|
|
private void WriteTimestamp (string key, DateTime time) { |
|
PlayerPrefs.SetString(key, time.ToBinary().ToString()); |
|
} |
|
}
|
|
|