ソースを参照

Menu fixups

- Preselect current ROM
 - Don't quit when canceling ROM selection
 - Rename Load to Restore since I keep selecting the wrong thing
master
Nathaniel Walizer 11ヶ月前
コミット
3e04fb0d96
4個のファイルの変更33行の追加15行の削除
  1. +2
    -2
      Makefile
  2. +16
    -2
      src/menu.c
  3. +3
    -2
      src/menu.h
  4. +12
    -9
      src/nese.c

+ 2
- 2
Makefile ファイルの表示

@@ -45,9 +45,9 @@ SRC_SRCS_1 += nes.c ppu.c input.c
SRC_SRCS_1 += cart.c mapper.c
SRC_SRCS_1 += apu.c audio.c
SRC_SRCS_1 += file.c save.c
SRC_SRCS_1 += overlay.c menu.c
SRC_SRCS_1 += sdl_render.c sdl_input.c sdl_audio.c sdl_timer.c
SRC_SRCS_1 += overlay.c sdl_overlay.c
SRC_SRCS_1 += sdl_menu.c
SRC_SRCS_1 += sdl_overlay.c

PLAT_SRCS_1 = filemap.c



src/sdl_menu.c → src/menu.c ファイルの表示

@@ -85,6 +85,13 @@ static void free_file_list(file_list* files) {
free(files->files);
}

static int find_file(file_list* files, const char* filename) {
int i = (files->count - 1);
for ( ; i >= 0 &&
(0 != strcmp(files->files[i], filename)); --i);
return i;
}

static void fix_filename(char* dst, int n, const char* src) {
for ( int i = 0;
i < n && *src && '.' != *src;
@@ -189,7 +196,8 @@ static int run_menu(menu_state* state, const file_list* files,


char* run_main_menu(menu_state* state, nes_Renderer* rend,
nes_Input_Reader* input, nes* sys) {
nes_Input_Reader* input, nes* sys,
const char* cur_filename) {
char* cart_filename = NULL;

DIR* dir = opendir("rom");
@@ -209,6 +217,12 @@ char* run_main_menu(menu_state* state, nes_Renderer* rend,
menu_state menu = {0};
if (NULL != state) menu = *state;

if (NULL != cur_filename) {
// Add 4 to skip past "rom/"
int current = find_file(&files, cur_filename + 4);
if (current >= 0) menu.cursor = current;
}

int status = run_menu(&menu, &files, 20,
rend, input, sys);

@@ -239,7 +253,7 @@ int run_game_menu(menu_state* state, nes_Renderer* rend,
static char* items[] = {
"Resume",
"Save",
"Load",
"Restore",
"Reset",
"Select ROM",
"Exit",

+ 3
- 2
src/menu.h ファイルの表示

@@ -14,9 +14,10 @@ typedef struct {

// Returns filename of selected ROM
char* run_main_menu(menu_state*, nes_Renderer*,
nes_Input_Reader*, nes*);
nes_Input_Reader*, nes*,
const char* cur_filename);

// TODO: What does this return?
// Returns nes_Input_Result indicating the choice
int run_game_menu(menu_state*, nes_Renderer*,
nes_Input_Reader*, nes*);



+ 12
- 9
src/nese.c ファイルの表示

@@ -139,14 +139,17 @@ static int select_rom(menu_state* menu, nes_Renderer* rend,
}

if (0 == status) {
cart.filename = run_main_menu(menu, rend,
input, sys);
cart.filename = run_main_menu(
menu, rend, input, sys, cur_cart->filename
);

if ( NULL == cart.filename ||
(char*)-1 == cart.filename ) {
// This means that we dumped out of the loader
cart.filename = NULL;
status = -1;
if ((char*)-1 == cart.filename) {
// This means that we quit
status = input_Result_Quit;

} else if (NULL == cart.filename) {
// This means we didn't press "cancel"
status = input_Result_Cancel;

} else {
cart.file = nes_load_cart(&new_cart,
@@ -184,6 +187,7 @@ static int do_game_menu(menu_state* state, nes_Renderer* rend,
sys, cart);

if (input_Result_Cancel == status) {
status = input_Result_OK;
continue;
}
}
@@ -229,8 +233,7 @@ int main(int argc, char* argv[]) {

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

if (status == 0) {


読み込み中…
キャンセル
保存