Hello,
i’m trying make - counter days after installing the game to today.
For example good works:
from 15:30 to 17:42 is 17-15 =2 hours, 42-30=12 min
from 1.03.2013 to 23.03.2013 - days: 23-1=22, month: 3-3 = 0, years 2013 - 2013=0
For example NOT good works:
From 12:59 to 13:05 is 13-12=1 hours 05-59= -54 (is <0 then +60) so 1h 05 min
From 29.03.2013 to 1.04.2013 days 1-29= -28 (is <0 then +31) =3 days monts 4-3=1, 2013-2013=0 = 3 days, 1 month
Can some look and optimized, reapir or comments ?
var FirstPlay:int;
var data_start = Date();
var day_start = data_now.Now.Day;
var month_start = data_now.Now.Month;
var year_start = data_now.Now.Year;
var hours_start = data_now.Now.Hour;
var minutes_start = data_now.Now.Minute;
var seconds_start = data_now.Now.Second;
var data_now = Date();
var day_now = data_now.Now.Day;
var month_now = data_now.Now.Month;
var year_now = data_now.Now.Year;
var hours_now = data_now.Now.Hour;
var minutes_now = data_now.Now.Minute;
var seconds_now = data_now.Now.Second;
FirstPlay = PlayerPrefs.GetInt("FirstPlay");
function Update(){
data_now = Date();
day_now = data_now.Now.Day;
month_now = data_now.Now.Month;
year_now = data_now.Now.Year;
hours_now = data_now.Now.Hour;
minutes_now = data_now.Now.Minute;
seconds_now = data_now.Now.Second;
var minutes = minutes_now - minutes_start;
if (minutes<0){
minutes+=59;
}
var hours = (hours_now *100 + minutes_now - hours_start *100 - minutes_start)/100;
if (hours<0){
hours+=23;
}
var days = day_now - day_start;
if (days<0){
days+=31;
}
var month = month_now - month_start;
if (month<0){
month+=12;
}
if (FirstPlay==-1)
{
FirstTimeLoad();
}
GameObject.Find("GUI_Time").guiText.text = " Time " + days + "d " +hours + "h " + minutes +"m";
//GameObject.Find("GUI_Time").guiText.text = hours_start + ":" + minutes_start + " "+ ":" + seconds_start + " " + hours_now + ":"+minutes_now + " "+ ":"+ seconds_now + " Time " + hours + "h" + minutes +"m";
}
function FirstTimeSave()
{
data_start = data_now;
day_start = day_now;
month_start = month_now;
year_start = year_now;
hours_start = hours_now;
minutes_start = minutes_now;
seconds_start = seconds_now;
PlayerPrefs.SetInt("day_start", day_start);
PlayerPrefs.SetInt("month_start", month_start);
PlayerPrefs.SetInt("year_start", year_start);
PlayerPrefs.SetInt("hours_start", hours_start);
PlayerPrefs.SetInt("minutes_start", minutes_start);
PlayerPrefs.SetInt("seconds_start", seconds_start);
FirstPlay =-1;
PlayerPrefs.SetInt("FirstPlay", FirstPlay);
}
function FirstTimeLoad()
{
data_start = data_now;
day_start = day_now;
month_start = month_now;
year_start = year_now;
hours_start = hours_now;
minutes_start = minutes_now;
seconds_start = seconds_now;
day_start = PlayerPrefs.GetInt("day_start");
month_start = PlayerPrefs.GetInt("month_start");
year_start = PlayerPrefs.GetInt("year_start");
hours_start = PlayerPrefs.GetInt("hours_start");
minutes_start = PlayerPrefs.GetInt("minutes_start");
seconds_start = PlayerPrefs.GetInt("seconds_start");
}
This code could be made a hell of a lot tidier, give me two seconds
This is a quick C# implementation
private DateTime dateTimeNow; //The Date and Time now
private DateTime startDate; //The start Date and Time
private GameObject go; //GameObject we find, cached.
private void Start()
{
// If PlayerPrefs does not have the key "StartDate"
if (!PlayerPrefs.HasKey("StartDate"))
{
//StartDate is the current Date and Time.
startDate = DateTime.Now;
//Store the current date and time in PlayerPrefs under the key "StartDate"
PlayerPrefs.SetString("StartDate", DateTime.Now.ToString());
}
else //We have already set the StartDate.
{
// The start date and time pulled from PlayerPrefs.
startDate = DateTime.Parse(PlayerPrefs.GetString("StartDate"));
}
// Our current date and time now.
dateTimeNow = DateTime.Now;
// GameObject we are going to update.
go = GameObject.Find("GUI_Time");
}
private void GetTimePlayed()
{
// Get the duration between the date and time now, and the start date and time.
TimeSpan duration = dateTimeNow - startDate;
//Update the guiText to show the duration played.
go.guiText.text = string.Format("Played for {0} days, {1} hours, {2} minutes, {3} seconds", duration.TotalDays, duration.TotalHours, duration.TotalMinutes, duration.TotalSeconds);
}
and here is my attempt a UnityScript
var dateTimeNow : DateTime;
var startDate : DateTime;
var go : GameObject;
function Start()
{
if (!PlayerPrefs.HasKey("StartDate"))
{
startDate = DateTime.Now;
PlayerPrefs.SetString("StartDate", DateTime.Now.ToString());
}
else
{
startDate = DateTime.Parse(PlayerPrefs.GetString("StartDate"));
}
dateTimeNow = DateTime.Now;
go = GameObject.Find("GUI_Time");
}
function GetTimePlayed()
{
var duration : TimeSpan = dateTimeNow - startDate;
go.guiText.text = " Time " + duration.TotalDays + "d " + duration.TotalDays + "h " + duration.TotalMinutes + "m";
}
Thanks for reply.
This looks very simple, but there is some errors:
var dateTimeNow : DateTime;
var startDate : DateTime;
Assets/SKRYPTY/Time_new.js(1,27): BCE0018: The name ‘DateTime’ does not denote a valid type (‘not found’). Did you mean ‘System.DateTime’?
Assets/SKRYPTY/Time_new.js(2,25): BCE0018: The name ‘DateTime’ does not denote a valid type (‘not found’). Did you mean ‘System.DateTime’?
- I change “DateTime” to “System.DateTime”, it’s works
PlayerPrefs.SetString("StartDate", DateTime.Now.ToString());
- “DateTime.Now” or “DateTimeNow”?
var duration : TimeSpan = dateTimeNow - startDate;
Assets/SKRYPTY/Time_new.js(22,28): BCE0018: The name ‘TimeSpan’ does not denote a valid type (‘not found’). Did you mean ‘Boo.Lang.Compiler.Ast.TimeSpanLiteralExpression’?
- I dont know …
Can help ?
Thanks for reply.
I correnct this script - small fix- becouse days, hours, minutes look like: 0.000324343423443.
It works, but have small error - abnormal time - 811 minutes.
Now I see:
Time 1d 14h 811m
var dateTimeNow : System.DateTime;
var startDate : System.DateTime;
var go : GameObject;
function Start()
{
if (!PlayerPrefs.HasKey("StartDate"))
{
startDate = System.DateTime.Now;
PlayerPrefs.SetString("StartDate", System.DateTime.Now.ToString());
}
else
{
startDate = System.DateTime.Parse(PlayerPrefs.GetString("StartDate"));
}
dateTimeNow = System.DateTime.Now;
go = GameObject.Find("GUI_Time2");
}
function GetTimePlayed()
{
var duration : System.TimeSpan = dateTimeNow - startDate;
go.guiText.text = " Time " + duration.TotalDays.ToString("f0") + "d " + duration.TotalHours.ToString("f0") + "h " + duration.TotalMinutes.ToString("f0") + "m";
}
function Update()
{
GetTimePlayed();
}
New version script is too bad.
Now I see:
Time 00d 01h 62m
I clear PlayerPfers and nothing, still errors in minutes…
I fixed the code above, give this a try
Work OK.
When I see my first code and your code - this is awesome.
Now is easly…
Thanks very much