Files
CHOMPStation2/code/modules/planet/time.dm
2017-02-06 20:45:21 -05:00

86 lines
2.9 KiB
Plaintext

// This datum allows one to add and subtract various lengths of time. It really shines when using an alternate time system.
/datum/time
// Note that the following is actually measured in 10ths of a second.
var/seconds_in_day = 60 * 60 * 24 * 10 // 86,400 seconds
var/seconds_in_hour = 60 * 60 * 10 // 3,600 seconds
var/seconds_in_minute = 60 * 10
// This holds the amount of seconds.
var/seconds_stored = 0
/datum/time/New(new_time)
if(new_time)
seconds_stored = new_time
..()
/datum/time/proc/add_seconds(amount)
var/answer = seconds_stored + amount * 10
if(answer >= seconds_in_day)
rollover(answer)
return new type(answer)
/datum/time/proc/add_minutes(amount)
var/real_amount = amount * seconds_in_minute
var/answer = real_amount + seconds_stored
if(answer >= seconds_in_day)
rollover(answer)
return new type(answer)
/datum/time/proc/add_hours(amount)
var/real_amount = amount * seconds_in_hour
var/answer = real_amount + seconds_stored
if(answer >= seconds_in_day)
rollover(answer)
return new type(answer)
/datum/time/proc/rollover(time)
return max(time - seconds_in_day, 0)
/datum/time/proc/make_random_time()
return new type(rand(0, seconds_in_day - 1))
// This works almost exactly like time2text.
// The advantage of this is that it can handle time systems beyond 24h.
// The downside is a lack of date capability.
/datum/time/proc/show_time(format)
var/time = seconds_stored
while(time >= seconds_in_day) // First, get rid of extra days.
time = rollover(time)
var/hours = time / seconds_in_hour
var/remaining_hour = time % seconds_in_hour
var/minutes = remaining_hour / seconds_in_minute
var/seconds = remaining_hour % seconds_in_minute / 10
var/hour_text = num2text(Floor(hours))
if(length(hour_text) < 2)
hour_text = "0[hour_text]" // Add padding if needed, to look more like time2text().
var/minute_text = num2text(Floor(minutes))
if(length(minute_text) < 2)
minute_text = "0[minute_text]"
var/second_text = num2text(Floor(seconds))
if(length(second_text) < 2)
second_text = "0[second_text]"
var/answer = replacetext(format, "hh", hour_text)
answer = replacetext(answer, "mm", minute_text)
answer = replacetext(answer, "ss", second_text)
return answer
/*
/client/verb/test_time_systems()
var/input_seconds = input("Put in a number of seconds.", "Time Test") as num
//input_seconds = min(input_seconds, 864000)
world << "time2text() result: [time2text(input_seconds, "hh mm ss")]"
var/datum/time/time = new (input_seconds)
world << "show_time() result: [time.show_time("hh mm ss")]"
var/datum/time/sif/sif = new (input_seconds)
world << "sif show_time() result: [sif.show_time("hh mm ss")]"
*/
// 115,200
// We're gonna pretend there are 32 hours in a Sif day instead of 32.64 for the purposes of not losing sanity. We lose 38m 24s but the alternative is a path to madness.
/datum/time/sif
seconds_in_day = 60 * 60 * 32 * 10 // 115,200 seconds. If we did 32.64 hours/day it would be around 117,504 seconds instead.