136 lines
2.2 KiB
C#
136 lines
2.2 KiB
C#
using System.IO;
|
|
using System.Linq;
|
|
|
|
using BizHawk.Emulation.Common.IEmulatorExtensions;
|
|
|
|
namespace BizHawk.Client.Common
|
|
{
|
|
public class SaveSlotManager
|
|
{
|
|
private readonly bool[] _slots = new bool[10];
|
|
private readonly bool[] _redo = new bool[10];
|
|
|
|
public SaveSlotManager()
|
|
{
|
|
Update();
|
|
}
|
|
|
|
public void Update()
|
|
{
|
|
if (Global.Game == null || Global.Emulator == null)
|
|
{
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
_slots[i] = false;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
var file = new FileInfo(
|
|
PathManager.SaveStatePrefix(Global.Game) + "." + "QuickSave" + i + ".State"
|
|
);
|
|
if (file.Directory != null && file.Directory.Exists == false)
|
|
{
|
|
file.Directory.Create();
|
|
}
|
|
|
|
_slots[i] = file.Exists;
|
|
}
|
|
}
|
|
|
|
public bool HasSavestateSlots
|
|
{
|
|
get
|
|
{
|
|
if (!Global.Emulator.HasSavestates())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Update();
|
|
return _slots.Any(slot => slot);
|
|
}
|
|
}
|
|
|
|
public bool HasSlot(int slot)
|
|
{
|
|
if (!Global.Emulator.HasSavestates())
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (slot < 0 || slot > 10)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
Update();
|
|
return _slots[slot];
|
|
}
|
|
|
|
public void ClearRedoList()
|
|
{
|
|
for (int i = 0; i < 10; i++)
|
|
{
|
|
_redo[i] = false;
|
|
}
|
|
}
|
|
|
|
public void ToggleRedo(int slot)
|
|
{
|
|
if (slot < 0 || slot > 9)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_redo[slot] ^= true;
|
|
}
|
|
|
|
public bool IsRedo(int slot)
|
|
{
|
|
if (slot < 0 || slot > 9)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return _redo[slot];
|
|
}
|
|
|
|
public void Clear()
|
|
{
|
|
ClearRedoList();
|
|
Update();
|
|
}
|
|
|
|
public void SwapBackupSavestate(string path)
|
|
{
|
|
// Takes the .state and .bak files and swaps them
|
|
var state = new FileInfo(path);
|
|
var backup = new FileInfo(path + ".bak");
|
|
var temp = new FileInfo(path + ".bak.tmp");
|
|
|
|
if (!state.Exists || !backup.Exists)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (temp.Exists)
|
|
{
|
|
temp.Delete();
|
|
}
|
|
|
|
backup.CopyTo(path + ".bak.tmp");
|
|
backup.Delete();
|
|
state.CopyTo(path + ".bak");
|
|
state.Delete();
|
|
temp.CopyTo(path);
|
|
temp.Delete();
|
|
|
|
ToggleRedo(Global.Config.SaveSlot);
|
|
}
|
|
}
|
|
}
|