#ifndef plat_h #define plat_h #include "error.h" struct Heap; #ifdef assert #undef assert #endif #ifdef DEBUG #define assert(expr) \ imp_assert( \ expr, \ #expr, \ __FILE__, \ __LINE__ \ ) #else #define assert(expr) #endif int imp_assert( int val, const char* expr, const char* file, int line ); void print(const char* fmt, ...); void print_err(const char* fmt, ...); void print_war(const char* fmt, ...); void pbreak(Error code); typedef struct { int mpf; int fps; unsigned long pt, ct; unsigned long now, next; } FPS; void init_fps(FPS* f, int mpf); void fps_begin(FPS* f); void fps_end(FPS* f); void fps_update(FPS* f); typedef enum { btn_unknown, btn_left, btn_right, btn_up, btn_down, btn_shoot, btn_jump, btn_special, btn_start, btn_count } Btn; typedef enum { btn_state_pressed = 1 << 0, btn_state_just_pressed = 1 << 1, btn_state_just_released = 1 << 2 } Key_State; typedef struct App { int o, s; int fps; Error err; unsigned* fb; struct Heap* heap; unsigned char btn_states[btn_count]; } App; App* new_app(struct Heap* mem, const char* n); void deinit_app(App* a); void app_begin(App* a); void app_end(App* a); void init_audio(void); void deinit_audio(void); void play_sound(int len); int btn_pressed(const App* a, Btn btn); int btn_just_pressed(const App* a, Btn btn); int btn_just_released(const App* a, Btn btn); void ren_debug_rect( int x, int y, int w, int h, unsigned colour ); #endif