aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2021-06-22 11:10:29 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2021-06-22 11:10:29 +0200
commit125e7eca1a13a4e1ea374e480038e565d74d684b (patch)
treee38d9b7e106ba6d48f9c0c8c9f91ca725f1b46d8
parent8b50cd53c82070bc614babdcb72001afd9053ed9 (diff)
downloaddungeon_game-125e7eca1a13a4e1ea374e480038e565d74d684b.tar.xz
Add on_level_up callback
-rw-r--r--plugins/score/score.c9
-rw-r--r--plugins/score/score.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/plugins/score/score.c b/plugins/score/score.c
index 6a8e85d..7e911df 100644
--- a/plugins/score/score.c
+++ b/plugins/score/score.c
@@ -11,6 +11,7 @@ static char *level_symbol = NULL;
static size_t level_symbol_len = 0;
static double score_timer = 0.0;
static double level_timer = 0.0;
+static struct list *on_level_up = NULL;
static void level_up()
{
@@ -23,6 +24,9 @@ static void level_up()
get_roman_numeral(level, &level_symbol, &level_symbol_len);
level_timer = 2.0;
+
+ for (struct list *ptr = on_level_up; ptr != NULL; ptr = ptr->next)
+ ((void (*)(int)) ptr->element)(level);
}
void add_score(int s)
@@ -47,6 +51,11 @@ int get_level()
return level;
}
+void register_on_level_up(void (*callback)(int new_level))
+{
+ on_level_up = add_element(on_level_up, callback);
+}
+
static void render_score(struct winsize ws)
{
int bar_flash = clamp(score_timer * 255, 0, 255);
diff --git a/plugins/score/score.h b/plugins/score/score.h
index 4d02903..92331cd 100644
--- a/plugins/score/score.h
+++ b/plugins/score/score.h
@@ -4,5 +4,6 @@
void add_score(int s);
int get_score();
int get_level();
+void register_on_level_up(void (*callback)(int new_level));
#endif