diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
index d37745bd..d0077d9d 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
@@ -38,6 +38,8 @@ namespace AxibugEmuOnline.Client
}
}
+ public event Action OnSavSuccessed;
+
/// 存档顺序号,用于判断云存档和本地存档的同步状态,是否存在冲突
public uint Sequecen { get; private set; }
@@ -126,7 +128,7 @@ namespace AxibugEmuOnline.Client
m_headerCache = new Header();
fixed (Header* headPtr = &m_headerCache)
{
- var headP=(byte*)headPtr;
+ var headP = (byte*)headPtr;
Marshal.Copy(raw, 0, (IntPtr)headP, sizeof(Header));
}
@@ -179,6 +181,8 @@ namespace AxibugEmuOnline.Client
m_screenShotCaches = screenShotData;
IsEmpty = false;
+
+ OnSavSuccessed?.Invoke();
}
///
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
index 90b81e4c..b20d5c56 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
@@ -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 result = new List();
foreach (var savFile in saveFiles)
{
- if (savFile.AutoSave) continue;
result.Add(new SaveSlotMenu(m_gameUI, savFile));
}
return result;
}
/// 存档侧边选项UI
- 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 m_subOptions = new List();
+ public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}";
public SaveSlotMenu(InGameUI inGameui, SaveFile savFile)
{
SavFile = savFile;
- m_ingameUI = inGameui;
+
+ //非自动存档,增加保存选项
+ if (!savFile.AutoSave) m_subOptions.Add(new SaveMenuItem(inGameui, savFile));
+ //添加读取选项
+ m_subOptions.Add(new LoadMenuItem(inGameui, savFile));
}
- public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
+ protected override List GetOptionMenus()
{
- cancelHide = true;
- var stateData = m_ingameUI.Core.GetStateBytes();
- var tex = m_ingameUI.Core.OutputPixel;
- var screenData = tex.ToJPG();
-
- SavFile.Save(SavFile.Sequecen, stateData, screenData);
+ return m_subOptions;
}
- public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}";
+ 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;
+ m_savFile.GetSavData(out byte[] savData, out var _);
+ if (savData != null)
+ {
+ m_ingameUI.Core.LoadStateFromBytes(savData);
+ }
+
+ OverlayManager.HideSideBar();
+ }
+ }
}
}
}
\ No newline at end of file
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs
index 6a517274..b52e8316 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI.cs
@@ -221,14 +221,21 @@ namespace AxibugEmuOnline.Client
}
+ ///
+ /// 关闭这个侧边栏选项UI
+ ///
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();
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs
index fac8acca..d0fc9d20 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OptionUI/OptionUI_SavSlotItem.cs
@@ -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();
}
}
}
diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs
index 73fe0bec..44404edc 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/OverlayUI/OverlayManager.cs
@@ -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);
}
+
}
}