52 lines
1.1 KiB
C
52 lines
1.1 KiB
C
/**
|
|
* Copyright (c) 2025 Dominic Masters
|
|
*
|
|
* This software is released under the MIT License.
|
|
* https://opensource.org/licenses/MIT
|
|
*/
|
|
|
|
#include "time.h"
|
|
#include "util/memory.h"
|
|
#include "assert/assert.h"
|
|
|
|
#if TIME_SDL2
|
|
#include <SDL2/SDL.h>
|
|
#endif
|
|
|
|
dusktime_t TIME;
|
|
|
|
void timeInit(void) {
|
|
memoryZero(&TIME, sizeof(TIME));
|
|
|
|
// Set these to something non-zero.
|
|
TIME.time = TIME_STEP;
|
|
TIME.delta = TIME_STEP;
|
|
|
|
TIME.fixedDelta = TIME_STEP;
|
|
TIME.fixedTime = TIME_STEP;
|
|
}
|
|
|
|
void timeUpdate(void) {
|
|
float_t delta;
|
|
#if TIME_SDL2
|
|
delta = (float_t)SDL_GetTicks() / 1000.0f - TIME.time;
|
|
#elif TIME_FIXED
|
|
delta = TIME_PLATFORM_STEP;
|
|
#else
|
|
#error "No time platform defined"
|
|
#endif
|
|
|
|
TIME.delta = delta;
|
|
assertTrue(TIME.delta >= 0.0f, "Time delta is negative");
|
|
TIME.time += TIME.delta;
|
|
|
|
// Perform a fixed time step.
|
|
if(TIME.time - TIME.fixedTime >= (TIME_STEP * 0.9f)) {
|
|
TIME.fixedUpdate = true;
|
|
TIME.fixedDelta = TIME_STEP;
|
|
TIME.fixedTime += TIME_STEP;
|
|
} else {
|
|
TIME.fixedDelta = 0.0f;
|
|
TIME.fixedUpdate = false;
|
|
}
|
|
} |