nuclear@0: #include nuclear@2: #include "fblib.h" nuclear@4: #include "rend.h" nuclear@4: #include "level.h" nuclear@4: #include "player.h" nuclear@0: nuclear@4: static int init(void); nuclear@4: static void cleanup(void); nuclear@4: static void display(void); nuclear@4: static int keyb(int key, int state, void *cls); nuclear@4: nuclear@4: static struct player player; nuclear@4: static struct level level; nuclear@0: nuclear@0: int main(int argc, char **argv) nuclear@0: { nuclear@4: if(init() == -1) { nuclear@0: return 1; nuclear@0: } nuclear@0: nuclear@0: for(;;) { nuclear@2: if(fb_process_events() == -1) { nuclear@2: break; nuclear@0: } nuclear@0: display(); nuclear@0: } nuclear@0: nuclear@4: cleanup(); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@4: static int init(void) nuclear@0: { nuclear@3: int i; nuclear@4: nuclear@4: if(fb_init(320, 240, 8) == -1) { nuclear@4: return -1; nuclear@4: } nuclear@4: fb_keyboard_callback(keyb, 0); nuclear@4: nuclear@4: level_init(&level); nuclear@4: if(level_load(&level, "data/0.lvl") == -1) { nuclear@4: return -1; nuclear@4: } nuclear@4: nuclear@4: if(init_renderer() == -1) { nuclear@4: return -1; nuclear@4: } nuclear@4: nuclear@4: player_init(&player, &level); nuclear@4: nuclear@4: /* setup the level tileset palette nuclear@4: * TODO: do it properly nuclear@4: */ nuclear@4: for(i=0; ir, col->g, col->b); nuclear@4: } nuclear@4: nuclear@4: return 0; nuclear@4: } nuclear@4: nuclear@4: static void cleanup(void) nuclear@4: { nuclear@4: shutdown_renderer(); nuclear@4: level_destroy(&level); nuclear@4: fb_shutdown(); nuclear@4: } nuclear@4: nuclear@4: static void display(void) nuclear@4: { nuclear@2: int width = fb_get_width(); nuclear@2: int height = fb_get_height(); nuclear@2: unsigned char *pixels = (unsigned char*)fb_begin_frame(); nuclear@0: nuclear@4: setup_renderer(pixels, width, height); nuclear@4: render_level(&level, player.x, player.y, player.dir); nuclear@0: nuclear@2: fb_end_frame(); nuclear@0: } nuclear@4: nuclear@4: static int keyb(int key, int state, void *cls) nuclear@4: { nuclear@4: if(!state) return 0; nuclear@4: nuclear@4: switch(key) { nuclear@4: case 27: nuclear@4: return -1; nuclear@4: nuclear@4: case 'w': nuclear@4: player_move(&player, 1, 0); nuclear@4: break; nuclear@4: nuclear@4: case 's': nuclear@4: player_move(&player, -1, 0); nuclear@4: break; nuclear@4: nuclear@4: case 'q': nuclear@4: player_move(&player, 0, -1); nuclear@4: break; nuclear@4: nuclear@4: case 'e': nuclear@4: player_move(&player, 0, 1); nuclear@4: break; nuclear@4: nuclear@4: case 'a': nuclear@4: player_turn(&player, -1); nuclear@4: break; nuclear@4: nuclear@4: case 'd': nuclear@4: player_turn(&player, 1); nuclear@4: break; nuclear@4: nuclear@4: default: nuclear@4: break; nuclear@4: } nuclear@4: nuclear@4: return 0; nuclear@4: }