diff --git a/CMakeLists.txt b/CMakeLists.txt index 14c5f0e..79062ee 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -51,6 +51,7 @@ set(SOURCES src/main.c src/menu.c src/save.c + src/util.c generated/setlevel.c generated/times.c) diff --git a/include/menu.h b/include/menu.h index cd6e13d..bbb987d 100755 --- a/include/menu.h +++ b/include/menu.h @@ -1,3 +1,6 @@ -char start_menu(); +#pragma once + +enum MenuCode { MenuLevelSel, MenuAllMode, MenuTutorial, MenuExit }; + +enum MenuCode start_menu(); char speed_menu(int *id_level); -int round(float num); diff --git a/include/util.h b/include/util.h new file mode 100644 index 0000000..4b0ba63 --- /dev/null +++ b/include/util.h @@ -0,0 +1,3 @@ +#pragma once + +int round(float num); diff --git a/src/main.c b/src/main.c index a8f66ab..9519e0c 100644 --- a/src/main.c +++ b/src/main.c @@ -4,10 +4,10 @@ #include #include #include - #include "collide.h" #include "define.h" #include "drawlevel.h" +#include "util.h" #include "menu.h" #include "save.h" #include "setlevel.h" @@ -18,18 +18,62 @@ #define MAX_VSPD 9.0 #define FRICTION 0.2 -int main(void); -void end(unsigned int frame); +static int callback(volatile int *frame_elapsed); +static void end(unsigned int frame); +static void game(int *id_level, char mode, char *type); -char run = 0; +int main(void) +{ + static int run = 0; + if (!run) { + gint_world_switch(GINT_CALL(restore)); + run = 1; + } -int callback(volatile int *frame_elapsed) + char mode = 0; + char type = 1; + const enum MenuCode valeur = start_menu(&type); + + switch (valeur) { + case MenuLevelSel: { + int id_level = 1; + if (!speed_menu(&id_level)) { + mode = 1; + game(&id_level, mode, &type); + } else + main(); + } break; + case MenuAllMode: { + int id_level = 1; + mode = 0; + game(&id_level, mode, &type); + } break; + case MenuTutorial: { + int id_level = 0; + mode = 1; + game(&id_level, mode, &type); + } break; + case MenuExit: + gint_world_switch(GINT_CALL(savefile)); + break; + } + return 0; +} + +static int callback(volatile int *frame_elapsed) { *frame_elapsed = 1; return TIMER_CONTINUE; } -void game(int *id_level, char mode, char *type) +static void end(unsigned int frame) +{ + draw_end((int)frame, 15, 2); + sleep_ms(7000); + main(); +} + +static void game(int *id_level, char mode, char *type) { volatile int frame_elapsed = 1; int timer = timer_configure(TIMER_ANY, 1000000 / FPS, @@ -147,8 +191,7 @@ void game(int *id_level, char mode, char *type) } else hspd = 0; // Action key - if (keydown(KEY_SHIFT) && !check && - nbswitch > 0 && + if (keydown(KEY_SHIFT) && !check && nbswitch > 0 && ((collide_solid(player_x, player_y - 1, level) && gravity) || (collide_solid(player_x, player_y + 1, level) && @@ -505,42 +548,3 @@ void game(int *id_level, char mode, char *type) } else main(); } - -void end(unsigned int frame) -{ - draw_end((int)frame, 15, 2); - sleep_ms(7000); - main(); -} - -int main(void) -{ - if (!run) { - gint_world_switch(GINT_CALL(restore)); - run = 1; - } - char mode = 0; - char type = 1; - char valeur = start_menu(&type); - if (!valeur) // normal game (level selection) - { - int id_level = 1; - if (!speed_menu(&id_level)) { - mode = 1; - game(&id_level, mode, &type); - } else - main(); - } else if (valeur == 1) // all mode - { - int id_level = 1; - mode = 0; - game(&id_level, mode, &type); - } else if (valeur == 2) // tutorial - { - int id_level = 0; - mode = 1; - game(&id_level, mode, &type); - } else if (valeur == 3) // exit - gint_world_switch(GINT_CALL(savefile)); - return 0; -} diff --git a/src/menu.c b/src/menu.c index 6f7e0a6..cf9e2dc 100644 --- a/src/menu.c +++ b/src/menu.c @@ -1,4 +1,6 @@ +#include "menu.h" #include "define.h" +#include "util.h" #include "drawlevel.h" #include "save.h" #include "setlevel.h" @@ -7,12 +9,7 @@ #include #include -int round(float num) // round(2.5) = 3 round(-3.2) = -3 -{ - return num < 0 ? num - 0.5 : num + 0.5; -} - -char start_menu(char *type) +enum MenuCode start_menu(char *type) { extern bopti_image_t img_menu; char menu_loop = 1; @@ -112,3 +109,4 @@ char speed_menu(int *id_level) } return 0; } + diff --git a/src/util.c b/src/util.c new file mode 100644 index 0000000..f1430b0 --- /dev/null +++ b/src/util.c @@ -0,0 +1,6 @@ +#include "util.h" + +int round(float num) +{ + return (num < 0) ? (num - 0.5) : (num + 0.5); +}