eobish

annotate 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
rev   line source
nuclear@0 1 #include <stdio.h>
nuclear@2 2 #include "fblib.h"
nuclear@4 3 #include "rend.h"
nuclear@4 4 #include "level.h"
nuclear@4 5 #include "player.h"
nuclear@0 6
nuclear@4 7 static int init(void);
nuclear@4 8 static void cleanup(void);
nuclear@4 9 static void display(void);
nuclear@4 10 static int keyb(int key, int state, void *cls);
nuclear@4 11
nuclear@4 12 static struct player player;
nuclear@4 13 static struct level level;
nuclear@0 14
nuclear@0 15 int main(int argc, char **argv)
nuclear@0 16 {
nuclear@4 17 if(init() == -1) {
nuclear@0 18 return 1;
nuclear@0 19 }
nuclear@0 20
nuclear@0 21 for(;;) {
nuclear@2 22 if(fb_process_events() == -1) {
nuclear@2 23 break;
nuclear@0 24 }
nuclear@0 25 display();
nuclear@0 26 }
nuclear@0 27
nuclear@4 28 cleanup();
nuclear@0 29 return 0;
nuclear@0 30 }
nuclear@0 31
nuclear@4 32 static int init(void)
nuclear@0 33 {
nuclear@3 34 int i;
nuclear@4 35
nuclear@4 36 if(fb_init(320, 240, 8) == -1) {
nuclear@4 37 return -1;
nuclear@4 38 }
nuclear@4 39 fb_keyboard_callback(keyb, 0);
nuclear@4 40
nuclear@4 41 level_init(&level);
nuclear@4 42 if(level_load(&level, "data/0.lvl") == -1) {
nuclear@4 43 return -1;
nuclear@4 44 }
nuclear@4 45
nuclear@4 46 if(init_renderer() == -1) {
nuclear@4 47 return -1;
nuclear@4 48 }
nuclear@4 49
nuclear@4 50 player_init(&player, &level);
nuclear@4 51
nuclear@4 52 /* setup the level tileset palette
nuclear@4 53 * TODO: do it properly
nuclear@4 54 */
nuclear@4 55 for(i=0; i<level.tileset.pal_size; i++) {
nuclear@4 56 struct color *col = level.tileset.pal + i;
nuclear@4 57 fb_set_palette_entry(i, col->r, col->g, col->b);
nuclear@4 58 }
nuclear@4 59
nuclear@4 60 return 0;
nuclear@4 61 }
nuclear@4 62
nuclear@4 63 static void cleanup(void)
nuclear@4 64 {
nuclear@4 65 shutdown_renderer();
nuclear@4 66 level_destroy(&level);
nuclear@4 67 fb_shutdown();
nuclear@4 68 }
nuclear@4 69
nuclear@4 70 static void display(void)
nuclear@4 71 {
nuclear@2 72 int width = fb_get_width();
nuclear@2 73 int height = fb_get_height();
nuclear@2 74 unsigned char *pixels = (unsigned char*)fb_begin_frame();
nuclear@0 75
nuclear@4 76 setup_renderer(pixels, width, height);
nuclear@4 77 render_level(&level, player.x, player.y, player.dir);
nuclear@0 78
nuclear@2 79 fb_end_frame();
nuclear@0 80 }
nuclear@4 81
nuclear@4 82 static int keyb(int key, int state, void *cls)
nuclear@4 83 {
nuclear@4 84 if(!state) return 0;
nuclear@4 85
nuclear@4 86 switch(key) {
nuclear@4 87 case 27:
nuclear@4 88 return -1;
nuclear@4 89
nuclear@4 90 case 'w':
nuclear@4 91 player_move(&player, 1, 0);
nuclear@4 92 break;
nuclear@4 93
nuclear@4 94 case 's':
nuclear@4 95 player_move(&player, -1, 0);
nuclear@4 96 break;
nuclear@4 97
nuclear@4 98 case 'q':
nuclear@4 99 player_move(&player, 0, -1);
nuclear@4 100 break;
nuclear@4 101
nuclear@4 102 case 'e':
nuclear@4 103 player_move(&player, 0, 1);
nuclear@4 104 break;
nuclear@4 105
nuclear@4 106 case 'a':
nuclear@4 107 player_turn(&player, -1);
nuclear@4 108 break;
nuclear@4 109
nuclear@4 110 case 'd':
nuclear@4 111 player_turn(&player, 1);
nuclear@4 112 break;
nuclear@4 113
nuclear@4 114 default:
nuclear@4 115 break;
nuclear@4 116 }
nuclear@4 117
nuclear@4 118 return 0;
nuclear@4 119 }