Browse Source

Simplify menu calls

master
Nathaniel Walizer 10 months ago
parent
commit
51c4aeffd0
4 changed files with 40 additions and 51 deletions
  1. +10
    -13
      src/menu.c
  2. +3
    -6
      src/menu.h
  3. +16
    -22
      src/nese.c
  4. +11
    -10
      src/state.h

+ 10
- 13
src/menu.c View File

@@ -223,10 +223,8 @@ char* run_main_menu(menu_state* state, nese_Components* comp,
DIR* dir = opendir("rom"); DIR* dir = opendir("rom");


if (NULL == dir) { if (NULL == dir) {
modal_popup(
"No ROMS found!\nPress any key to exit",
comp, cart
);
modal_popup("No ROMS found!\nPress any key to exit",
comp);


} else { } else {
file_list files = {0}; file_list files = {0};
@@ -267,8 +265,7 @@ char* run_main_menu(menu_state* state, nese_Components* comp,
return cart_filename; return cart_filename;
} }


int run_game_menu(menu_state* state, nese_Components* comp,
const nese_State* nese) {
int run_game_menu(menu_state* state, nese_Components* comp) {
char* items[] = { char* items[] = {
"Resume", "Resume",
"Save", "Save",
@@ -276,12 +273,12 @@ int run_game_menu(menu_state* state, nese_Components* comp,
"Reset", "Reset",
"Select ROM", "Select ROM",
#ifndef STANDALONE #ifndef STANDALONE
(nese->flags & (1 << State_Bit_Fullscreen)) ?
(comp->state->flags & (1 << State_Bit_Fullscreen)) ?
"Windowed" : "Fullscreen", "Windowed" : "Fullscreen",
#endif #endif
(nese->flags & (1 << State_Bit_Integer_Scale)) ?
(comp->state->flags & (1 << State_Bit_Integer_Scale)) ?
"Force Aspect" : "Integer Scaling", "Force Aspect" : "Integer Scaling",
(nese->flags & (1 << State_Bit_CRT_Effect)) ?
(comp->state->flags & (1 << State_Bit_CRT_Effect)) ?
"No Effect" : "CRT Effect", "No Effect" : "CRT Effect",
"Exit", "Exit",
}; };
@@ -307,7 +304,7 @@ int run_game_menu(menu_state* state, nese_Components* comp,
if (NULL != state) menu = *state; if (NULL != state) menu = *state;


int status = run_menu(&menu, &options, 100, int status = run_menu(&menu, &options, 100,
comp, &nese->cart);
comp, &comp->state->cart);


if (input_Result_Menu == status) { if (input_Result_Menu == status) {
status = input_Result_Cancel; status = input_Result_Cancel;
@@ -322,8 +319,7 @@ int run_game_menu(menu_state* state, nese_Components* comp,
return status; return status;
} }


int modal_popup(const char* message, nese_Components* comp,
const cart_info* cart) {
int modal_popup(const char* message, nese_Components* comp) {
int w = 0; int w = 0;
int h = 0; int h = 0;


@@ -338,7 +334,8 @@ int modal_popup(const char* message, nese_Components* comp,


int status = (input_Result_Refresh << 8); int status = (input_Result_Refresh << 8);
while (input_Result_Refresh == (status >> 8)) { while (input_Result_Refresh == (status >> 8)) {
nes_draw_last_frame(comp->rend, NULL != cart->file);
nes_draw_last_frame(comp->rend,
NULL != comp->state->cart.file);
nes_draw_text(comp->rend, message, x, y, color_error); nes_draw_text(comp->rend, message, x, y, color_error);
nes_draw_done(comp->rend); nes_draw_done(comp->rend);




+ 3
- 6
src/menu.h View File

@@ -30,15 +30,12 @@ typedef struct {




// Returns filename of selected ROM // Returns filename of selected ROM
char* run_main_menu(menu_state*, nese_Components*,
const cart_info*);
char* run_main_menu(menu_state*, nese_Components*, const cart_info*);


// Returns nes_Input_Result indicating the choice // Returns nes_Input_Result indicating the choice
int run_game_menu(menu_state*, nese_Components*,
const nese_State*);
int run_game_menu(menu_state*, nese_Components*);


int modal_popup(const char* message, nese_Components*,
const cart_info*);
int modal_popup(const char* message, nese_Components*);




#endif // NESE_MENU_H_ #endif // NESE_MENU_H_

+ 16
- 22
src/nese.c View File

@@ -108,14 +108,10 @@ static int loadsave_tick(loadsave_state* loadsave) {
} }


static int select_rom(menu_state* menu, static int select_rom(menu_state* menu,
nese_Components* comp,
cart_info* cur_cart) {
nese_Components* comp) {
int status = 0; int status = 0;
cart_info cart = {0}; cart_info cart = {0};
cart_info ref_cart = {
.filename = cur_cart->filename,
.file = cur_cart->file,
};
cart_info ref_cart = comp->state->cart;
nes_cart new_cart = {0}; nes_cart new_cart = {0};


while (0 == status && NULL == cart.file) { while (0 == status && NULL == cart.file) {
@@ -124,7 +120,7 @@ static int select_rom(menu_state* menu,
char message[1024]; char message[1024];
snprintf(message, sizeof(message) - 1, snprintf(message, sizeof(message) - 1,
"Could not load\n%s", cart.filename + 4); "Could not load\n%s", cart.filename + 4);
int button = modal_popup(message, comp, cur_cart);
int button = modal_popup(message, comp);
if (input_Result_Quit == (button >> 8)) { if (input_Result_Quit == (button >> 8)) {
// Program closed inside modal // Program closed inside modal
status = input_Result_Quit; status = input_Result_Quit;
@@ -152,13 +148,13 @@ static int select_rom(menu_state* menu,
} }


if (0 == status && NULL != cart.file) { if (0 == status && NULL != cart.file) {
save_sram(&comp->sys->cart, cur_cart->filename);
save_sram(&comp->sys->cart, comp->state->cart.filename);


nes_cart_done(&comp->sys->cart); nes_cart_done(&comp->sys->cart);
cart_info_done(cur_cart);
cart_info_done(&comp->state->cart);


comp->sys->cart = new_cart; comp->sys->cart = new_cart;
*cur_cart = cart;
comp->state->cart = cart;


nes_setup_cart(comp->sys); nes_setup_cart(comp->sys);


@@ -170,13 +166,12 @@ static int select_rom(menu_state* menu,
} }


static int do_game_menu(menu_state* menu, static int do_game_menu(menu_state* menu,
nese_Components* comp,
nese_State* state) {
nese_Components* comp) {
int status = 0; int status = 0;
menu_state rom_menu = {0}; menu_state rom_menu = {0};


while (1) { while (1) {
status = run_game_menu(menu, comp, state);
status = run_game_menu(menu, comp);


if ( input_Result_View == status || if ( input_Result_View == status ||
input_Result_Scale == status || input_Result_Scale == status ||
@@ -184,21 +179,20 @@ static int do_game_menu(menu_state* menu,
if (input_Result_View == status) { if (input_Result_View == status) {
#ifndef STANDALONE #ifndef STANDALONE


state->flags ^= (1 << State_Bit_Fullscreen);
comp->state->flags ^= (1 << State_Bit_Fullscreen);
#endif #endif
} else if (input_Result_Scale == status) { } else if (input_Result_Scale == status) {
state->flags ^= (1 << State_Bit_Integer_Scale);
comp->state->flags ^= (1 << State_Bit_Integer_Scale);
} else { } else {
state->flags ^= (1 << State_Bit_CRT_Effect);
comp->state->flags ^= (1 << State_Bit_CRT_Effect);
} }
nes_render_set_flags(comp->rend, state->flags);
nes_render_set_flags(comp->rend, comp->state->flags);
continue; continue;


} else if (input_Result_Menu == status) { } else if (input_Result_Menu == status) {
status = select_rom(&rom_menu, comp, &state->cart);
status = select_rom(&rom_menu, comp);


if (input_Result_Cancel == status) { if (input_Result_Cancel == status) {
status = input_Result_OK;
continue; continue;
} }
} }
@@ -229,6 +223,7 @@ int main(int argc, char* argv[]) {
.reader = &sdl_input, .reader = &sdl_input,
.audio = &sdl_audio, .audio = &sdl_audio,
.sys = &sys, .sys = &sys,
.state = &state,
}; };


if (status == 0) { if (status == 0) {
@@ -262,7 +257,7 @@ int main(int argc, char* argv[]) {


// If we didn't launch with a file, run the loader // If we didn't launch with a file, run the loader
if (0 == status && NULL == state.cart.file) { if (0 == status && NULL == state.cart.file) {
status = select_rom(NULL, &components, &state.cart);
status = select_rom(NULL, &components);
} }


if (status == 0) { if (status == 0) {
@@ -323,8 +318,7 @@ int main(int argc, char* argv[]) {


} if (input_Result_Menu == status) { } if (input_Result_Menu == status) {
status = do_game_menu( status = do_game_menu(
&game_menu, &components, &state
);
&game_menu, &components);
if ( input_Result_Load == status || if ( input_Result_Load == status ||
input_Result_Save == status) { input_Result_Save == status) {
loadsave.mode = status; loadsave.mode = status;


+ 11
- 10
src/state.h View File

@@ -12,16 +12,6 @@
#include "nes.h" #include "nes.h"




// Running State

typedef struct nese_Components {
nes_Renderer* rend;
nes_Input_Reader* reader;
nes_Audio_Stream* audio;
nes* sys;
} nese_Components;


// Persistent State // Persistent State


typedef struct { typedef struct {
@@ -54,4 +44,15 @@ int load_prefs_filename(nese_State*, const char*);
int save_prefs_filename(const nese_State*, const char*); int save_prefs_filename(const nese_State*, const char*);




// Running State

typedef struct nese_Components {
nes_Renderer* rend;
nes_Input_Reader* reader;
nes_Audio_Stream* audio;
nes* sys;
nese_State* state;
} nese_Components;


#endif // NESE_STATE_H_ #endif // NESE_STATE_H_

Loading…
Cancel
Save