Merge pull request 'master' (#82) from Alienjack/AxibugEmuOnline:master into master

Reviewed-on: sin365/AxibugEmuOnline#82
This commit is contained in:
sin365 2025-01-07 14:12:46 +08:00
commit 16765291fa
10 changed files with 113 additions and 18 deletions

View File

@ -476,7 +476,7 @@ MonoBehaviour:
SelectScale: 1
UnSelectScale: 1
RomGroupRoot: {fileID: 3086674949377227884}
Platform: 0
Platform: 1
SearchKey:
--- !u!114 &5700455559359757662
MonoBehaviour:

View File

@ -7,18 +7,30 @@ namespace AxibugEmuOnline.Client
{
GameObject gameObject { get; }
/// <summary> 获得模拟器核心中的状态快照对象 </summary>
object GetState();
/// <summary> 获得模拟器核心中的状态快照字节数据 </summary>
byte[] GetStateBytes();
/// <summary> 加载状态快照 </summary>
/// <param name="state">该对象应该来自核心的<see cref="GetState"/>方法的返回值,或是从<see cref="GetStateBytes"/>返回的byte数组构建</param>
void LoadState(object state);
/// <summary> 加载状态快照 </summary>
/// <param name="data">该对象应该来自核心的<see cref="GetStateBytes"/>返回的byte数组</param>
void LoadStateFromBytes(byte[] data);
/// <summary> 暂停核心推帧 </summary>
void Pause();
/// <summary> 恢复核心推帧(从Pause状态恢复) </summary>
void Resume();
void SetupScheme();
/// <summary> 启动模拟器逻辑 </summary>
MsgBool StartGame(RomFile romFile);
/// <summary> 重置核心,通常由模拟器核心提供的功能 </summary>
void DoReset();
/// <summary> 获得模拟器核心的控制器设置器 </summary>
/// <returns></returns>
IControllerSetuper GetControllerSetuper();
/// <summary> 核心所属平台 </summary>
RomPlatformType Platform { get; }
/// <summary> 获取当前模拟器帧序号,在加载快照和Reset后,应当重置为0 </summary>
uint Frame { get; }
}

View File

@ -63,7 +63,7 @@ namespace AxibugEmuOnline.Client.Manager
LaunchUI.Instance.HideMainMenu();
InGameUI.Instance.Show(romFile, m_emuCore);
m_emuCore.SetupScheme();
CommandDispatcher.Instance.Current = CommandDispatcher.Instance.Gaming;
m_controllerSetuper = m_emuCore.GetControllerSetuper();

View File

@ -32,6 +32,18 @@ namespace AxibugEmuOnline.Client
return (EnumScalerMode)setVal;
}
public bool IsSetMode(RomPlatformType platform)
{
int setVal = PlayerPrefs.GetInt($"{nameof(ScreenScaler)}.PlatMode.{platform}", -1);
return setVal != -1;
}
public void SetMode(RomPlatformType platform, EnumScalerMode? mode)
{
int setVal = mode == null ? -1 : (int)mode;
PlayerPrefs.SetInt($"{nameof(ScreenScaler)}.PlatMode.{platform}", setVal);
}
/// <summary>
/// 根据缩放模式设置UI的缩放
/// </summary>

View File

@ -135,10 +135,7 @@ namespace AxibugEmuOnline.Client
{
FetchPageCmd.Remove(page);
SaveRomInfoFromWeb(resp);
},
//TODO 平台参数
AxibugProtobuf.RomPlatformType.Nes,
lastSearchKey, pageNo, PAGE_SIZE);
}, m_platform, lastSearchKey, pageNo, PAGE_SIZE);
}
else
{
@ -146,10 +143,7 @@ namespace AxibugEmuOnline.Client
{
FetchPageCmd.Remove(page);
SaveRomInfoFromWeb(resp);
},
//TODO 平台参数
AxibugProtobuf.RomPlatformType.Nes,
pageNo, PAGE_SIZE);
}, m_platform, pageNo, PAGE_SIZE);
}
}

View File

@ -103,11 +103,6 @@ namespace AxibugEmuOnline.Client
NesCore.Reset();
}
public void SetupScheme()
{
CommandDispatcher.Instance.Current = CommandDispatcher.Instance.Gaming;
}
public void LoadState(object state)
{
NesCore.LoadState((State)state);

View File

@ -1,6 +1,5 @@
using AxibugEmuOnline.Client.ClientCore;
using AxibugProtobuf;
using System;
using System.Collections.Generic;
using UnityEngine;

View File

@ -42,6 +42,7 @@ namespace AxibugEmuOnline.Client
m_stepPerformer = new StepPerformer(this);
menus.Add(new InGameUI_FilterSetting(this));
menus.Add(new InGameUI_Scaler(this));
menus.Add(new InGameUI_Reset(this));
menus.Add(new InGameUI_SaveState(this));
menus.Add(new InGameUI_LoadState(this));

View File

@ -0,0 +1,80 @@
using AxibugEmuOnline.Client.ClientCore;
using System;
using System.Collections.Generic;
using UnityEngine;
using static AxibugEmuOnline.Client.ScreenScaler;
namespace AxibugEmuOnline.Client
{
public class InGameUI_Scaler : ExpandMenu
{
private List<OptionMenu> m_subMenus = new List<OptionMenu>();
public InGameUI_Scaler(InGameUI inGameUI) : base("屏幕比例", null)
{
m_subMenus.Add(new Scale(inGameUI, null));
foreach (EnumScalerMode scaleModeValue in Enum.GetValues(typeof(EnumScalerMode)))
{
m_subMenus.Add(new Scale(inGameUI, scaleModeValue));
}
}
protected override List<OptionMenu> GetOptionMenus()
{
return m_subMenus;
}
public class Scale : ExecuteMenu
{
private EnumScalerMode? m_mode;
private InGameUI m_gameUI;
public override bool IsApplied
{
get
{
if (m_gameUI.Core.IsNull()) return false;
var isSetMode = App.settings.ScreenScaler.IsSetMode(m_gameUI.Core.Platform);
if (m_mode == null && !isSetMode)
{
return true;
}
else if (isSetMode && m_mode.HasValue)
{
var mode = App.settings.ScreenScaler.GetMode(m_gameUI.Core.Platform);
return mode == m_mode.Value;
}
else return false;
}
}
public Scale(InGameUI inGameUI, EnumScalerMode? mode) : base(ModeToName(mode), null)
{
m_mode = mode;
m_gameUI = inGameUI;
}
public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
{
App.settings.ScreenScaler.SetMode(m_gameUI.Core.Platform, m_mode);
}
static string ModeToName(EnumScalerMode? mode)
{
if (mode == null) return "使用全局设置";
else
{
switch (mode.Value)
{
case EnumScalerMode.FullScreen: return "全屏";
case EnumScalerMode.Raw: return "原始尺寸";
case EnumScalerMode.Fix: return "适应";
default: throw new Exception($"Not Support Mode : {mode.Value}");
}
}
}
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 2703b2b6867eb344386509ff36bf1459