summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorP. J. McDermott <pj@pehjota.net>2021-08-10 01:43:37 (EDT)
committer P. J. McDermott <pj@pehjota.net>2021-08-10 01:43:37 (EDT)
commitbef699d2c8d63ec183ac089c1d43db9f7fdfffc7 (patch)
treefbdc1a1e47a55a578e57bf3008e03b3e4ac852d0 /src
parent1082493e2761c3f4d6a9809b5f012776723fd937 (diff)
downloadmazefight-bef699d2c8d63ec183ac089c1d43db9f7fdfffc7.zip
mazefight-bef699d2c8d63ec183ac089c1d43db9f7fdfffc7.tar.gz
mazefight-bef699d2c8d63ec183ac089c1d43db9f7fdfffc7.tar.bz2
menu: Add enemies text widget
Diffstat (limited to 'src')
-rw-r--r--src/menu.c69
1 files changed, 57 insertions, 12 deletions
diff --git a/src/menu.c b/src/menu.c
index e7f5795..bd88a65 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -39,9 +39,13 @@ struct _mf_menu {
char *seed_buf;
long seed;
int size;
+ char *enemies_buf;
+ int enemies;
+ int enemies_custom;
int fow;
int reveal;
- struct mftk_widget *text;
+ struct mftk_widget *seed_text;
+ struct mftk_widget *enemies_text;
SDL_Renderer *renderer;
};
@@ -62,6 +66,28 @@ _mf_menu_size(void *user_data, int state)
menu->size = state;
+ if (menu->enemies_custom == SDL_FALSE) {
+ menu->enemies = MF_MENU_ENEMIES_[state];
+ if (sprintf(menu->enemies_buf, "%d", menu->enemies) < 0) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
+ "Couldn't allocate string: %s",
+ strerror(errno));
+ return -1;
+ }
+ mftk_text_set_value(menu->enemies_text, menu->enemies_buf);
+ }
+
+ return 0;
+}
+
+static int
+_mf_menu_enemies(void *user_data, const char *enemies)
+{
+ struct _mf_menu *menu = (struct _mf_menu *) user_data;
+
+ menu->enemies = atoi(enemies);
+ menu->enemies_custom = SDL_TRUE;
+
return 0;
}
@@ -98,8 +124,7 @@ _mf_menu_play(void *user_data)
int e;
e = mf_game(menu->seed, MF_MENU_SIZES_[menu->size], menu->fow,
- menu->reveal, MF_MENU_ENEMIES_[menu->size],
- menu->renderer);
+ menu->reveal, menu->enemies, menu->renderer);
menu->seed = rand();
if (sprintf(menu->seed_buf, "%ld", menu->seed) < 0) {
@@ -108,7 +133,7 @@ _mf_menu_play(void *user_data)
strerror(errno));
return -1;
}
- mftk_text_set_value(menu->text, menu->seed_buf);
+ mftk_text_set_value(menu->seed_text, menu->seed_buf);
return e;
}
@@ -140,13 +165,26 @@ _mf_menu_form(SDL_Renderer *renderer, TTF_Font *text_font,
return NULL;
}
- menu->text = mftk_text_new('0', '9', rand_max_len, menu->seed_buf,
+ menu->enemies_buf = calloc(rand_max_len + 1,
+ sizeof(*menu->enemies_buf));
+ if (menu->enemies_buf == NULL || sprintf(menu->enemies_buf, "%d",
+ menu->enemies) < 0) {
+ SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
+ "Couldn't allocate string: %s",
+ strerror(errno));
+ return NULL;
+ }
+
+ menu->seed_text = mftk_text_new('0', '9', rand_max_len, menu->seed_buf,
text_font, text_color, SDL_TRUE, &_mf_menu_seed,
&_mf_menu_play, menu);
- grid = mftk_grid_new(5, 2, MF_ROW_M, MF_COL_M,
+ menu->enemies_text = mftk_text_new('0', '9', 2, menu->enemies_buf,
+ text_font, text_color, SDL_TRUE, &_mf_menu_enemies,
+ &_mf_menu_play, menu);
+ grid = mftk_grid_new(6, 2, MF_ROW_M, MF_COL_M,
mftk_label_new(text_font, "Seed", text_color, renderer),
MFTK_GRID_HALIGN_R|MFTK_GRID_VALIGN_T,
- menu->text,
+ menu->seed_text,
MFTK_GRID_HALIGN_L|MFTK_GRID_VALIGN_T,
mftk_label_new(text_font, "Size", text_color, renderer),
MFTK_GRID_HALIGN_R|MFTK_GRID_VALIGN_T,
@@ -156,6 +194,11 @@ _mf_menu_form(SDL_Renderer *renderer, TTF_Font *text_font,
&_mf_menu_play, menu, renderer, 0, 3, "15x15",
"20x20", "30x30"),
MFTK_GRID_HALIGN_L|MFTK_GRID_VALIGN_T,
+ mftk_label_new(text_font, "Enemies", text_color,
+ renderer),
+ MFTK_GRID_HALIGN_R|MFTK_GRID_VALIGN_T,
+ menu->enemies_text,
+ MFTK_GRID_HALIGN_L|MFTK_GRID_VALIGN_T,
mftk_label_new(text_font, "Fog of war", text_color,
renderer),
MFTK_GRID_HALIGN_R|MFTK_GRID_VALIGN_T,
@@ -216,11 +259,13 @@ mf_menu(SDL_Renderer *renderer)
maze_color.b = MF_COLOR_MAZE_B;
maze_color.a = MF_COLOR_MAZE_A;
- menu.seed = rand();
- menu.size = 0;
- menu.fow = SDL_TRUE;
- menu.reveal = SDL_FALSE;
- menu.renderer = renderer;
+ menu.seed = rand();
+ menu.size = 0;
+ menu.enemies = MF_MENU_ENEMIES_[0];
+ menu.enemies_custom = SDL_FALSE;
+ menu.fow = SDL_TRUE;
+ menu.reveal = SDL_FALSE;
+ menu.renderer = renderer;
font_path = mf_strcat(mf_get_fonts_dir(), "/FifteenTwenty-Regular.ttf");
title_font = TTF_OpenFont(font_path, MF_TITLE_FONT_S);