(RARCH_CONSOLE) Add MODE_INIT

This commit is contained in:
twinaphex 2013-01-06 01:28:23 +01:00
parent 5752608062
commit 369477a15b
8 changed files with 59 additions and 68 deletions

View File

@ -1165,14 +1165,26 @@ bool rmenu_iterate(void)
XINPUT_STATE state;
XInputGetState(0, &state);
bool rmenu_enable = !((state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB)
&& (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) && (g_extern.main_is_init)
&& IS_TIMER_EXPIRED(0));
if (IS_TIMER_EXPIRED(0))
{
bool rmenu_enable = !((state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB)
&& (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) && (g_extern.main_is_init));
switch(g_extern.console.rmenu.mode)
{
case MODE_EXIT:
case MODE_INIT:
case MODE_EMULATION:
break;
default:
g_extern.console.rmenu.mode = rmenu_enable ? MODE_EMULATION : MODE_MENU;
break;
}
}
rarch_render_cached_frame();
g_extern.console.rmenu.mode = rmenu_enable ? MODE_MENU : MODE_EMULATION;
switch(g_extern.console.rmenu.input_loop)
{
case INPUT_LOOP_FILEBROWSER:
@ -1188,15 +1200,13 @@ bool rmenu_iterate(void)
break;
}
if(g_extern.console.rmenu.mode == MODE_EMULATION || g_extern.console.rmenu.mode == MODE_EXIT)
if(g_extern.console.rmenu.mode != MODE_MENU)
goto deinit;
msg = msg_queue_pull(g_extern.msg_queue);
if (msg)
{
device_ptr->font_ctx->render_msg(device_ptr, msg);
}
device_ptr->ctx_driver->swap_buffers();

View File

@ -58,6 +58,7 @@ enum {
enum
{
MODE_EMULATION = 0,
MODE_INIT,
MODE_MENU,
MODE_EXIT
};

View File

@ -95,9 +95,7 @@ bool rarch_startup (const char * config_path)
args.sram_path = g_extern.console.main_wrap.state.default_sram_dir.enable ? g_extern.console.main_wrap.paths.default_sram_dir : NULL,
args.state_path = g_extern.console.main_wrap.state.default_savestate_dir.enable ? g_extern.console.main_wrap.paths.default_savestate_dir : NULL,
args.rom_path = g_extern.file_state.rom_path;
#ifdef HAVE_DYLIB
args.libretro_path = g_settings.libretro;
#endif
int init_ret = rarch_main_init_wrap(&args);
(void)init_ret;
@ -105,6 +103,7 @@ bool rarch_startup (const char * config_path)
if(init_ret == 0)
{
g_extern.console.initialize_rarch_enable = 0;
g_extern.console.rmenu.mode = MODE_EMULATION;
retval = true;
}
else

View File

@ -23,9 +23,7 @@ struct rarch_main_wrap
const char *sram_path;
const char *state_path;
const char *config_path;
#ifdef HAVE_DYLIB
const char *libretro_path;
#endif
bool verbose;
};

View File

@ -123,7 +123,7 @@ void rarch_settings_change(unsigned setting)
case S_START_RARCH:
g_extern.console.rmenu.state.rmenu.enable = false;
g_extern.console.initialize_rarch_enable = 1;
g_extern.console.rmenu.mode = MODE_EMULATION;
g_extern.console.rmenu.mode = MODE_INIT;
break;
case S_REWIND:
g_settings.rewind_enable = !g_settings.rewind_enable;

View File

@ -2315,27 +2315,19 @@ void rmenu_input_process(void *data, void *state)
(void)data;
rmenu_state_t *rstate = (rmenu_state_t*)state;
if(IS_TIMER_EXPIRED(0))
if (IS_TIMER_EXPIRED(0))
{
// if we want to force goto the emulation loop, skip this
if(g_extern.console.rmenu.mode != MODE_EMULATION)
bool rmenu_enable = (((rstate->old_state & (1ULL << RMENU_DEVICE_NAV_L3)) && (rstate->old_state & (1ULL << RMENU_DEVICE_NAV_R3)) && g_extern.main_is_init));
switch(g_extern.console.rmenu.mode)
{
if(g_extern.console.rmenu.mode == MODE_EXIT)
{
}
// for ingame menu, we need a different precondition because menu_enable
// can be set to false when going back from ingame menu to menu
else if(g_extern.console.rmenu.state.ingame_menu.enable == true)
{
//we want to force exit when g_extern.console.mode is set to MODE_EXIT
if(g_extern.console.rmenu.mode != MODE_EXIT)
g_extern.console.rmenu.mode = (((rstate->old_state & (1ULL << RMENU_DEVICE_NAV_L3)) && (rstate->old_state & (1ULL << RMENU_DEVICE_NAV_R3)) && g_extern.main_is_init)) ? MODE_EMULATION : MODE_MENU;
}
else
{
bool rmenu_enable = !(((rstate->old_state & (1ULL << RMENU_DEVICE_NAV_L3)) && (rstate->old_state & (1ULL << RMENU_DEVICE_NAV_R3)) && g_extern.main_is_init));
g_extern.console.rmenu.mode = rmenu_enable ? MODE_MENU : MODE_EMULATION;
}
case MODE_EXIT:
case MODE_INIT:
case MODE_EMULATION:
break;
default:
g_extern.console.rmenu.mode = rmenu_enable ? MODE_EMULATION : MODE_MENU;
break;
}
}
}
@ -2453,7 +2445,7 @@ bool rmenu_iterate(void)
if(current_menu.input_process)
current_menu.input_process(&current_menu, &rmenu_state);
if(g_extern.console.rmenu.mode == MODE_EMULATION || g_extern.console.rmenu.mode == MODE_EXIT || repeat == 0)
if(g_extern.console.rmenu.mode != MODE_MENU || repeat == 0)
goto deinit;
msg = msg_queue_pull(g_extern.msg_queue);

