#ifndef TIMER
#define TIMER

struct timer {
    int timerid;
    int on;
    
    double interval; // Time of timer
    int repeat;
    double remain_time;   // How much time until the timer executes
    void (*cb)(void *data);
    void *data;
    int owndata;
    int next;
  int app; /* True if this timer is an "app" timer, and should always update; otherwise, only update with game time */
};

int timer_make(double interval, void (*callback)(void *param), void *param, int own, int app);
struct timer *id2timer(int id);
void timer_remove(int id);
void timer_start(struct timer *t);
void timer_pause(struct timer *t);
void timer_stop(struct timer *t);
void timer_update(double dt, double scale);
void timerr_settime(struct timer *t, double interval);

void timers_free();

#endif
