using AxibugEmuOnline.Client.ClientCore; using System; using System.Collections.Generic; using UnityEngine; namespace AxibugEmuOnline.Client { public class InGameUI_SaveStateMenu : ExpandMenu { private InGameUI m_gameUI; public override string Name => "存档"; public InGameUI_SaveStateMenu(InGameUI inGameUI) { m_gameUI = inGameUI; } protected override List<InternalOptionMenu> GetOptionMenus() { var saveFiles = App.SavMgr.GetSlotSaves(m_gameUI.RomFile.ID, m_gameUI.RomFile.Platform); List<InternalOptionMenu> result = new List<InternalOptionMenu>(); foreach (var savFile in saveFiles) { result.Add(new SaveSlotMenu(m_gameUI, savFile)); } return result; } /// <summary> 存档侧边选项UI </summary> public class SaveSlotMenu : ExpandMenu { public override Type MenuUITemplateType => typeof(OptionUI_SavSlotItem); public SaveFile SavFile { get; private set; } 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_ingameUI.Core.DrawCanvas.transform.localScale); 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(); } } } } }