package iron.system; class Time { public static var scale = 1.0; // TODO: VR Frame Time Override - used to sync physics with VR headset refresh rate #if lnx_vr public static var vrFrameTime: Float = -1.0; // VR frame time in seconds (-1 = not in VR) static var lastVRFrameTime: Float = 0.0; static var vrFrameCount: Int = 0; static var normalModeLogged: Bool = false; #end static var frequency: Null = null; static function initFrequency() { frequency = kha.Display.primary != null ? kha.Display.primary.frequency : 60; } public static var step(get, never): Float; static function get_step(): Float { if (frequency == null) initFrequency(); return 1 / frequency; } static var _fixedStep: Null = 1/60; public static var fixedStep(get, never): Float; static function get_fixedStep(): Float { return _fixedStep; } public static function initFixedStep(value: Float = 1 / 60) { _fixedStep = value; } static var lastTime = 0.0; static var _delta = 0.0; public static var delta(get, never): Float; static function get_delta(): Float { return _delta; } static var lastRenderTime = 0.0; static var _renderDelta = 0.0; public static var renderDelta(get, never): Float; static function get_renderDelta(): Float { return _renderDelta; } public static inline function time(): Float { return kha.Scheduler.time() * scale; } public static inline function realTime(): Float { return kha.Scheduler.realTime() * scale; } public static function update() { #if lnx_vr // TODO: use VR frame time when in VR present mode to sync physics with headset refresh if (vrFrameTime >= 0.0) { if (lastVRFrameTime > 0.0) { _delta = vrFrameTime - lastVRFrameTime; } else { _delta = 1.0 / 90.0; // Default to 90Hz for first VR frame } lastVRFrameTime = vrFrameTime; return; } else { if (!normalModeLogged) { normalModeLogged = true; } } #end _delta = realTime() - lastTime; lastTime = realTime(); } public static function render() { _renderDelta = realTime() - lastRenderTime; lastRenderTime = realTime(); } }