View File

@ -345,9 +345,7 @@ static bool rmenu_iterate(void)
action = RGUI_ACTION_SETTINGS;
}
else
{
first = false;
}
rgui_iterate(rgui, action);
@ -355,39 +353,38 @@ static bool rmenu_iterate(void)
old_input_state = input_state;
bool goto_menu_key_pressed = (trigger_state & (1ULL << GX_DEVICE_NAV_MENU));
bool quit_key_pressed = (trigger_state & (1ULL << GX_DEVICE_NAV_QUIT));
if(IS_TIMER_EXPIRED(0))
{
// if we want to force goto the emulation loop, skip this
if(g_extern.console.rmenu.mode != MODE_EMULATION)
bool rmenu_enable = ((trigger_state & (1ULL << GX_DEVICE_NAV_MENU)) && g_extern.main_is_init);
bool quit_key_pressed = (trigger_state & (1ULL << GX_DEVICE_NAV_QUIT));
switch(g_extern.console.rmenu.mode)
{
if(goto_menu_key_pressed)
{
g_extern.console.rmenu.state.rmenu.enable = (goto_menu_key_pressed && g_extern.main_is_init) ? false : true;
g_extern.console.rmenu.mode = g_extern.console.rmenu.state.rmenu.enable ? MODE_MENU : MODE_EMULATION;
}
case MODE_EXIT:
case MODE_INIT:
break;
case MODE_EMULATION:
// set a timer delay so that we don't instantly switch back to the menu when
// press and holding QUIT in the emulation loop (lasts for 30 frame ticks)
SET_TIMER_EXPIRATION(0, 30);
break;
default:
if (quit_key_pressed)
{
g_extern.console.rmenu.mode = MODE_EXIT;
g_extern.console.rmenu.state.rmenu.enable = false;
}
else
{
g_extern.console.rmenu.state.rmenu.enable = rmenu_enable ? false : true;
g_extern.console.rmenu.mode = rmenu_enable ? MODE_EMULATION : MODE_MENU;
}
break;
}
}
if(quit_key_pressed)
{
g_extern.console.rmenu.state.rmenu.enable = false;
g_extern.console.rmenu.mode = MODE_EXIT;
}
// set a timer delay so that we don't instantly switch back to the menu when
// press and holding QUIT in the emulation loop (lasts for 30 frame ticks)
if(g_extern.console.rmenu.mode == MODE_EMULATION)
{
SET_TIMER_EXPIRATION(0, 30);
}
}while(g_extern.console.rmenu.state.rmenu.enable);
g_extern.draw_menu = false;
g_extern.console.rmenu.state.ingame_menu.enable = false;
return true;

View File

@ -336,7 +336,6 @@ int main(int argc, char *argv[])
RARCH_LOG("Started from multiMAN, will auto-start game.\n");
strlcpy(g_extern.file_state.rom_path, argv[1], sizeof(g_extern.file_state.rom_path));
rarch_settings_change(S_START_RARCH);
rarch_startup(default_paths.config_file);
break;
#endif
default:
@ -347,18 +346,13 @@ begin_loop:
if(g_extern.console.rmenu.mode == MODE_EMULATION)
{
input_ps3.poll(NULL);
driver.video->set_aspect_ratio(driver.video_data, g_settings.video.aspect_ratio_idx);
while(rarch_main_iterate());
}
else if (g_extern.console.rmenu.mode == MODE_INIT)
rarch_startup(default_paths.config_file);
else if(g_extern.console.rmenu.mode == MODE_MENU)
{
while(rmenu_iterate());
if (g_extern.console.rmenu.mode != MODE_EXIT)
rarch_startup(default_paths.config_file);
}
else
goto begin_shutdown;