Menu de pause + TODO.txt
This commit is contained in:
parent
d3fdd891d1
commit
f75f6b9962
7 changed files with 117 additions and 32 deletions
1
TODO.txt
Normal file
1
TODO.txt
Normal file
|
@ -0,0 +1 @@
|
|||
- Fuite de mémoire sur nouvelle partie
|
28
src/game.c
28
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){
|
||||
|
|
25
src/main.c
25
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();
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -13,3 +13,5 @@
|
|||
#pragma once
|
||||
|
||||
int load_map(Game *game, int mapn);
|
||||
|
||||
void clean_map(Game *game);
|
||||
|
|
83
src/ui.c
83
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;
|
||||
}
|
||||
|
||||
|
|
4
src/ui.h
4
src/ui.h
|
@ -31,8 +31,8 @@ typedef struct {
|
|||
|
||||
int type;
|
||||
union {
|
||||
int key;
|
||||
int click;
|
||||
int key;
|
||||
int click;
|
||||
};
|
||||
V2d pos;
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue