A game engine for top-down 2D RPG games.
rpg game-engine raylib c99
at main 1.5 kB view raw
1#include "keraforge/time.h" 2#include <keraforge.h> 3#include <time.h> 4 5 6void kf_timer_start(struct kf_timer *timer) 7{ 8 time(&timer->start); 9 time(&timer->now); 10 timer->stop = 0; 11 12 if (timer->mode == kf_timermode_oneshot) 13 timer->age = 0; 14} 15 16void kf_timer_tick(struct kf_timer *timer) 17{ 18 if (timer->stop) 19 return; 20 21 time_t now = time(NULL); 22 time_t dif = now - timer->now; 23 timer->age += dif; 24 timer->now = now; 25 26 switch (timer->mode) 27 { 28 case kf_timermode_stopwatch: 29 break; 30 case kf_timermode_repeat: 31 if (timer->age >= timer->length) 32 { 33 timer->age = 0; 34 if (timer->callback) 35 timer->callback(timer); 36 } 37 break; 38 case kf_timermode_oneshot: 39 if (timer->age >= timer->length) 40 { 41 timer->stop = now; 42 timer->age = 0; 43 if (timer->callback) 44 timer->callback(timer); 45 } 46 break; 47 } 48 49} 50 51void kf_timer_stop(struct kf_timer *timer) 52{ 53 time(&timer->stop); 54 if (timer->mode == kf_timermode_stopwatch) 55 { 56 timer->length = timer->stop - timer->start; 57 if (timer->callback) 58 timer->callback(timer); 59 } 60} 61 62size_t kf_timer_snprint(struct kf_timer *timer, char *buf, size_t bufsiz) 63{ 64 size_t n = 0; 65 switch (timer->mode) 66 { 67 case kf_timermode_stopwatch: 68 n += strftime(buf, bufsiz, "%Hh:%Mm:%Ss", gmtime(&timer->length)); 69 break; 70 case kf_timermode_repeat: 71 case kf_timermode_oneshot: 72 n += strftime(buf, bufsiz, "%Hh:%Mm:%Ss/", gmtime(&timer->age)); 73 n += strftime(buf + n, bufsiz - n, "%Hh:%Mm:%Ss", gmtime(&timer->length)); 74 break; 75 } 76 return n; 77}