diff --git a/CMakeLists.txt b/CMakeLists.txt index 1e7500a..d0f12d9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ set(SOURCES src/bar/init.c src/bar/update.c src/bar/draw.c + src/bar/change.c ) set(ASSETS diff --git a/include/bar.h b/include/bar.h index ba58488..bbb25dc 100644 --- a/include/bar.h +++ b/include/bar.h @@ -13,8 +13,14 @@ struct Bar { float fill; }; +#define BAR_TOTAL 4 enum BarID { BAR_CASH, BAR_HUMAN, BAR_SMILE, BAR_SUN }; struct Bar bar_init(enum BarID bar_id); void bar_update(struct Bar *bar); void bar_draw(struct Bar bar); +/* Increase/decrease bar fill level. + * Return 1 when bar is fully filled. + * Return -1 when bar is fully emptied. + * Return 0 otherwise. */ +int bar_change(struct Bar *bar, float modifier); diff --git a/src/bar/change.c b/src/bar/change.c new file mode 100644 index 0000000..3f3ef19 --- /dev/null +++ b/src/bar/change.c @@ -0,0 +1,16 @@ +#include "bar.h" + +int +bar_change(struct Bar *bar, float modifier) +{ + bar->fill += modifier; + if (bar->fill >= 1.0) { + bar->fill = 1.0; + return 1; + } + if (bar->fill <= 0.0) { + bar->fill = 0.0; + return -1; + } + return 0; +} diff --git a/src/bar/draw.c b/src/bar/draw.c index 03d1706..ae3ec07 100644 --- a/src/bar/draw.c +++ b/src/bar/draw.c @@ -8,8 +8,8 @@ bar_draw(struct Bar bar) const int y = bar.y + bar.height - height; /* borders */ - drect_border(bar.x - 1, bar.y - 1, bar.x + BAR_WIDTH + 1, bar.y + bar.height + 1, - C_WHITE, 2, C_BLACK); + drect_border(bar.x - 1, bar.y - 1, bar.x + BAR_WIDTH + 1, + bar.y + bar.height + 1, C_WHITE, 2, C_BLACK); /* fill */ drect(bar.x, y, bar.x + BAR_WIDTH, y + height, C_RGB(0, 32, 32)); } diff --git a/src/main.c b/src/main.c index 8d52cc4..8c80f02 100644 --- a/src/main.c +++ b/src/main.c @@ -2,7 +2,7 @@ #include #include -static struct Bar bars[4]; +static struct Bar bars[BAR_TOTAL]; static void main_draw(void); @@ -12,9 +12,12 @@ main(void) int i; /* init */ - for (i = 0; i < 4; i += 1) + for (i = 0; i < BAR_TOTAL; i += 1) bars[i] = bar_init(i); + bar_change(&bars[BAR_CASH], 0.2); + bar_change(&bars[BAR_SMILE], 0.4); + main_draw(); getkey(); @@ -33,7 +36,7 @@ main_draw(void) dimage(0, 0, &bimg_background); /* draw bars */ - for (i = 0; i < 4; i += 1) + for (i = 0; i < BAR_TOTAL; i += 1) bar_draw(bars[i]); dupdate();