Organized savestate hotkeys: F1-F8: States, F9: Screenshot, F10: Pause, F11: Load last state, F12: Undo load state, Shift-F12: Undo save state

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@3578 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
XTra.KrazzY 2009-06-28 19:47:02 +00:00
parent dfdfbd4a6a
commit 24a63ce368
6 changed files with 52 additions and 51 deletions

View File

@ -622,15 +622,34 @@ EState GetState()
return CORE_UNINITIALIZED; return CORE_UNINITIALIZED;
} }
// Save or recreate the emulation state static inline std::string GenerateScreenshotName()
void SaveState() { {
State_Save(0); int index = 1;
std::string tempname, name;
tempname = FULL_SCREENSHOTS_DIR + GetStartupParameter().GetUniqueID();
name = StringFromFormat("%s-%d.bmp", tempname.c_str(), index);
while(File::Exists(name.c_str()))
name = StringFromFormat("%s-%d.bmp", tempname.c_str(), ++index);
return name;
} }
void LoadState() { void ScreenShot(const std::string& name)
State_Load(0); {
bool bPaused = (GetState() == CORE_PAUSE);
SetState(CORE_PAUSE);
CPluginManager::GetInstance().GetVideo()->Video_Screenshot(name.c_str());
if(!bPaused)
SetState(CORE_RUN);
} }
void ScreenShot()
{
ScreenShot(GenerateScreenshotName());
}
// --- Callbacks for plugins / engine --- // --- Callbacks for plugins / engine ---
@ -849,20 +868,23 @@ const char *Callback_ISOName()
return ""; return "";
} }
// Called from ANY thread! // Called from ANY thread!
// The hotkey function
void Callback_KeyPress(int key, bool shift, bool control) void Callback_KeyPress(int key, bool shift, bool control)
{ {
// 0x70 == VK_F1 // F1 - F8: Save states
if (key >= 0x70 && key < 0x79) { if (key >= 0x70 && key < 0x78) {
// F-key // F-key
int slot_number = key - 0x70 + 1; int slot_number = key - 0x70 + 1;
if (shift) { if (shift)
State_Save(slot_number); State_Save(slot_number);
} else { else
State_Load(slot_number); State_Load(slot_number);
} }
}
// 0x78 == VK_F9
if (key == 0x78)
ScreenShot();
// 0x7a == VK_F11 // 0x7a == VK_F11
if (key == 0x7a) if (key == 0x7a)
@ -870,7 +892,14 @@ void Callback_KeyPress(int key, bool shift, bool control)
// 0x7a == VK_F12 // 0x7a == VK_F12
if (key == 0x7b) if (key == 0x7b)
{
// TODO: Move to memory buffer, implement last state before loading
if(shift)
State_LoadAs(FULL_STATESAVES_DIR "lastState.sav"); State_LoadAs(FULL_STATESAVES_DIR "lastState.sav");
/*else
State_LoadAs(FULL_STATESAVES_DIR "tempState.sav");
*/
}
} }
// Callback_WiimoteLog // Callback_WiimoteLog

View File

@ -49,9 +49,8 @@ namespace Core
void SetState(EState _State); void SetState(EState _State);
EState GetState(); EState GetState();
// Save/Load state void ScreenShot(const std::string& name);
void SaveState(); void ScreenShot();
void LoadState();
// Get core parameters kill use SConfig instead // Get core parameters kill use SConfig instead
const SCoreStartupParameter& GetStartupParameter(); const SCoreStartupParameter& GetStartupParameter();

View File

@ -49,8 +49,8 @@ static unsigned char __LZO_MMODEL out [ OUT_LEN ];
static HEAP_ALLOC(wrkmem,LZO1X_1_MEM_COMPRESS); static HEAP_ALLOC(wrkmem,LZO1X_1_MEM_COMPRESS);
static int ev_Save; static int ev_Save, ev_BufferSave;
static int ev_Load; static int ev_Load, ev_BufferLoad;
static std::string cur_filename, lastFilename; static std::string cur_filename, lastFilename;

View File

