开放模拟器核心帧序号

This commit is contained in:
ALIENJACK\alien 2024-11-12 09:58:30 +08:00
parent 11d7f681b0
commit edc84fc3cf
5 changed files with 36 additions and 8 deletions

View File

@ -99,7 +99,7 @@ namespace AxibugEmuOnline.Client
}
uint LastTestInput = 0;
public void SampleInput()
public void SampleInput(uint frameIndex)
{
if (InGameUI.Instance.IsNetPlay)
{

View File

@ -84,17 +84,25 @@ namespace AxibugEmuOnline.Client
}
}
ControllerState lastState;
private bool PushEmulatorFrame()
{
Supporter.SampleInput();
Supporter.SampleInput(NesCore.FrameCount);
var controlState = Supporter.GetControllerState();
//如果未收到Input数据,核心帧不推进
if (!controlState.valid) return false;
if (controlState != lastState)
{
App.log.Info($"[LOCALDEBUG]{NesCore.FrameCount}-->{controlState}");
}
NesCore.pad.Sync(controlState);
NesCore.EmulateFrame(true);
lastState = controlState;
return true;
}

View File

@ -459,11 +459,9 @@ namespace VirtualNes.Core
m_CheatCode.Clear();
}
private int FrameCount = 0;
public uint FrameCount { get; private set; }
public void EmulateFrame(bool bDraw)
{
FrameCount++;
int scanline = 0;
if (rom.IsNSF())
{
@ -772,6 +770,8 @@ namespace VirtualNes.Core
{
DrawPad();
}
FrameCount++;
}
private void DrawPad()
@ -1901,6 +1901,7 @@ namespace VirtualNes.Core
public void LoadState(State state)
{
FrameCount = 0;
//HEADER
{
state.HEADER.ID = "VirtuaNES ST";

View File

@ -24,6 +24,25 @@ namespace VirtualNes.Core
valid = true;
}
public static bool operator ==(ControllerState left, ControllerState right)
{
return
left.raw0 == right.raw0 &&
left.raw1 == right.raw1 &&
left.raw2 == right.raw2 &&
left.raw3 == right.raw3;
}
public static bool operator !=(ControllerState left, ControllerState right)
{
return !(left == right);
}
public override string ToString()
{
return $"{raw0}|{raw1}|{raw2}|{raw3}";
}
public bool HasButton(int player, EnumButtonType button)
{
uint raw = 0;

View File

@ -59,9 +59,9 @@ namespace VirtualNes.Core
return s_support.GetControllerState();
}
public static void SampleInput()
public static void SampleInput(uint frameCount)
{
s_support.SampleInput();
s_support.SampleInput(frameCount);
}
public static EmulatorConfig Config => s_support.Config;
@ -81,6 +81,6 @@ namespace VirtualNes.Core
Stream OpenFile(string directPath, string fileName);
bool TryGetMapperNo(ROM rom, out int mapperNo);
ControllerState GetControllerState();
void SampleInput();
void SampleInput(uint frameCount);
}
}