Time fixes

This commit is contained in:
2026-07-18 20:31:42 -05:00
parent a618ff46fe
commit 1174e471f6
16 changed files with 676 additions and 22 deletions
+44 -5
View File
@@ -12,6 +12,7 @@
#include "entity/entitymanager.h"
static void countingUpdateCallback(
entitymanager_t *mgr,
const entityid_t entityId,
const componentid_t componentId,
void *user
@@ -58,10 +59,9 @@ static void test_sceneEntitiesAreIsolatedPerScene(void **state) {
assert_int_equal(memoryGetAllocatedCount(), 0);
}
static void test_sceneUpdateOnlyTicksActiveScene(void **state) {
static void test_sceneFixedUpdateOnlyTicksActiveScene(void **state) {
sceneInit();
timeInit();
TIME.dynamicUpdate = true;
sceneid_t sceneA = sceneCreate();
sceneid_t sceneB = sceneCreate();
@@ -84,13 +84,13 @@ static void test_sceneUpdateOnlyTicksActiveScene(void **state) {
);
sceneSetActive(sceneA);
sceneUpdate();
sceneFixedUpdate();
assert_int_equal(counterA, 1);
assert_int_equal(counterB, 0);
sceneSetActive(sceneB);
sceneUpdate();
sceneFixedUpdate();
assert_int_equal(counterA, 1);
assert_int_equal(counterB, 1);
@@ -99,6 +99,44 @@ static void test_sceneUpdateOnlyTicksActiveScene(void **state) {
assert_int_equal(memoryGetAllocatedCount(), 0);
}
static void test_sceneUpdateOnlyRunsFixedUpdateOnNonDynamicFrames(void **state) {
sceneInit();
timeInit();
sceneid_t scene = sceneCreate();
sceneSetActive(scene);
uint32_t counter = 0;
entitymanager_t *entities = sceneGetEntities(scene);
entityid_t entity = entityManagerAdd(entities);
entityUpdateAdd(
entities, entity, countingUpdateCallback, COMPONENT_ID_INVALID, &counter
);
#if DUSK_TIME_DYNAMIC
// Still accumulating toward the next fixed timestep: sceneUpdate must
// not run sceneFixedUpdate yet.
TIME.dynamicUpdate = true;
sceneUpdate();
assert_int_equal(counter, 0);
// A fixed timestep boundary was just crossed: sceneUpdate must run
// sceneFixedUpdate exactly once.
TIME.dynamicUpdate = false;
sceneUpdate();
assert_int_equal(counter, 1);
#else
// Non-dynamic-time platforms: every frame is a fixed timestep.
sceneUpdate();
assert_int_equal(counter, 1);
sceneUpdate();
assert_int_equal(counter, 2);
#endif
sceneDispose();
assert_int_equal(memoryGetAllocatedCount(), 0);
}
static void test_sceneDestroyClearsActive(void **state) {
sceneInit();
@@ -117,7 +155,8 @@ int main(int argc, char **argv) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_sceneCreateDestroy),
cmocka_unit_test(test_sceneEntitiesAreIsolatedPerScene),
cmocka_unit_test(test_sceneUpdateOnlyTicksActiveScene),
cmocka_unit_test(test_sceneFixedUpdateOnlyTicksActiveScene),
cmocka_unit_test(test_sceneUpdateOnlyRunsFixedUpdateOnNonDynamicFrames),
cmocka_unit_test(test_sceneDestroyClearsActive),
};