58 lines
1.2 KiB
C++
58 lines
1.2 KiB
C++
#include "core/jail/jgame.hpp"
|
|
|
|
namespace {
|
|
|
|
bool is_quitting = false;
|
|
Uint32 update_ticks = 0;
|
|
Uint32 update_time = 0;
|
|
Uint32 cycle_counter = 0;
|
|
Uint32 last_delta_time = 0;
|
|
|
|
} // namespace
|
|
|
|
void Jg::init() {
|
|
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);
|
|
update_time = SDL_GetTicks();
|
|
last_delta_time = update_time;
|
|
}
|
|
|
|
void Jg::finalize() {
|
|
SDL_Quit();
|
|
}
|
|
|
|
void Jg::quitSignal() {
|
|
is_quitting = true;
|
|
}
|
|
|
|
auto Jg::quitting() -> bool {
|
|
return is_quitting;
|
|
}
|
|
|
|
void Jg::setUpdateTicks(Uint32 milliseconds) {
|
|
update_ticks = milliseconds;
|
|
}
|
|
|
|
auto Jg::shouldUpdate() -> bool {
|
|
const Uint32 NOW = SDL_GetTicks();
|
|
if (NOW - update_time > update_ticks) {
|
|
update_time = NOW;
|
|
cycle_counter++;
|
|
return true;
|
|
}
|
|
// No toca update — retornem false sense més. Des de Phase B.2 ja no
|
|
// hi ha fibers: cap caller fa spin-waits (`while (!Jg::shouldUpdate())`)
|
|
// i el Director pren el control del main loop frame a frame.
|
|
return false;
|
|
}
|
|
|
|
auto Jg::getCycleCounter() -> Uint32 {
|
|
return cycle_counter;
|
|
}
|
|
|
|
auto Jg::getDeltaMs() -> Uint32 {
|
|
const Uint32 NOW = SDL_GetTicks();
|
|
const Uint32 DELTA = NOW - last_delta_time;
|
|
last_delta_time = NOW;
|
|
return DELTA;
|
|
}
|