实现存档以及读取存档功能
This commit is contained in:
parent
f325e63e26
commit
3dc7e9acd1
@ -38,6 +38,8 @@ namespace AxibugEmuOnline.Client
|
||||
}
|
||||
}
|
||||
|
||||
public event Action OnSavSuccessed;
|
||||
|
||||
/// <summary> 存档顺序号,用于判断云存档和本地存档的同步状态,是否存在冲突 </summary>
|
||||
public uint Sequecen { get; private set; }
|
||||
|
||||
@ -179,6 +181,8 @@ namespace AxibugEmuOnline.Client
|
||||
m_screenShotCaches = screenShotData;
|
||||
|
||||
IsEmpty = false;
|
||||
|
||||
OnSavSuccessed?.Invoke();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@ -9,7 +9,7 @@ namespace AxibugEmuOnline.Client
|
||||
{
|
||||
private InGameUI m_gameUI;
|
||||
|
||||
public override string Name => "保存";
|
||||
public override string Name => "存档";
|
||||
|
||||
public InGameUI_SaveStateMenu(InGameUI inGameUI)
|
||||
{
|
||||
@ -22,39 +22,81 @@ namespace AxibugEmuOnline.Client
|
||||
List<InternalOptionMenu> result = new List<InternalOptionMenu>();
|
||||
foreach (var savFile in saveFiles)
|
||||
{
|
||||
if (savFile.AutoSave) continue;
|
||||
result.Add(new SaveSlotMenu(m_gameUI, savFile));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
/// <summary> 存档侧边选项UI </summary>
|
||||
public class SaveSlotMenu : ExecuteMenu
|
||||
public class SaveSlotMenu : ExpandMenu
|
||||
{
|
||||
public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem);
|
||||
public SaveFile SavFile { get; private set; }
|
||||
|
||||
private InGameUI m_ingameUI;
|
||||
|
||||
public override bool Visible => !SavFile.AutoSave;
|
||||
List<InternalOptionMenu> m_subOptions = new List<InternalOptionMenu>();
|
||||
public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}";
|
||||
|
||||
public SaveSlotMenu(InGameUI inGameui, SaveFile savFile)
|
||||
{
|
||||
SavFile = savFile;
|
||||
|
||||
//非自动存档,增加保存选项
|
||||
if (!savFile.AutoSave) m_subOptions.Add(new SaveMenuItem(inGameui, savFile));
|
||||
//添加读取选项
|
||||
m_subOptions.Add(new LoadMenuItem(inGameui, savFile));
|
||||
}
|
||||
|
||||
protected override List<InternalOptionMenu> GetOptionMenus()
|
||||
{
|
||||
return m_subOptions;
|
||||
}
|
||||
|
||||
public class SaveMenuItem : ExecuteMenu
|
||||
{
|
||||
SaveFile m_savFile;
|
||||
InGameUI m_ingameUI;
|
||||
public override string Name => "保存";
|
||||
|
||||
public SaveMenuItem(InGameUI inGameui, SaveFile savFile)
|
||||
{
|
||||
m_ingameUI = inGameui;
|
||||
m_savFile = savFile;
|
||||
}
|
||||
|
||||
public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
|
||||
{
|
||||
var stateData = m_ingameUI.Core.GetStateBytes();
|
||||
var tex = m_ingameUI.Core.OutputPixel;
|
||||
var screenData = tex.ToJPG();
|
||||
|
||||
m_savFile.Save(m_savFile.Sequecen, stateData, screenData);
|
||||
}
|
||||
}
|
||||
|
||||
public class LoadMenuItem : ExecuteMenu
|
||||
{
|
||||
SaveFile m_savFile;
|
||||
InGameUI m_ingameUI;
|
||||
public override string Name => "读取";
|
||||
|
||||
public LoadMenuItem(InGameUI inGameui, SaveFile savFile)
|
||||
{
|
||||
m_ingameUI = inGameui;
|
||||
m_savFile = savFile;
|
||||
}
|
||||
|
||||
public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
|
||||
{
|
||||
cancelHide = true;
|
||||
var stateData = m_ingameUI.Core.GetStateBytes();
|
||||
var tex = m_ingameUI.Core.OutputPixel;
|
||||
var screenData = tex.ToJPG();
|
||||
|
||||
SavFile.Save(SavFile.Sequecen, stateData, screenData);
|
||||
m_savFile.GetSavData(out byte[] savData, out var _);
|
||||
if (savData != null)
|
||||
{
|
||||
m_ingameUI.Core.LoadStateFromBytes(savData);
|
||||
}
|
||||
|
||||
public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}";
|
||||
OverlayManager.HideSideBar();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -221,14 +221,21 @@ namespace AxibugEmuOnline.Client
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 关闭这个侧边栏选项UI
|
||||
/// </summary>
|
||||
public void Hide()
|
||||
{
|
||||
if (m_bPoped)
|
||||
{
|
||||
if (m_child != null)
|
||||
{
|
||||
m_child.Hide();
|
||||
}
|
||||
|
||||
Vector2 start = new Vector2(-MenuRoot.rect.width, MenuRoot.anchoredPosition.y);
|
||||
Vector2 end = new Vector2(0, MenuRoot.anchoredPosition.y);
|
||||
|
||||
|
||||
ReleaseRuntimeMenus();
|
||||
m_runtimeMenuItems.Clear();
|
||||
|
||||
|
||||
@ -17,6 +17,8 @@ namespace AxibugEmuOnline.Client
|
||||
base.OnSetData(menuData);
|
||||
|
||||
RefreshUI();
|
||||
|
||||
MenuData.SavFile.OnSavSuccessed += RefreshUI;
|
||||
}
|
||||
|
||||
private void RefreshUI()
|
||||
@ -57,12 +59,13 @@ namespace AxibugEmuOnline.Client
|
||||
Destroy(m_screenTex);
|
||||
m_screenTex = null;
|
||||
}
|
||||
|
||||
MenuData.SavFile.OnSavSuccessed -= RefreshUI;
|
||||
}
|
||||
|
||||
public override void OnExecute(OptionUI optionUI, ref bool cancelHide)
|
||||
{
|
||||
MenuData.OnExcute(optionUI, ref cancelHide);
|
||||
RefreshUI();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,9 +39,15 @@ namespace AxibugEmuOnline.Client
|
||||
s_ins.m_OptionUI.Pop(menus, defaultIndex, onClose);
|
||||
}
|
||||
|
||||
public static void HideSideBar()
|
||||
{
|
||||
s_ins.m_OptionUI.Hide();
|
||||
}
|
||||
|
||||
public static void PopTip(string msg)
|
||||
{
|
||||
s_ins.m_popTipsUI.Pop(msg);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user