From d265161cb9c1651b365e447a654c6eabe6b5470d Mon Sep 17 00:00:00 2001 From: Wintermute Date: Sat, 19 Oct 2013 18:42:44 +0200 Subject: [PATCH] =?utf8?q?Zahlenrendern=20f=C3=BCr=20Prototyp.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- badge/jumpnrun/gnobbel.lv | 39 ++++++++++++++++++++++++++++----------- badge/jumpnrun/jumpnrun.c | 2 +- badge/jumpnrun/levels.txt | 2 +- badge/main.c | 1 + badge/ui/font.c | 35 +++++++++++++++++++++++++++++++++-- badge/ui/font.h | 1 + 6 files changed, 65 insertions(+), 15 deletions(-) diff --git a/badge/jumpnrun/gnobbel.lv b/badge/jumpnrun/gnobbel.lv index d31670d..f6cf1dc 100644 --- a/badge/jumpnrun/gnobbel.lv +++ b/badge/jumpnrun/gnobbel.lv @@ -1,16 +1,16 @@ + X + - - - ### # ### - ## ##### ### - ### # - #### ### ####### # - ##### ## ## ## ## ### ## ### # ###### - ###### ## ### #### + ### # ### + ## V ##### # ### V + ### # # M + #### ### ####### W c # #### + ##### ## ## ## ## ### ## V ###### # ## ###### + ###### ## ### #### V ####### - ######## DC -###################################### ################# ## ## ######### + P ######## W G dC +####################### ################# ## ## ######### [tiles] 0 tube_top_left @@ -19,9 +19,26 @@ 3 tube_right # brick ? square +^ spike_up +v spike_down +> spike_right +< spike_left [items] -D doc +d doc +c checkpoint +k key +e doc_encrypted [enemies] C cat +M mushroom +B bunny +S snake +@ spiral +R rotor +H dog +G giraffe +V bird +W bird_straight +X bird_dip diff --git a/badge/jumpnrun/jumpnrun.c b/badge/jumpnrun/jumpnrun.c index d3fa992..0bdac94 100644 --- a/badge/jumpnrun/jumpnrun.c +++ b/badge/jumpnrun/jumpnrun.c @@ -338,7 +338,7 @@ uint8_t jumpnrun_play(char const *lvname) { jumpnrun_game_state gs; memset(&gs, 0, sizeof(gs)); - for(gs.lives = 3; gs.status != JUMPNRUN_WON && gs.lives != 0; --gs.lives) { + for(gs.lives = 99; gs.status != JUMPNRUN_WON && gs.lives != 0; --gs.lives) { gs.status = JUMPNRUN_PLAYING; gs.left = 0; memset(&gs.player, 0, sizeof(gs.player)); diff --git a/badge/jumpnrun/levels.txt b/badge/jumpnrun/levels.txt index ab05360..93150ce 100644 --- a/badge/jumpnrun/levels.txt +++ b/badge/jumpnrun/levels.txt @@ -1,5 +1,5 @@ -smb gnobbel +smb wrongturn foo mean diff --git a/badge/main.c b/badge/main.c index be4ad7a..25a4356 100644 --- a/badge/main.c +++ b/badge/main.c @@ -231,6 +231,7 @@ int main(void) badge_framebuffer fb = { { { 0 } } }; fb.data[0][0] = badge_framebuffer_render_text(&fb, 2, 10, "foobar"); + fb.data[0][1] = badge_framebuffer_render_number(&fb, 10, 18, 99); badge_framebuffer_flush(&fb); } diff --git a/badge/ui/font.c b/badge/ui/font.c index 1ea57ad..2b60477 100644 --- a/badge/ui/font.c +++ b/badge/ui/font.c @@ -21,10 +21,14 @@ static uint8_t badge_framebuffer_render_char_with_fd(badge_framebuffer *fb, int8 return 0; } +static FRESULT open_font_file(FIL *fd) { + return f_open(fd, "font.dat", FA_OPEN_EXISTING | FA_READ); +} + uint8_t badge_framebuffer_render_char(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, char c) { FIL fd; - if(FR_OK == f_open(&fd, "font.dat", FA_OPEN_EXISTING | FA_READ)) { + if(FR_OK == open_font_file(&fd)) { badge_framebuffer_render_char_with_fd(fb, pos_x, pos_y, c, &fd); f_close(&fd); return 0; @@ -37,7 +41,7 @@ uint8_t badge_framebuffer_render_text(badge_framebuffer *fb, int8_t pos_x, int8_ uint8_t count = 0; FIL fd; - if(FR_OK == f_open(&fd, "font.dat", FA_OPEN_EXISTING | FA_READ)) { + if(FR_OK == open_font_file(&fd)) { while(*text) { if(0 != badge_framebuffer_render_char_with_fd(fb, pos_x, pos_y, *text, &fd)) { break; @@ -53,3 +57,30 @@ uint8_t badge_framebuffer_render_text(badge_framebuffer *fb, int8_t pos_x, int8_ return count; } + +static uint8_t badge_framebuffer_render_number_with_fd(badge_framebuffer *fb, int8_t *pos_x, int8_t pos_y, uint8_t number, FIL *fd) { + if(number > 10) { + badge_framebuffer_render_number_with_fd(fb, pos_x, pos_y, number / 10, fd); + } + + uint8_t err = badge_framebuffer_render_char_with_fd(fb, *pos_x, pos_y, '0' + number % 10, fd); + + if(err != 0) return err; + + *pos_x += BADGE_FONT_WIDTH; + return 0; +} + +uint8_t badge_framebuffer_render_number(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, uint8_t number) { + FIL fd; + + if(FR_OK == open_font_file(&fd)) { + uint8_t err = badge_framebuffer_render_number_with_fd(fb, &pos_x, pos_y, number, &fd); + + if(err != 0) { + return err; + } + } + + return 0; +} diff --git a/badge/ui/font.h b/badge/ui/font.h index 12b43a1..e6fe0b4 100644 --- a/badge/ui/font.h +++ b/badge/ui/font.h @@ -10,5 +10,6 @@ enum { uint8_t badge_framebuffer_render_char(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, char c); uint8_t badge_framebuffer_render_text(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, char const *text); +uint8_t badge_framebuffer_render_number(badge_framebuffer *fb, int8_t pos_x, int8_t pos_y, uint8_t number); #endif -- 2.20.1