65 lines
1.5 KiB
C
65 lines
1.5 KiB
C
#include "core2/statetimer.h"
|
|
extern f32 time_getDelta(void);
|
|
|
|
typedef struct{
|
|
f32 now;
|
|
f32 previous;
|
|
}StateTimer;
|
|
|
|
/* .bss */
|
|
StateTimer stateTimerList[8];
|
|
|
|
/* .code */
|
|
f32 stateTimer_get(enum state_timer_e timer_id){
|
|
return stateTimerList[timer_id].now;
|
|
}
|
|
|
|
f32 stateTimer_getPrevious(enum state_timer_e timer_id){
|
|
return stateTimerList[timer_id].previous;
|
|
}
|
|
|
|
bool stateTimer_isActive(enum state_timer_e timer_id){
|
|
return stateTimerList[timer_id].now != 0.0f;
|
|
}
|
|
|
|
bool stateTimer_isDone(enum state_timer_e timer_id){
|
|
return stateTimerList[timer_id].now == 0.0f;
|
|
}
|
|
|
|
bool stateTimer_isAt(enum state_timer_e timer_id, f32 value){
|
|
return (stateTimerList[timer_id].now < value) && (value <= stateTimerList[timer_id].previous);
|
|
}
|
|
|
|
void stateTimer_free(void){}
|
|
|
|
void stateTimer_init(void){
|
|
int i;
|
|
for(i = 0; i < 7; i++){
|
|
stateTimerList[i].now = 0.0f;
|
|
stateTimerList[i].previous = 0.0f;
|
|
}
|
|
}
|
|
|
|
void stateTimer_clear(enum state_timer_e timer_id){
|
|
stateTimer_set(timer_id, 0.0f);
|
|
}
|
|
|
|
void stateTimer_set(enum state_timer_e timer_id, f32 arg1){
|
|
stateTimerList[timer_id].now = arg1;
|
|
stateTimerList[timer_id].previous = arg1;
|
|
}
|
|
|
|
void stateTimer_update(void){
|
|
int i;
|
|
f32 delta = time_getDelta();
|
|
for(i = 0; i < 7; i++){
|
|
stateTimerList[i].previous = stateTimerList[i].now;
|
|
if(0.0f != stateTimerList[i].previous){
|
|
stateTimerList[i].now -= delta;
|
|
if(stateTimerList[i].now < 0.0f){
|
|
stateTimerList[i].now = 0.0f;
|
|
}
|
|
}
|
|
}
|
|
}
|