Menu de pause + TODO.txt

This commit is contained in:
attilavs2 2025-03-23 20:47:10 +01:00
parent d3fdd891d1
commit f75f6b9962
7 changed files with 117 additions and 32 deletions

1
TODO.txt Normal file
View file

@ -0,0 +1 @@
- Fuite de mémoire sur nouvelle partie

View file

@ -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){

View file

@ -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();

View file

@ -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;
}

View file

@ -13,3 +13,5 @@
#pragma once
int load_map(Game *game, int mapn);
void clean_map(Game *game);

View file

@ -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;
}

View file

@ -31,8 +31,8 @@ typedef struct {
int type;
union {
int key;
int click;
int key;
int click;
};
V2d pos;