5 #include "../game/game.h"
8 static int needed_score = 5;
10 static char *level_symbol = NULL;
11 static size_t level_symbol_len = 0;
12 static double score_timer = 0.0;
13 static double level_timer = 0.0;
15 static void level_up()
18 needed_score = (level + 1) * 5;
23 get_roman_numeral(level, &level_symbol, &level_symbol_len);
32 if (score >= needed_score) {
33 score -= needed_score;
50 static void render_score(struct winsize ws)
52 int bar_flash = clamp(score_timer * 255, 0, 255);
53 set_color((struct color) {bar_flash, 255, bar_flash}, true);
55 int level_flash = clamp(level_timer * 255, 0, 255);
56 set_color((struct color) {255, 255, 255 - level_flash}, false);
58 size_t level_len = level_symbol_len > 0 ? 6 + level_symbol_len + 1 : 0;
59 char level_display[level_len];
62 sprintf(level_display, "Level %s", level_symbol);
64 int bar = (double) score / (double) needed_score * ws.ws_col;
65 int level_start = (ws.ws_col - level_len) / 2;
66 int level_end = level_start + level_len - 1;
68 for (int i = 0; i < ws.ws_col; i++) {
72 if (i >= level_start && i < level_end)
73 printf("%c", level_display[i - level_start]);
81 static void score_globalstep(double dtime)
83 if (level_timer > 0.0)
86 if (score_timer > 0.0)
87 score_timer -= dtime * 3.0;
90 __attribute__ ((constructor)) static void init()
92 register_render_component(&render_score);
93 register_globalstep((struct globalstep) {
95 .callback = &score_globalstep,