diff --git a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
index 91568212..fa08afc3 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/SaveSlotManager/SaveFile.cs
@@ -63,7 +63,7 @@ namespace AxibugEmuOnline.Client
/// 存档顺序号,用于判断云存档和本地存档的同步状态,是否存在冲突
public uint Sequecen { get; private set; }
- SimpleFSM FSM;
+ public SimpleFSM FSM { get; private set; }
byte[] m_savDataCaches;
byte[] m_screenShotCaches;
Header m_headerCache;
@@ -219,7 +219,7 @@ namespace AxibugEmuOnline.Client
///
public void TrySync()
{
- if (FSM.CurrentState is not IdleState && FSM.CurrentState is not SyncedState) return;
+ if (FSM.CurrentState is not IdleState && FSM.CurrentState is not SyncedState && FSM.CurrentState is not SyncFailedState) return;
FSM.ChangeState();
}
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 1da77c5f..eff8c86a 100644
--- a/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
+++ b/AxibugEmuOnline.Client/Assets/Script/AppMain/UI/InGameUI/InGameUI_SaveStateMenu.cs
@@ -33,17 +33,23 @@ namespace AxibugEmuOnline.Client
public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem);
public SaveFile SavFile { get; private set; }
- List m_subOptions = new List();
public override string Name => SavFile.AutoSave ? "自动存档" : $"存档{SavFile.SlotIndex}";
+ SaveMenuItem saveMENU;
+ LoadMenuItem loadMENU;
+ RetryMenuItem retryMENU;
+ UseLocalSaveMenuItem useLocalMENU;
+ UseRemoteSaveMenuItem useRemoteMENU;
+
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));
+ saveMENU = new SaveMenuItem(inGameui, savFile);
+ loadMENU = new LoadMenuItem(inGameui, savFile);
+ retryMENU = new RetryMenuItem(inGameui, savFile);
+ useLocalMENU = new UseLocalSaveMenuItem(inGameui, savFile);
+ useRemoteMENU = new UseRemoteSaveMenuItem(inGameui, savFile);
}
public override void OnShow(OptionUI_MenuItem ui)
@@ -55,7 +61,21 @@ namespace AxibugEmuOnline.Client
protected override List GetOptionMenus()
{
- return m_subOptions;
+ var menus = new List();
+
+ if (SavFile.GetCurrentState() is SaveFile.ConflictState)
+ {
+ menus.Add(useRemoteMENU);
+ menus.Add(useLocalMENU);
+ }
+ else
+ {
+ if (SavFile.GetCurrentState() is SaveFile.SyncFailedState) menus.Add(retryMENU);
+ if (!SavFile.AutoSave) menus.Add(saveMENU);
+ if (!SavFile.IsEmpty) menus.Add(loadMENU);
+ }
+
+ return menus;
}
public class SaveMenuItem : ExecuteMenu
@@ -111,6 +131,66 @@ namespace AxibugEmuOnline.Client
OverlayManager.HideSideBar();
}
}
+
+ public class RetryMenuItem : ExecuteMenu
+ {
+ SaveFile m_savFile;
+ InGameUI m_ingameUI;
+ public override string Name => "重试";
+ public override bool Visible => m_savFile.GetCurrentState() is SaveFile.SyncFailedState;
+
+ public RetryMenuItem(InGameUI inGameui, SaveFile savFile)
+ {
+ m_ingameUI = inGameui;
+ m_savFile = savFile;
+ }
+
+ public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
+ {
+ cancelHide = true;
+ m_savFile.TrySync();
+ }
+ }
+
+ public class UseRemoteSaveMenuItem : ExecuteMenu
+ {
+ SaveFile m_savFile;
+ InGameUI m_ingameUI;
+ public override string Name => "使用云端存档";
+
+ public UseRemoteSaveMenuItem(InGameUI inGameui, SaveFile savFile)
+ {
+ m_ingameUI = inGameui;
+ m_savFile = savFile;
+ }
+
+ public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
+ {
+ if (m_savFile.GetCurrentState() is not SaveFile.ConflictState) return;
+ cancelHide = true;
+ m_savFile.FSM.ChangeState();
+ }
+ }
+
+ public class UseLocalSaveMenuItem : ExecuteMenu
+ {
+ SaveFile m_savFile;
+ InGameUI m_ingameUI;
+ public override string Name => "使用本地存档";
+
+ public UseLocalSaveMenuItem(InGameUI inGameui, SaveFile savFile)
+ {
+ m_ingameUI = inGameui;
+ m_savFile = savFile;
+ }
+
+ public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
+ {
+ if (m_savFile.GetCurrentState() is not SaveFile.ConflictState) return;
+ cancelHide = true;
+ m_savFile.FSM.ChangeState();
+ }
+ }
}
}
}
\ No newline at end of file