From 390628b1e32dbf5e65b24d07d72c3e6e29449e23 Mon Sep 17 00:00:00 2001 From: TwinAphex51224 Date: Sat, 11 Feb 2012 15:31:11 +0100 Subject: [PATCH] (360) Can now return back to game from the menu by pressing L3 + R3 (if a ROM has already been loaded) --- 360/menu.cpp | 12 ++++++++++++ 360/xdk360_input.cpp | 11 +++++++++-- 360/xdk360_video.h | 4 ++++ general.h | 1 + 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/360/menu.cpp b/360/menu.cpp index af24fa2f24..73322d9268 100644 --- a/360/menu.cpp +++ b/360/menu.cpp @@ -299,10 +299,22 @@ void menu_loop(void) do { + g_frame_count++; vid->xdk360_render_device->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_STENCIL | D3DCLEAR_ZBUFFER, D3DCOLOR_ARGB(255, 32, 32, 64), 1.0, 0); + XINPUT_STATE state; + XInputGetState(0, &state); + + g_console.menu_enable = !((state.Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) + && (state.Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) && (g_console.emulator_initialized) + && IS_TIMER_EXPIRED()); + g_console.mode_switch = g_console.menu_enable ? MODE_MENU : MODE_EMULATION; + + if(g_console.mode_switch == MODE_EMULATION) + SET_TIMER_EXPIRATION(60); + app.RunFrame(); /* Update XUI */ hr = app.Render(); /* Render XUI */ hr = XuiTimersRun(); /* Update XUI timers */ diff --git a/360/xdk360_input.cpp b/360/xdk360_input.cpp index fd4689b29d..3698fce409 100644 --- a/360/xdk360_input.cpp +++ b/360/xdk360_input.cpp @@ -22,6 +22,7 @@ #include "../driver.h" #include "../general.h" #include "../libsnes.hpp" +#include "xdk360_video.h" #include "shared.h" static XINPUT_STATE state[4]; @@ -130,8 +131,14 @@ static bool xdk360_key_pressed(void *data, int key) return ((state[0].Gamepad.sThumbRY > DEADZONE) && !(state[0].Gamepad.bRightTrigger > 128)); case SSNES_QUIT_KEY: g_console.menu_enable = ((state[0].Gamepad.wButtons & XINPUT_GAMEPAD_LEFT_THUMB) - && (state[0].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB)); - g_console.mode_switch = g_console.menu_enable ? MODE_MENU : MODE_EMULATION; + && (state[0].Gamepad.wButtons & XINPUT_GAMEPAD_RIGHT_THUMB) && IS_TIMER_EXPIRED()); + if(g_console.menu_enable) + { + g_console.mode_switch = MODE_MENU; + SET_TIMER_EXPIRATION(60); + } + else + g_console.mode_switch = MODE_EMULATION; return g_console.menu_enable; default: return false; diff --git a/360/xdk360_video.h b/360/xdk360_video.h index c81576b904..76d010ca18 100644 --- a/360/xdk360_video.h +++ b/360/xdk360_video.h @@ -32,9 +32,13 @@ typedef struct xdk360_video D3DPRESENT_PARAMETERS d3dpp; } xdk360_video_t; +#define IS_TIMER_EXPIRED() (!(g_frame_count < g_console.timer_expiration_frame_count)) +#define SET_TIMER_EXPIRATION(value) g_console.timer_expiration_frame_count = g_frame_count + value; + void xdk360_video_init(void); void xdk360_video_deinit(void); +extern unsigned g_frame_count; extern void *g_d3d; #endif diff --git a/general.h b/general.h index cf528c44f5..66871fc2c3 100644 --- a/general.h +++ b/general.h @@ -192,6 +192,7 @@ struct console_settings uint32_t mode_switch; uint32_t *supported_resolutions; uint32_t supported_resolutions_count; + uint32_t timer_expiration_frame_count; #ifdef _XBOX DWORD volume_device_type; #endif