Parcourir la source

Simplify menu calls

master
Nathaniel Walizer il y a 10 mois
Parent
révision
51c4aeffd0
4 fichiers modifiés avec 40 ajouts et 51 suppressions
  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 Voir le fichier

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

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

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

if (input_Result_Menu == status) {
status = input_Result_Cancel;
@@ -322,8 +319,7 @@ int run_game_menu(menu_state* state, nese_Components* comp,
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 h = 0;

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

int status = (input_Result_Refresh << 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_done(comp->rend);



+ 3
- 6
src/menu.h Voir le fichier

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


// 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
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_

+ 16
- 22
src/nese.c Voir le fichier

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

static int select_rom(menu_state* menu,
nese_Components* comp,
cart_info* cur_cart) {
nese_Components* comp) {
int status = 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};

while (0 == status && NULL == cart.file) {
@@ -124,7 +120,7 @@ static int select_rom(menu_state* menu,
char message[1024];
snprintf(message, sizeof(message) - 1,
"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)) {
// Program closed inside modal
status = input_Result_Quit;
@@ -152,13 +148,13 @@ static int select_rom(menu_state* menu,
}

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);
cart_info_done(cur_cart);
cart_info_done(&comp->state->cart);

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

nes_setup_cart(comp->sys);

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

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

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

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

state->flags ^= (1 << State_Bit_Fullscreen);
comp->state->flags ^= (1 << State_Bit_Fullscreen);
#endif
} else if (input_Result_Scale == status) {
state->flags ^= (1 << State_Bit_Integer_Scale);
comp->state->flags ^= (1 << State_Bit_Integer_Scale);
} 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;

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

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 (0 == status && NULL == state.cart.file) {
status = select_rom(NULL, &components, &state.cart);
status = select_rom(NULL, &components);
}

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

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


+ 11
- 10
src/state.h Voir le fichier

@@ -12,16 +12,6 @@
#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

typedef struct {
@@ -54,4 +44,15 @@ int load_prefs_filename(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_

Chargement…
Annuler
Enregistrer