From f75f6b9962f4fa3a5b0ef26ffd9b9345e88c73c0 Mon Sep 17 00:00:00 2001 From: attilavs2 Date: Sun, 23 Mar 2025 20:47:10 +0100 Subject: [PATCH] Menu de pause + TODO.txt --- TODO.txt | 1 + src/game.c | 28 ++++++++++++++++++ src/main.c | 25 ---------------- src/map.c | 6 ++++ src/map.h | 2 ++ src/ui.c | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++---- src/ui.h | 4 +-- 7 files changed, 117 insertions(+), 32 deletions(-) create mode 100644 TODO.txt diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..25be56c --- /dev/null +++ b/TODO.txt @@ -0,0 +1 @@ +- Fuite de mémoire sur nouvelle partie diff --git a/src/game.c b/src/game.c index acdb42f..2a198e5 100644 --- a/src/game.c +++ b/src/game.c @@ -55,6 +55,33 @@ int init_game(Game *game){ printf("Failed to init game. Error : %x\n", err); return 1; } + + load_map(game, 0); + + int c_worker = 0; + + for(int k = 0; k < 16; k++){ + for(int j = 0; j < 16; j++){ + Machine *coal_mine = add_machine(&game->machines, (V2d){k*250+40,j*400+40}); + coal_mine->type = MT_CoalMine; + Machine *iron_mine = add_machine(&game->machines, (V2d){k*250+40,j*400+240}); + iron_mine->type = MT_IronMine; + Machine *furnace = add_machine(&game->machines, (V2d){k*250+140,j*400+140}); + furnace->type = MT_Furnace; + + for(int i = 0; i < 10; i++) + add_worker(&game->workers, (V2d){.x=k*250+100,.y=j*400}); + for(int i = 0; i < 4; i++) + assign_worker_machine(coal_mine, &game->workers.worker_stack[c_worker++]); + for(int i = 4; i < 8; i++) + assign_worker_machine(iron_mine, &game->workers.worker_stack[c_worker++]); + assign_worker_fetch(iron_mine, furnace, &game->workers.worker_stack[c_worker++]); + assign_worker_fetch(coal_mine, furnace, &game->workers.worker_stack[c_worker++]); + if(!(furnace->id%1000)) + printf("%d\n",furnace->id); + } + } + return 0; } @@ -69,6 +96,7 @@ void clean_workers(Workers *workers){ void clean_game(Game *game){ clean_machines(&game->machines); clean_workers(&game->workers); + clean_map(game); } Worker *add_worker(Workers *workers, V2d pos){ diff --git a/src/main.c b/src/main.c index a4b2722..65f642b 100644 --- a/src/main.c +++ b/src/main.c @@ -27,7 +27,6 @@ int init(Game *game){ int err = init_draw(); err |= init_game(game); - load_map(game, 0); init_ui(); return err; } @@ -52,30 +51,6 @@ int main(){ return 1; } - int c_worker = 0; - - for(int k = 0; k < 16; k++){ - for(int j = 0; j < 16; j++){ - Machine *coal_mine = add_machine(&game.machines, (V2d){k*250+40,j*400+40}); - coal_mine->type = MT_CoalMine; - Machine *iron_mine = add_machine(&game.machines, (V2d){k*250+40,j*400+240}); - iron_mine->type = MT_IronMine; - Machine *furnace = add_machine(&game.machines, (V2d){k*250+140,j*400+140}); - furnace->type = MT_Furnace; - - for(int i = 0; i < 10; i++) - add_worker(&game.workers, (V2d){.x=k*250+100,.y=j*400}); - for(int i = 0; i < 4; i++) - assign_worker_machine(coal_mine, &game.workers.worker_stack[c_worker++]); - for(int i = 4; i < 8; i++) - assign_worker_machine(iron_mine, &game.workers.worker_stack[c_worker++]); - assign_worker_fetch(iron_mine, furnace, &game.workers.worker_stack[c_worker++]); - assign_worker_fetch(coal_mine, furnace, &game.workers.worker_stack[c_worker++]); - if(!(furnace->id%1000)) - printf("%d\n",furnace->id); - } - } - while(!WindowShouldClose() && !game.exit){ BeginDrawing(); diff --git a/src/map.c b/src/map.c index 0ecb5b8..8d21738 100644 --- a/src/map.c +++ b/src/map.c @@ -25,6 +25,7 @@ int generate_coll(Game *game, int mapn){ lmap->coll[(int)((pos.y+1) * lmap->width + pos.x)] = 1; lmap->coll[(int)((pos.y+1) * lmap->width + pos.x+1)] = 1; } + return 0; } int load_map(Game *game, int mapn){ @@ -40,3 +41,8 @@ int load_map(Game *game, int mapn){ return 1; return 0; } + +void clean_map(Game *game){ + free(game->map.coll); + game->map.coll = NULL; +} diff --git a/src/map.h b/src/map.h index f9d5105..46167d3 100644 --- a/src/map.h +++ b/src/map.h @@ -13,3 +13,5 @@ #pragma once int load_map(Game *game, int mapn); + +void clean_map(Game *game); diff --git a/src/ui.c b/src/ui.c index 72417d8..302506f 100644 --- a/src/ui.c +++ b/src/ui.c @@ -67,7 +67,7 @@ void widget_draw_game(Widget *widget, Game *game){ draw_game(game); } -void main_menu_exit(Game *game){ +void game_exit(Game *game){ game->exit = true; } @@ -109,12 +109,83 @@ Widget main_menu = { .color_1 = BLACK, .color_txt = BLACK, .txt = "Exit", - .handler = main_menu_exit + .handler = game_exit }, }, .button_n = 4 }; +void pause_menu_draw(Widget *widget, Game *game){ + DrawRectangleRounded((Rectangle){500, 150, 280, 380}, 0.1, 3, + color_main_brown1); + + draw_buttons(widget); +} + +void pause_menu_resume(Game *game){ + gui_info.widget_active[4] = false; + gui_info.widget_active[0] = true; + game->paused = false; +} + +void pause_menu_new_game(Game *game){ + clean_game(game); + init_game(game); + pause_menu_resume(game); +} + +Widget pause_menu = { + .box = {.x = 0, .y = 0, .width = -1, .height = -1}, + .draw = pause_menu_draw, + .do_event = buttons_do_event, + .capt_flags = CF_Mouse | CF_Keyb, + .buttons = { + {.box = {520,170,240,40}, + .color_0 = WHITE, + .color_1 = BLACK, + .color_txt = BLACK, + .txt = "Resume", + .handler = pause_menu_resume + }, + {.box = {520,240,240,40}, + .color_0 = WHITE, + .color_1 = BLACK, + .color_txt = BLACK, + .txt = "New game", + .handler = pause_menu_new_game + }, + {.box = {520,290,240,40}, + .color_0 = WHITE, + .color_1 = BLACK, + .color_txt = GRAY, + .txt = "Save game", + .handler = NULL + }, + {.box = {520,340,240,40}, + .color_0 = WHITE, + .color_1 = BLACK, + .color_txt = GRAY, + .txt = "Load game", + .handler = NULL + }, + {.box = {520,390,240,40}, + .color_0 = WHITE, + .color_1 = BLACK, + .color_txt = GRAY, + .txt = "Settings", + .handler = NULL + }, + {.box = {520,470,240,40}, + .color_0 = WHITE, + .color_1 = BLACK, + .color_txt = BLACK, + .txt = "Exit", + .handler = game_exit + } + }, + .button_n = 6 +}; + void worker_widget_draw(Widget *widget, Game *game){ DrawRectangleRounded(widget->box, 0.1, 3, color_main_brown); } @@ -155,8 +226,8 @@ void init_ui(){ // Android exclusive key -> no exit key SetExitKey(KEY_MENU); - gui_info = (GUIInfo){{&game_widget, &main_menu, &worker_widget}, - {false, true, false}, + gui_info = (GUIInfo){{&game_widget, &main_menu, &worker_widget, &machine_widget, &pause_menu}, + {false, true, false, false, false}, NULL}; } @@ -244,8 +315,10 @@ bool keydown(int key){ } void goto_pause_menu(Game *game){ + if(gui_info.widget_active[1]) + return; memset(gui_info.widget_active, false, sizeof(bool)*WIDGET_N); - gui_info.widget_active[1] = true; + gui_info.widget_active[4] = true; game->paused = true; } diff --git a/src/ui.h b/src/ui.h index dbd1891..a8da8bd 100644 --- a/src/ui.h +++ b/src/ui.h @@ -31,8 +31,8 @@ typedef struct { int type; union { - int key; - int click; + int key; + int click; }; V2d pos;