eobish
diff src/main.c @ 4:ce0548d24918
mostly works
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 18 Jan 2015 13:30:30 +0200 |
parents | e32bdd5fb622 |
children |
line diff
1.1 --- a/src/main.c Sun Jan 18 05:51:51 2015 +0200 1.2 +++ b/src/main.c Sun Jan 18 13:30:30 2015 +0200 1.3 @@ -1,14 +1,22 @@ 1.4 #include <stdio.h> 1.5 #include "fblib.h" 1.6 +#include "rend.h" 1.7 +#include "level.h" 1.8 +#include "player.h" 1.9 1.10 -static void display(); 1.11 +static int init(void); 1.12 +static void cleanup(void); 1.13 +static void display(void); 1.14 +static int keyb(int key, int state, void *cls); 1.15 + 1.16 +static struct player player; 1.17 +static struct level level; 1.18 1.19 int main(int argc, char **argv) 1.20 { 1.21 - if(fb_init(320, 240, 8) == -1) { 1.22 + if(init() == -1) { 1.23 return 1; 1.24 } 1.25 - fb_set_palette_entry(1, 255, 0, 0); 1.26 1.27 for(;;) { 1.28 if(fb_process_events() == -1) { 1.29 @@ -17,21 +25,95 @@ 1.30 display(); 1.31 } 1.32 1.33 -done: 1.34 - fb_shutdown(); 1.35 + cleanup(); 1.36 return 0; 1.37 } 1.38 1.39 -void display() 1.40 +static int init(void) 1.41 { 1.42 int i; 1.43 + 1.44 + if(fb_init(320, 240, 8) == -1) { 1.45 + return -1; 1.46 + } 1.47 + fb_keyboard_callback(keyb, 0); 1.48 + 1.49 + level_init(&level); 1.50 + if(level_load(&level, "data/0.lvl") == -1) { 1.51 + return -1; 1.52 + } 1.53 + 1.54 + if(init_renderer() == -1) { 1.55 + return -1; 1.56 + } 1.57 + 1.58 + player_init(&player, &level); 1.59 + 1.60 + /* setup the level tileset palette 1.61 + * TODO: do it properly 1.62 + */ 1.63 + for(i=0; i<level.tileset.pal_size; i++) { 1.64 + struct color *col = level.tileset.pal + i; 1.65 + fb_set_palette_entry(i, col->r, col->g, col->b); 1.66 + } 1.67 + 1.68 + return 0; 1.69 +} 1.70 + 1.71 +static void cleanup(void) 1.72 +{ 1.73 + shutdown_renderer(); 1.74 + level_destroy(&level); 1.75 + fb_shutdown(); 1.76 +} 1.77 + 1.78 +static void display(void) 1.79 +{ 1.80 int width = fb_get_width(); 1.81 int height = fb_get_height(); 1.82 unsigned char *pixels = (unsigned char*)fb_begin_frame(); 1.83 1.84 - for(i=0; i<width * height; i++) { 1.85 - *pixels++ = 1; 1.86 - } 1.87 + setup_renderer(pixels, width, height); 1.88 + render_level(&level, player.x, player.y, player.dir); 1.89 1.90 fb_end_frame(); 1.91 } 1.92 + 1.93 +static int keyb(int key, int state, void *cls) 1.94 +{ 1.95 + if(!state) return 0; 1.96 + 1.97 + switch(key) { 1.98 + case 27: 1.99 + return -1; 1.100 + 1.101 + case 'w': 1.102 + player_move(&player, 1, 0); 1.103 + break; 1.104 + 1.105 + case 's': 1.106 + player_move(&player, -1, 0); 1.107 + break; 1.108 + 1.109 + case 'q': 1.110 + player_move(&player, 0, -1); 1.111 + break; 1.112 + 1.113 + case 'e': 1.114 + player_move(&player, 0, 1); 1.115 + break; 1.116 + 1.117 + case 'a': 1.118 + player_turn(&player, -1); 1.119 + break; 1.120 + 1.121 + case 'd': 1.122 + player_turn(&player, 1); 1.123 + break; 1.124 + 1.125 + default: 1.126 + break; 1.127 + } 1.128 + 1.129 + return 0; 1.130 +}