mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
86 lines
2.9 KiB
Plaintext
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. |