@ -290,8 +290,8 @@ EVT_MENU(IDM_UNDOSTATE, CFrame::OnUndoState)
EVT_MENU(IDM_LOADSTATEFILE, CFrame::OnLoadStateFromFile) EVT_MENU(IDM_LOADSTATEFILE, CFrame::OnLoadStateFromFile)
EVT_MENU(IDM_SAVESTATEFILE, CFrame::OnSaveStateToFile) EVT_MENU(IDM_SAVESTATEFILE, CFrame::OnSaveStateToFile)
EVT_MENU_RANGE(IDM_LOADSLOT1, IDM_LOADSLOT10, CFrame::OnLoadState) EVT_MENU_RANGE(IDM_LOADSLOT1, IDM_LOADSLOT8, CFrame::OnLoadState)
EVT_MENU_RANGE(IDM_SAVESLOT1, IDM_SAVESLOT10, CFrame::OnSaveState) EVT_MENU_RANGE(IDM_SAVESLOT1, IDM_SAVESLOT8, CFrame::OnSaveState)
EVT_MENU_RANGE(IDM_DRIVE1, IDM_DRIVE24, CFrame::OnBootDrive) EVT_MENU_RANGE(IDM_DRIVE1, IDM_DRIVE24, CFrame::OnBootDrive)
EVT_SIZE(CFrame::OnResize) EVT_SIZE(CFrame::OnResize)

View File

@ -144,7 +144,7 @@ void CFrame::CreateMenu()
loadMenu->Append(IDM_UNDOSTATE, _T("Last Overwritten State\tF12")); loadMenu->Append(IDM_UNDOSTATE, _T("Last Overwritten State\tF12"));
loadMenu->AppendSeparator(); loadMenu->AppendSeparator();
for (int i = 1; i < 10; i++) { for (int i = 1; i <= 8; i++) {
loadMenu->Append(IDM_LOADSLOT1 + i - 1, wxString::Format(_T("Slot %i\tF%i"), i, i)); loadMenu->Append(IDM_LOADSLOT1 + i - 1, wxString::Format(_T("Slot %i\tF%i"), i, i));
saveMenu->Append(IDM_SAVESLOT1 + i - 1, wxString::Format(_T("Slot %i\tShift+F%i"), i, i)); saveMenu->Append(IDM_SAVESLOT1 + i - 1, wxString::Format(_T("Slot %i\tShift+F%i"), i, i));
} }
@ -516,34 +516,12 @@ void CFrame::OnBrowse(wxCommandEvent& WXUNUSED (event))
m_GameListCtrl->BrowseForDirectory(); m_GameListCtrl->BrowseForDirectory();
} }
// Create screenshot // Create screenshot
static inline void GenerateScreenshotName(std::string& name)
{
int index = 1;
std::string tempname;
tempname = FULL_SCREENSHOTS_DIR;
tempname += Core::GetStartupParameter().GetUniqueID();
name = StringFromFormat("%s-%d.bmp", tempname.c_str(), index);
while(File::Exists(name.c_str()))
name = StringFromFormat("%s-%d.bmp", tempname.c_str(), ++index);
}
void CFrame::OnScreenshot(wxCommandEvent& WXUNUSED (event)) void CFrame::OnScreenshot(wxCommandEvent& WXUNUSED (event))
{ {
std::string name; Core::ScreenShot();
GenerateScreenshotName(name);
bool bPaused = (Core::GetState() == Core::CORE_PAUSE);
Core::SetState(Core::CORE_PAUSE);
CPluginManager::GetInstance().GetVideo()->Video_Screenshot(name.c_str());
if(!bPaused)
Core::SetState(Core::CORE_RUN);
} }
// Stop the emulation // Stop the emulation
void CFrame::DoStop() void CFrame::DoStop()
{ {
@ -583,7 +561,6 @@ void CFrame::OnStop(wxCommandEvent& WXUNUSED (event))
DoStop(); DoStop();
} }
void CFrame::OnConfigMain(wxCommandEvent& WXUNUSED (event)) void CFrame::OnConfigMain(wxCommandEvent& WXUNUSED (event))
{ {
CConfigMain ConfigMain(this); CConfigMain ConfigMain(this);

View File

@ -43,8 +43,6 @@ enum
IDM_SAVESLOT6, IDM_SAVESLOT6,
IDM_SAVESLOT7, IDM_SAVESLOT7,
IDM_SAVESLOT8, IDM_SAVESLOT8,
IDM_SAVESLOT9,
IDM_SAVESLOT10,
IDM_LOADSLOT1, IDM_LOADSLOT1,
IDM_LOADSLOT2, IDM_LOADSLOT2,
IDM_LOADSLOT3, IDM_LOADSLOT3,
@ -53,8 +51,6 @@ enum
IDM_LOADSLOT6, IDM_LOADSLOT6,
IDM_LOADSLOT7, IDM_LOADSLOT7,
IDM_LOADSLOT8, IDM_LOADSLOT8,
IDM_LOADSLOT9,
IDM_LOADSLOT10,
IDM_PLAY, IDM_PLAY,
IDM_STOP, IDM_STOP,
IDM_SCREENSHOT, IDM_SCREENSHOT,