kettek2/wiki/games/newsboy/Newsboy_0x00/engine/State_Game_Menu.c

96 lines
2.4 KiB
C

#include "State_Game_Menu.h"
#include "State_Options.h"
#include "state.h"
#include "globals.h"
#include "game_globals.h"
char *gmenu_button_name[] = {
"reload(map)",
"quit(to_menu)",
"return(current_game)"
};
int openGameMenuState() {
report(DEBUG, "GameMenuState", "opened");
last_accumulator = accumulator;
int i;
int offset_x = g_v_width/2 - 256;
int offset_y = 128;
for (i = 0; i < GMENU_BUTTON_COUNT; i++) {
gmenu_button[i] = newButton(&g_large_glyphs, button_colors, gmenu_button_name[i]);
gmenu_button[i]->box.x = offset_x;
gmenu_button[i]->box.y = offset_y;
offset_y += gmenu_button[i]->box.h + 8;
}
gmenu_button_a = NULL;
return 0;
}
int closeGameMenuState() {
report(DEBUG, "GameMenuState", "closed");
int i;
for (i = 0; i < GMENU_BUTTON_COUNT; i++) {
freeButton(gmenu_button[i]);
}
accumulator = last_accumulator;
return 0;
}
int handleGameMenuState(SDL_Event event) {
int i;
switch(event.type) {
case SDL_KEYDOWN:
break;
case SDL_KEYUP:
if (event.key.keysym.sym == SDLK_ESCAPE) {
popState(g_state_manager);
}
break;
case SDL_MOUSEBUTTONDOWN:
for (i = 0; i < GMENU_BUTTON_COUNT; i++) {
if (inBox(gmenu_button[i]->box, event.motion.x, event.motion.y)) {
gmenu_button_a = gmenu_button[i];
gmenu_button_a->flags |= UI_ACTIVE;
break;
}
}
break;
case SDL_MOUSEBUTTONUP:
if (gmenu_button_a != NULL) {
if (inBox(gmenu_button_a->box, event.motion.x, event.motion.y)) {
if (gmenu_button_a == gmenu_button[GMENU_BUTTON_RESTART]) {
popState(g_state_manager);
popState(g_state_manager);
} else if (gmenu_button_a == gmenu_button[GMENU_BUTTON_QUIT]) {
travel_map[0] = '\0';
popState(g_state_manager);
popState(g_state_manager);
} else if (gmenu_button_a == gmenu_button[GMENU_BUTTON_CANCEL]) {
popState(g_state_manager);
}
}
gmenu_button_a->flags &= ~UI_ACTIVE;
gmenu_button_a = NULL;
}
break;
}
return 1;
}
int processGameMenuState() {
return 1;
}
int renderGameMenuState() {
SDL_Color bg = { 16, 16, 16, 233 };
renderSQuad(0, 0, g_v_width, g_v_height, bg);
int i;
for (i = 0; i < GMENU_BUTTON_COUNT; i++) {
renderButton(gmenu_button[i]);
}
return 1;
}