Time is better.
This commit is contained in:
@@ -19,6 +19,5 @@ elseif(DUSK_TARGET_SYSTEM STREQUAL "psp")
|
||||
target_compile_definitions(${DUSK_TARGET_NAME}
|
||||
PRIVATE
|
||||
TIME_FIXED=1
|
||||
TIME_PLATFORM_STEP=0.016
|
||||
)
|
||||
endif()
|
||||
@@ -22,31 +22,33 @@ void timeInit(void) {
|
||||
TIME.time = TIME_STEP;
|
||||
TIME.delta = TIME_STEP;
|
||||
|
||||
TIME.fixedDelta = TIME_STEP;
|
||||
TIME.fixedTime = TIME_STEP;
|
||||
#if TIME_FIXED == 0
|
||||
TIME.dynamicTime = TIME_STEP;
|
||||
TIME.dynamicDelta = TIME_STEP;
|
||||
TIME.dynamicUpdate = false;
|
||||
#endif
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
#if TIME_FIXED == 0
|
||||
#if TIME_SDL2
|
||||
float_t newTime = (float_t)SDL_GetTicks() / 1000.0f;
|
||||
TIME.dynamicDelta = newTime - TIME.dynamicTime;
|
||||
TIME.dynamicTime = newTime;
|
||||
TIME.dynamicUpdate = true;
|
||||
#else
|
||||
#error "No time platform defined"
|
||||
#endif
|
||||
|
||||
assertTrue(TIME.dynamicDelta >= 0.0f, "Time delta is negative");
|
||||
if(TIME.dynamicTime - TIME.time >= TIME_STEP) {
|
||||
TIME.dynamicUpdate = false;
|
||||
TIME.delta = TIME_STEP;
|
||||
TIME.time += TIME_STEP;
|
||||
}
|
||||
#else
|
||||
#error "No time platform defined"
|
||||
TIME.delta = TIME_STEP;
|
||||
TIME.time += TIME_STEP;
|
||||
#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;
|
||||
}
|
||||
}
|
||||
@@ -8,18 +8,37 @@
|
||||
#pragma once
|
||||
#include "dusk.h"
|
||||
|
||||
#define TIME_STEP (1.0f / 60.0f) // 60 Ticks per second.
|
||||
|
||||
#ifndef TIME_FIXED
|
||||
#define TIME_FIXED 0
|
||||
#else
|
||||
#ifndef TIME_PLATFORM_STEP
|
||||
#error "TIME_PLATFORM_STEP must be defined when TIME_FIXED is enabled"
|
||||
#endif
|
||||
|
||||
#if TIME_PLATFORM_STEP <= 0.0f
|
||||
#error "TIME_PLATFORM_STEP must be greater than zero"
|
||||
#endif
|
||||
|
||||
#if TIME_PLATFORM_STEP != TIME_STEP
|
||||
#define TIME_FIXED 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
float_t delta;
|
||||
float_t time;
|
||||
|
||||
bool_t fixedUpdate;
|
||||
float_t fixedDelta;
|
||||
float_t fixedTime;
|
||||
#if TIME_FIXED == 0
|
||||
bool_t dynamicUpdate;
|
||||
float_t dynamicDelta;
|
||||
float_t dynamicTime;
|
||||
#endif
|
||||
} dusktime_t;
|
||||
|
||||
extern dusktime_t TIME;
|
||||
|
||||
#define TIME_STEP (1.0f / 60.0f) // 60 Ticks per second.
|
||||
|
||||
/**
|
||||
* Initializes the time system.
|
||||
|
||||
Reference in New Issue
Block a user