Files
kurovadis/scripts/timespan.gd
T
2025-06-22 23:22:32 -06:00

80 lines
1.4 KiB
GDScript
Executable File

class_name Timespan
extends Node
var _millis: int
var _MillisPerSecond = 1000
var _MillisPerMinute = _MillisPerSecond * 60
var _MillisPerHour = _MillisPerMinute * 60
var _MillisPerDay = _MillisPerHour * 24
func _init(millis: int):
_millis = millis
func Add(ts: Timespan) -> Timespan:
return Timespan.new(self._millis + ts._millis)
func Subtract(ts: Timespan) -> Timespan:
assert(self._millis >= ts._millis)
return Timespan.new(self._millis - ts._millis)
func CompareTo(ts: Timespan) -> int:
if self._millis > ts._millis: return 1
if self._millis < ts._millis: return -1
return 0
func Days() -> int:
return _millis / _MillisPerDay
func Hours() -> int:
return (_millis / _MillisPerHour) % 24
func Minutes() -> int:
return (_millis / _MillisPerMinute) % 60
func Seconds() -> int:
return (_millis / _MillisPerSecond) % 60
func Millis() -> int:
return _millis % 1000
func TotalDays() -> float:
return float(_millis) / _MillisPerDay
func TotalHours() -> float:
return float(_millis) / _MillisPerHour
func TotalMinutes() -> float:
return float(_millis) / _MillisPerMinute
func TotalSeconds() -> float:
return float(_millis) / _MillisPerSecond
func TotalMillis() -> int:
return _millis
static func FromTimestamps(t1: int, t2: int) -> Timespan:
assert(t1 <= t2)
return Timespan.new(t2 - t1)
static func Compare(ts1: Timespan, ts2: Timespan) -> int:
if ts1._millis > ts2._millis: return 1
if ts1._millis < ts2._millis: return -1
return 0