Jaysyn904 66a0a3e043 Initial commit
Initial commit.
2024-08-03 14:13:18 -04:00

263 lines
8.6 KiB
Plaintext

//::///////////////////////////////////////////////
//:: FileName mk_inc_time.nss
//:: Copyright (c) 2008 Kamiryn
//:://////////////////////////////////////////////
/*
*/
//:://////////////////////////////////////////////
//:: Created By: Kamiryn
//:: Created On: 07.03.2008
//:://////////////////////////////////////////////
const string g_sDateZero = "mk_datezero";
struct mk_datetime
{
int nYear;
int nMonth;
int nDay;
int nHour;
int nMinutes;
int nSeconds;
int nMilliSeconds;
};
// time stamp is in minutes since 'DateZero'.
// initializes 'DateZero' with current time,
// should be called once before any of the other functions gets used
// returns DateZero
struct mk_datetime mk_initTimeStamp();
// returns current time as time stamp
float mk_getCurrentTimeStamp();
// deletes time stamp on oObject
void mk_deleteTimeStampOnObject(object oObject, string sVarName);
// writes current time as time stamp on object oObject storing it in sVarName
void mk_writeTimeStampToObject(object oObject, string sVarName);
// returns time stamp stored in sVarName on object oObject
float mk_getTimeStampFromObject(object oObject, string sVarName);
// returns time passed since time stamp sVarName was written on oObject
float mk_getTimeSinceTimeStamp(object oObject, string sVarName);
// returns time stamp as datetime span (datetime span = time stamp)
struct mk_datetime mk_timeStampToDateTimeSpan(float fTimeStamp);
// returns time stamp as datetime (datetime = DateZero + time stamp)
struct mk_datetime mk_timeStampToDateTime(float fTimeStamp);
// returns date1 + date2
struct mk_datetime mk_addDateTime(struct mk_datetime date1, struct mk_datetime date2);
// returns datetime span as readable string
string mk_formatDateTimeSpan(struct mk_datetime datetime);
// returnd datetime as readable string
string mk_formatDateTime(struct mk_datetime datetime);
float fHourToMinutes = HoursToSeconds(1) / 60.0f;
const float fYearToHours = 8064.0f; // 8064 = 12.0f*28.0f*24.0f;
const float fMonthToHours = 672.0f; // 672 = 28.0f*24.0f;
const float fDayToHours = 24.0f;
struct mk_datetime mk_initTimeStamp()
{
string strZeroDate = GetLocalString(GetModule(), "MK_ZERODATE");
if (strZeroDate == "")
{
strZeroDate = FloatToString(IntToFloat(GetCalendarYear()),5,0) +
FloatToString(IntToFloat(GetCalendarMonth()),2,0) +
FloatToString(IntToFloat(GetCalendarDay()),2,0) +
FloatToString(IntToFloat(GetTimeHour()),2,0);
SetLocalString(GetModule(), "MK_ZERODATE", strZeroDate);
}
struct mk_datetime datetime;
datetime.nYear = StringToInt(GetSubString(strZeroDate,0,5));
datetime.nMonth = StringToInt(GetSubString(strZeroDate,5,2));
datetime.nDay = StringToInt(GetSubString(strZeroDate,7,2));
datetime.nHour = StringToInt(GetSubString(strZeroDate,9,2));
datetime.nMinutes = 0;
datetime.nSeconds = 0;
datetime.nMilliSeconds = 0;
return datetime;
}
float mk_getCurrentTimeStamp()
{
struct mk_datetime datetime = mk_initTimeStamp();
float fYear = IntToFloat(GetCalendarYear() - datetime.nYear);
float fMonth = IntToFloat(GetCalendarMonth() - datetime.nMonth);
float fDay = IntToFloat(GetCalendarDay() - datetime.nDay);
float fHour = IntToFloat(GetTimeHour() - datetime.nHour);
float fMinute = IntToFloat(GetTimeMinute());
float fSecond = IntToFloat(GetTimeSecond()) + IntToFloat(GetTimeMillisecond())/1000.0;
/*
SendMessageToPC(GetFirstPC(),
FloatToString(fYear,8,0)+
FloatToString(fMonth,3,0)+
FloatToString(fDay,3,0)+
FloatToString(fHour,3,0)+
FloatToString(fMinute,3,0)+
FloatToString(fSecond,3,0));
*/
float fTimeStamp =
(
(
(
(
(
(fYear * 12.0) + fMonth
) * 28.0
) + fDay
) * 24.0
) + fHour
) + ((fSecond / 60.0) + fMinute) / fHourToMinutes;
return fTimeStamp;
}
void mk_deleteTimeStampOnObject(object oObject, string sVarName)
{
DeleteLocalFloat(oObject, sVarName);
}
void mk_writeTimeStampToObject(object oObject, string sVarName)
{
if (!GetIsObjectValid(oObject)) return;
float fTimeStamp = mk_getCurrentTimeStamp();
SetLocalFloat(oObject, sVarName, fTimeStamp);
/* SendMessageToPC(oObject,"mk_writeTimeStampToObject: "+
FloatToString(fTimeStamp,17,5)); */
}
float mk_getTimeStampFromObject(object oObject, string sVarName)
{
float fTimeStamp = GetLocalFloat(oObject,sVarName);
/* SendMessageToPC(oObject,"mk_getTimeStampFromObject: "+
FloatToString(fTimeStamp,17,5));*/
return fTimeStamp;
}
float mk_getTimeSinceTimeStamp(object oObject, string sVarName)
{
float fCurrentTimeStamp = mk_getCurrentTimeStamp();
/* SendMessageToPC(oObject,"mk_getCurrentTimeStamp: "+
FloatToString(fCurrentTimeStamp,17,5));*/
float fTimeStamp = mk_getTimeStampFromObject(oObject,sVarName);
/* SendMessageToPC(oObject,"mk_getTimeSinceTimeStamp: "+
FloatToString(fCurrentTimeStamp - fTimeStamp,17,5));*/
return fCurrentTimeStamp - fTimeStamp;
}
struct mk_datetime mk_timeStampToDateTimeSpan(float fTimeStamp)
{
struct mk_datetime datetime;
float fMinSec = fTimeStamp - IntToFloat(FloatToInt(fTimeStamp));
int nMinutes = FloatToInt(fMinSec*fHourToMinutes);
float fSeconds = (fMinSec*fHourToMinutes - IntToFloat(nMinutes))*60.0;
int nSeconds = FloatToInt(fSeconds);
int nMilliSeconds = FloatToInt((fSeconds - IntToFloat(nSeconds))*1000.0);
// SendMessageToPC(GetFirstPC(), "fMinSec : "+FloatToString(fMinSec));
// SendMessageToPC(GetFirstPC(), "fMinSec2: "+FloatToString((IntToFloat(nSeconds)/60.0 + IntToFloat(nMinutes))/fHourToMinutes));
int nYear = FloatToInt(fTimeStamp / fYearToHours);
int nMonth = FloatToInt((fTimeStamp - IntToFloat(nYear)*fYearToHours) / fMonthToHours);
int nDay = FloatToInt((fTimeStamp - IntToFloat(nYear)*fYearToHours - IntToFloat(nMonth)*fMonthToHours) / fDayToHours);
int nHour = FloatToInt(fTimeStamp - IntToFloat(nYear)*fYearToHours - IntToFloat(nMonth)*fMonthToHours - IntToFloat(nDay)*fDayToHours);
datetime.nYear = nYear;
datetime.nMonth = nMonth;
datetime.nDay = nDay;
datetime.nHour = nHour;
datetime.nMinutes = nMinutes;
datetime.nSeconds = nSeconds;
datetime.nMilliSeconds = nMilliSeconds;
return datetime;
}
struct mk_datetime mk_addDateTime(struct mk_datetime date1, struct mk_datetime date2)
{
struct mk_datetime date;
date.nMilliSeconds = (date1.nMilliSeconds + date2.nMilliSeconds) % 1000;
date.nSeconds = (date1.nSeconds + date2.nSeconds
+ (date1.nMilliSeconds + date2.nMilliSeconds) / 1000) % 60;
date.nMinutes = (date1.nMinutes + date2.nMinutes
+ (date1.nSeconds + date2.nSeconds) / 60) % FloatToInt(fHourToMinutes)
;
date.nHour = (date1.nHour + date2.nHour
+ (date1.nMinutes + date2.nMinutes) / FloatToInt(fHourToMinutes)) % 24;
date.nDay = (date1.nDay + date2.nDay + (date1.nHour + date2.nHour)/24 - 1) % 28 + 1;
date.nMonth = (date1.nMonth + date2.nMonth + (date1.nDay + date2.nDay - 1) / 28 - 1) % 12 + 1;
date.nYear = (date1.nYear + date2.nYear + (date1.nMonth + date2.nMonth - 1) / 12);
return date;
}
struct mk_datetime mk_timeStampToDateTime(float fTimeStamp)
{
return mk_addDateTime(mk_initTimeStamp(),mk_timeStampToDateTimeSpan(fTimeStamp));
}
string mk_formatDateTimeSpan(struct mk_datetime datetime)
{
string sDateTimeSpan =
(datetime.nYear>0 ? IntToString(datetime.nYear)+" years, " : "")+
(datetime.nMonth>0 ? IntToString(datetime.nMonth)+" month, " : "")+
(datetime.nDay>0 ? IntToString(datetime.nDay)+" days, " : "")+
(datetime.nHour>0 ? IntToString(datetime.nHour)+" hours, " : "")+
(datetime.nMinutes>0 ? IntToString(datetime.nMinutes)+" minutes, " : "")+
(datetime.nSeconds>0 ? IntToString(datetime.nSeconds)+" seconds, " : "")+
(datetime.nMilliSeconds>0 ? IntToString(datetime.nMilliSeconds)+" milliseconds, " : "");
return GetStringLeft(sDateTimeSpan, GetStringLength(sDateTimeSpan)-2);
}
string mk_formatDateTime(struct mk_datetime datetime)
{
string sDateTime =
"year "+IntToString(datetime.nYear)+", "+
"month "+IntToString(datetime.nMonth)+", "+
"day "+IntToString(datetime.nDay)+", "+
"hour "+IntToString(datetime.nHour)+", "+
"minutes "+IntToString(datetime.nMinutes)+", "+
"seconds "+IntToString(datetime.nSeconds)+", "+
"seconds "+IntToString(datetime.nMilliSeconds);
return sDateTime;
}
/* DO NOT CLOSE THIS TOP COMMENT!
This main() function is here only for compilation testing.
void main() {}
/* */