#pragma once namespace dusk::game_clock { void ensure_initialized(); void reset_frame_timer(); constexpr float sim_pace() { return 1.0f / 30.0f; } constexpr float period_for_original_frames(float frame_count) { return frame_count * sim_pace(); } constexpr float ui_maximum_dt() { return 0.05f; } constexpr float ui_initial_dt() { return 1.0f / 60.0f; } struct MainLoopPacer { float presentation_dt_seconds; bool is_interpolating; int sim_ticks_to_run; float sim_pace; }; MainLoopPacer advance_main_loop(); void commit_sim_tick(); float sample_interpolation_step(); float consume_interval(const void* consumer); // Runtime sim rate override (default 30 hz). Resets the frame timer. void set_sim_rate(float hz); float get_sim_rate(); } // namespace dusk::game_clock