Files
owniverse/world/owniverse/simulation_time.gd
T
Kirill befb377774 Add new music tracks to the sound directory
- Added cosmic_unicorns.ogg
- Added funky_eldritch.ogg
- Added meditative_beings.ogg
- Added owniverse_main_theme.ogg

These tracks enhance the audio experience of the project.
2026-10-01 07:48:52 +03:00

25 lines
1.4 KiB
GDScript

extends RefCounted
const E = preload("res://world/owniverse/math/exact.gd")
const STATE_VERSION: String = "0.3.0"
const TICKS_PER_YEAR: int = 1000000000
static func processed_year(datetime):
var whole = E.floor_value(datetime)
var ticks: int = roundi(E.approx(E.subtract(datetime, whole)) * TICKS_PER_YEAR)
return E.add(whole, E.divide(ticks / 100000000, 10))
static func elapsed_years(from_year, to_year):
return E.subtract(to_year, from_year)
## Only the fractional year is converted to ticks; the whole age stays exact.
static func advance(time: Dictionary, delta: float, speed: int) -> Dictionary:
var whole_years = E.floor_value(time.datetime)
var ticks: int = roundi(E.approx(E.subtract(time.datetime, whole_years)) * TICKS_PER_YEAR)
var elapsed_years_float: float = delta * pow(10.0, speed - 1)
var elapsed_whole = E.of(floorf(elapsed_years_float))
var increment: float = (elapsed_years_float - floorf(elapsed_years_float)) * TICKS_PER_YEAR + float(time.get("tick_remainder", 0.0))
var whole: float = roundf(increment) if absf(increment - roundf(increment)) < 1e-6 else floorf(increment)
var elapsed = E.add(elapsed_whole, E.divide(E.of(whole), TICKS_PER_YEAR))
var datetime = E.add(whole_years, E.add(E.divide(ticks, TICKS_PER_YEAR), elapsed))
return {"datetime": datetime, "year": processed_year(datetime), "tick_remainder": increment - whole}