80 lines
1.4 KiB
GDScript
Executable File
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
|