From bef699d2c8d63ec183ac089c1d43db9f7fdfffc7 Mon Sep 17 00:00:00 2001 From: P. J. McDermott Date: Tue, 10 Aug 2021 01:43:37 -0400 Subject: menu: Add enemies text widget --- (limited to 'src') 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); -- cgit v0.9.1