AST3_C/src/menu.c

159 lines
3.6 KiB
C
Raw Normal View History

2021-05-02 20:21:41 +02:00
#include "menu.h"
2021-04-30 02:12:24 +02:00
#include "define.h"
2020-07-26 01:44:42 +02:00
#include "drawlevel.h"
2021-04-30 02:12:24 +02:00
#include "save.h"
2020-07-26 01:44:42 +02:00
#include "setlevel.h"
#include "times.h"
2021-05-02 20:21:41 +02:00
#include "util.h"
2021-04-30 02:12:24 +02:00
#include <gint/display.h>
#include <gint/gint.h>
2021-04-30 02:12:24 +02:00
#include <gint/keyboard.h>
2021-05-02 20:21:41 +02:00
enum MenuCode start_menu(char *type)
2020-07-26 01:44:42 +02:00
{
extern bopti_image_t img_menu;
2020-07-26 01:44:42 +02:00
char menu_loop = 1;
char selection = 0;
char buffer = 1;
char buffer2 = 1;
2021-05-04 01:46:11 +02:00
int Y_POS = 145;
char level[351];
int start_x;
int start_y;
set_level(rand_range(1, LEVEL_MAX), level, &start_x, &start_y, NULL,
NULL, NULL, NULL);
2021-04-30 02:12:24 +02:00
while (menu_loop) {
2020-07-26 01:44:42 +02:00
clearevents();
dclear(C_WHITE);
2021-05-04 01:46:11 +02:00
draw_level(level);
2021-04-30 02:12:24 +02:00
dimage(0, 0, &img_menu);
2020-07-26 01:44:42 +02:00
selection += keydown(KEY_DOWN) - keydown(KEY_UP);
2021-04-30 02:12:24 +02:00
if (selection == 4)
selection = 0;
else if (selection == -1)
selection = 3;
2021-05-04 01:46:11 +02:00
dtext(160, Y_POS, C_WHITE, "PLAY");
dtext(160, Y_POS + 12, C_WHITE, "ALL MODE");
dtext(160, Y_POS + 24, C_WHITE, "TEST LEVEL");
dtext(160, Y_POS + 36, C_WHITE, "EXIT GAME");
dtext(145, Y_POS + (selection * 12), C_WHITE, ">");
2020-07-26 01:44:42 +02:00
dupdate();
if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) {
2021-04-30 02:12:24 +02:00
if (!buffer2)
return selection;
} else
buffer2 = 0;
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if (!buffer)
2021-05-05 01:03:02 +02:00
return MenuExit;
2021-04-30 02:12:24 +02:00
} else
buffer = 0;
if (keydown_all(KEY_5, KEY_6))
*type = 3;
while (keydown_any(KEY_UP, KEY_DOWN, 0))
clearevents();
2020-07-26 01:44:42 +02:00
}
2021-05-05 01:03:02 +02:00
return MenuExit;
2020-07-26 01:44:42 +02:00
}
2021-05-05 01:03:02 +02:00
char level_selection(int *id_level)
2020-07-26 01:44:42 +02:00
{
char level[351];
int start_x;
int start_y;
char buffer = 1;
2021-04-30 02:12:24 +02:00
int sto = loadtime(*id_level - 1);
2020-07-26 01:44:42 +02:00
char menu_loop = 1;
char check = 1;
extern bopti_image_t img_speedrun;
2021-04-30 02:12:24 +02:00
while (menu_loop) {
2020-07-26 01:44:42 +02:00
clearevents();
dclear(C_WHITE);
*id_level += keydown(KEY_RIGHT) - keydown(KEY_LEFT);
2021-04-30 02:12:24 +02:00
if (*id_level == LEVEL_MAX + 1)
*id_level = 1;
else if (*id_level == 0)
*id_level = LEVEL_MAX;
if (keydown(KEY_RIGHT) || keydown(KEY_LEFT))
sto = loadtime(*id_level - 1);
set_level(*id_level, level, &start_x, &start_y, NULL, NULL,
NULL, NULL);
2020-07-26 01:44:42 +02:00
draw_level(level);
2021-04-30 02:12:24 +02:00
dimage(0, 0, &img_speedrun);
if (sto != 0)
check_medal(round(sto * 0.01 * FPS), *id_level, 335, 15);
2020-07-26 01:44:42 +02:00
dtext(190, 45, C_BLACK, "Time : ");
2021-04-30 02:12:24 +02:00
dprint(80, 20, C_BLACK, "Level : %d", *id_level);
if (sto != 0)
dprint(194, 60, C_RED, "%.2j", sto);
else
dprint(202, 60, C_RED, "/");
2021-05-05 13:28:21 +02:00
draw_time(*id_level);
2020-07-26 01:44:42 +02:00
dupdate();
2021-04-30 02:12:24 +02:00
if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) {
if (!check) {
2020-07-26 01:44:42 +02:00
del_level(level);
2021-05-05 01:03:02 +02:00
return 1;
2020-07-26 01:44:42 +02:00
}
2021-04-30 02:12:24 +02:00
} else
check = 0;
2021-05-05 01:03:02 +02:00
2021-04-30 02:12:24 +02:00
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if (!buffer)
2021-05-05 01:03:02 +02:00
return 0;
2021-04-30 02:12:24 +02:00
} else
buffer = 0;
while (keydown_any(KEY_RIGHT, KEY_LEFT, 0))
clearevents();
2020-07-26 01:44:42 +02:00
}
return 0;
}
enum MenuPause pause_menu(char level[], int id_level, int coin, int death_count)
{
2021-05-05 01:03:02 +02:00
extern bopti_image_t img_speedrun;
extern bopti_image_t img_coin;
2021-05-05 01:03:02 +02:00
char menu_loop = 1;
char selected = 0;
int Y_POS = 18;
char buffer = 1;
while (menu_loop) {
clearevents();
dclear(C_WHITE);
draw_level(level);
dimage(0, 0, &img_speedrun);
selected += keydown(KEY_DOWN) - keydown(KEY_UP);
if (selected == 2)
selected = 0;
else if (selected == -1)
selected = 1;
dtext(32, Y_POS, C_BLACK, "CONTINUE");
dtext(32, Y_POS + 12, C_BLACK, "BACK");
dtext(16, Y_POS + (selected * 12), C_BLACK, ">");
dprint(174, 45, C_BLACK, "LEVEL : %d", id_level);
dimage(320,3,&img_coin);
dprint(335, 7, C_RGB(255, 178, 0), " : %d", coin);
dprint(311, 21, C_RGB(150, 16, 16), "DEATH : %d", death_count);
2021-05-09 21:58:51 +02:00
draw_time(id_level);
2021-05-05 01:03:02 +02:00
dupdate();
if (keydown_any(KEY_SHIFT, KEY_EXE, 0)) {
return selected;
}
if (keydown_any(KEY_EXIT, KEY_MENU, 0)) {
if (!buffer) {
return MenuBack;
}
} else
buffer = 0;
while (keydown_any(KEY_UP, KEY_DOWN, 0))
clearevents();
}
return MenuBack;
}