master #51

Merged
sin365 merged 4 commits from Alienjack/AxibugEmuOnline:master into master 2024-11-12 12:51:56 +08:00
5 changed files with 36 additions and 8 deletions
Showing only changes of commit edc84fc3cf - Show all commits

View File

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

View File

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

View File

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

View File

@ -24,6 +24,25 @@ namespace VirtualNes.Core
valid = true; 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) public bool HasButton(int player, EnumButtonType button)
{ {
uint raw = 0; uint raw = 0;

View File

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