规整代码,暴露VideoFrame

This commit is contained in:
sin365 2024-08-30 17:35:53 +08:00
parent bac00afcdc
commit 9ab88bd6a9
6 changed files with 178 additions and 78 deletions

View File

@ -4,7 +4,7 @@ https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project>
<PropertyGroup>
<History>True|2024-08-28T08:12:23.3416224Z||;True|2024-08-28T13:18:21.7983285+08:00||;True|2024-08-28T12:54:14.9742502+08:00||;True|2024-08-28T12:09:37.5280942+08:00||;True|2024-08-28T12:07:03.6717540+08:00||;True|2024-08-07T18:02:59.4096796+08:00||;False|2024-08-07T18:02:44.0239078+08:00||;True|2024-07-31T17:00:23.0585720+08:00||;True|2024-07-31T17:00:19.8123170+08:00||;True|2024-07-30T20:51:40.9773933+08:00||;True|2024-07-30T17:04:12.3440051+08:00||;True|2024-07-30T17:01:28.0849009+08:00||;True|2024-07-30T10:36:57.5301145+08:00||;</History>
<History>True|2024-08-30T07:41:53.2597006Z||;True|2024-08-29T17:00:35.4694695+08:00||;True|2024-08-29T16:40:23.7314446+08:00||;True|2024-08-29T16:17:16.6219882+08:00||;False|2024-08-29T15:55:34.5778980+08:00||;True|2024-08-29T15:34:15.1410739+08:00||;False|2024-08-29T15:31:15.0815441+08:00||;False|2024-08-29T15:29:46.6749330+08:00||;False|2024-08-29T15:27:48.9116490+08:00||;False|2024-08-29T15:27:23.2208875+08:00||;True|2024-08-28T16:12:23.3416224+08:00||;True|2024-08-28T13:18:21.7983285+08:00||;True|2024-08-28T12:54:14.9742502+08:00||;True|2024-08-28T12:09:37.5280942+08:00||;True|2024-08-28T12:07:03.6717540+08:00||;True|2024-08-07T18:02:59.4096796+08:00||;False|2024-08-07T18:02:44.0239078+08:00||;True|2024-07-31T17:00:23.0585720+08:00||;True|2024-07-31T17:00:19.8123170+08:00||;True|2024-07-30T20:51:40.9773933+08:00||;True|2024-07-30T17:04:12.3440051+08:00||;True|2024-07-30T17:01:28.0849009+08:00||;True|2024-07-30T10:36:57.5301145+08:00||;</History>
<LastFailureDetails />
</PropertyGroup>
</Project>

View File

@ -1,4 +1,6 @@
using MAME.Core;
using System;
using System.Collections.Generic;
namespace MAME.Core
{
@ -8,60 +10,100 @@ namespace MAME.Core
static IKeyboard mKeyboard;
struct KeyState
//const int CheckMaxEnumIdx = 33;
class KeyState
{
public bool IsPressed;
public bool IsTriggered;
public bool WasPressed;
};
private static KeyState[] m_KeyStates = new KeyState[(byte)MotionKey.FinalKey];
private static Dictionary<MotionKey, KeyState> m_KeyStates = new Dictionary<MotionKey, KeyState>();
MotionKey[] mKeyName;
static MotionKey[] mKeyName;
public static void InitializeInput(IKeyboard ikb)
{
mKeyboard = ikb;
List<MotionKey> temp = new List<MotionKey>();
foreach (MotionKey mkey in Enum.GetValues(typeof(MotionKey)))
{
//if (mkey > MotionKey.FinalKey)
// break;
m_KeyStates[mkey] = new KeyState();
temp.Add(mkey);
}
mKeyName = temp.ToArray();
}
public static bool IsPressed(MotionKey key)
{
return m_KeyStates[(int)key].IsPressed;
return m_KeyStates[key].IsPressed;
}
public static bool IsTriggered(MotionKey key)
{
return m_KeyStates[(int)key].IsTriggered;
return m_KeyStates[key].IsTriggered;
}
public static void Update()
{
byte finalIndex = (byte)MotionKey.FinalKey;
for (byte i = 0; i < finalIndex; i++)
for (byte i = 0; i < mKeyName.Length; i++)
{
m_KeyStates[i].IsPressed = false;
m_KeyStates[mKeyName[i]].IsPressed = false;
}
foreach (MotionKey key in mKeyboard.GetPressedKeys())
{
m_KeyStates[(int)key].IsPressed = true;
m_KeyStates[key].IsPressed = true;
}
for (int i = 0; i < finalIndex; i++)
for (int i = 0; i < mKeyName.Length; i++)
{
if (m_KeyStates[i].IsPressed)
MotionKey key = mKeyName[i];
if (m_KeyStates[key].IsPressed)
{
if (m_KeyStates[i].WasPressed)
if (m_KeyStates[key].WasPressed)
{
m_KeyStates[i].IsTriggered = false;
m_KeyStates[key].IsTriggered = false;
}
else
{
m_KeyStates[i].WasPressed = true;
m_KeyStates[i].IsTriggered = true;
m_KeyStates[key].WasPressed = true;
m_KeyStates[key].IsTriggered = true;
}
}
else
{
m_KeyStates[i].WasPressed = false;
m_KeyStates[i].IsTriggered = false;
m_KeyStates[key].WasPressed = false;
m_KeyStates[key].IsTriggered = false;
}
}
//byte finalIndex = CheckMaxEnumIdx;
//for (byte i = 0; i < finalIndex; i++)
//{
// m_KeyStates[i].IsPressed = false;
//}
//foreach (MotionKey key in mKeyboard.GetPressedKeys())
//{
// m_KeyStates[(int)key].IsPressed = true;
//}
//for (int i = 0; i < finalIndex; i++)
//{
// if (m_KeyStates[i].IsPressed)
// {
// if (m_KeyStates[i].WasPressed)
// {
// m_KeyStates[i].IsTriggered = false;
// }
// else
// {
// m_KeyStates[i].WasPressed = true;
// m_KeyStates[i].IsTriggered = true;
// }
// }
// else
// {
// m_KeyStates[i].WasPressed = false;
// m_KeyStates[i].IsTriggered = false;
// }
//}
}
}

View File

@ -72,7 +72,7 @@ namespace MAME.Core
#region
static Action<int[]> Act_SubmitVideo;
static Action<int[],long> Act_SubmitVideo;
public static void BindFunc(IVideoPlayer Ivp)
{
@ -81,9 +81,9 @@ namespace MAME.Core
Act_SubmitVideo += Ivp.SubmitVideo;
}
static void SubmitVideo(int[] Bitmap)
static void SubmitVideo(int[] Bitmap, long frame_number)
{
Act_SubmitVideo.Invoke(Bitmap);
Act_SubmitVideo.Invoke(Bitmap, frame_number);
}
#endregion

View File

@ -165,7 +165,7 @@ namespace MAME.Core
//Machine.mainMotion.pictureBox1.Image = bbmp[iMode];
//AxiBitmapEx.CloneIntColorArr(Video.bitmapcolor,Video.bitmapcolorRect, Video.fullwidth, Video.fullheight, new Rectangle(offsetx, offsety, width, height));
SubmitVideo(Video.bitmapcolorRect);
SubmitVideo(Video.bitmapcolorRect, Video.screenstate.frame_number);
//SubmitVideo(Video.bitmapcolor);
}
catch (Exception ex)

View File

@ -2,6 +2,6 @@
{
public interface IVideoPlayer
{
void SubmitVideo(int[] data);
void SubmitVideo(int[] data,long frame_number);
}
}

View File

@ -1,59 +1,117 @@
namespace MAME.Core
using System;
namespace MAME.Core
{
public enum MotionKey : byte
[Flags]
public enum MotionKey : long
{
EMU_PAUSED = 0,
P1_INSERT_COIN,
P1_GAMESTART,
P1_UP,
P1_DOWN,
P1_LEFT,
P1_RIGHT,
P1_BTN_1,
P1_BTN_2,
P1_BTN_3,
P1_BTN_4,
P1_BTN_5,
P1_BTN_6,
P1_UNKNOW_E,
P1_UNKNOW_F,
P2_INSERT_COIN,
P2_GAMESTART,
P2_UP,
P2_DOWN,
P2_LEFT,
P2_RIGHT,
P2_BTN_1,
P2_BTN_2,
P2_BTN_3,
P2_BTN_4,
P2_BTN_5,
P2_BTN_6,
P2_UNKNOW_E,
P2_UNKNOW_F,
UNKNOW_Q,
UNKNOW_N,
UNKNOW_R,
UNKNOW_T,
UNKNOW_M,
UNKNOW_V,
UNKNOW_B,
F10,
F9,
F8,
F7,
F6,
F5,
F4,
F3,
F2,
F1,
Escape,
LeftShift,
RightShift,
/// <summary>
/// 用于标记最后一个
/// </summary>
FinalKey
None = (0),
P1_INSERT_COIN = (1),
P1_GAMESTART = (1 << 1),
P1_UP = (1 << 2),
P1_DOWN = (1 << 3),
P1_LEFT = (1 << 4),
P1_RIGHT = (1 << 5),
P1_BTN_1 = (1 << 6),
P1_BTN_2 = (1 << 7),
P1_BTN_3 = (1 << 8),
P1_BTN_4 = (1 << 9),
P1_BTN_5 = (1 << 10),
P1_BTN_6 = (1 << 11),
P1_UNKNOW_E = (1 << 12),
P1_UNKNOW_F = (1 << 13),
P2_INSERT_COIN = (1 << 14),
P2_GAMESTART = (1 << 15),
P2_UP = (1 << 16),
P2_DOWN = (1 << 17),
P2_LEFT = (1 << 18),
P2_RIGHT = (1 << 19),
P2_BTN_1 = (1 << 20),
P2_BTN_2 = (1 << 21),
P2_BTN_3 = (1 << 22),
P2_BTN_4 = (1 << 23),
P2_BTN_5 = (1 << 24),
P2_BTN_6 = (1 << 25),
P2_UNKNOW_E = (1 << 26),
P2_UNKNOW_F = (1 << 27),
Escape = (1 << 28),
LeftShift = (1 << 29),
RightShift = (1 << 30),
FinalKey = (1 << 31),
EMU_PAUSED = (1 << 36),
F10 = (1 << 37),
F9 = (1 << 38),
F8 = (1 << 39),
F7 = (1 << 40),
F6 = (1 << 41),
F5 = (1 << 42),
F4 = (1 << 43),
F3 = (1 << 44),
F2 = (1 << 45),
F1 = (1 << 46),
UNKNOW_Q = (1 << 47),
UNKNOW_N = (1 << 48),
UNKNOW_R = (1 << 49),
UNKNOW_T = (1 << 50),
UNKNOW_M = (1 << 51),
UNKNOW_V = (1 << 52),
UNKNOW_B = (1 << 53),
//None = 0,
//P1_INSERT_COIN = 1,
//P1_GAMESTART = 2 << 1,
//P1_UP = 4,
//P1_DOWN = 8,
//P1_LEFT = 16,
//P1_RIGHT = 32,
//P1_BTN_1 = 64,
//P1_BTN_2 = 128,
//P1_BTN_3 = 256,
//P1_BTN_4 = 512,
//P1_BTN_5 = 1024,
//P1_BTN_6 = 4096,
//P1_UNKNOW_E = 8192,
//P1_UNKNOW_F,
//P2_INSERT_COIN,
//P2_GAMESTART,
//P2_UP,
//P2_DOWN,
//P2_LEFT,
//P2_RIGHT,
//P2_BTN_1,
//P2_BTN_2,
//P2_BTN_3,
//P2_BTN_4,
//P2_BTN_5,
//P2_BTN_6,
//P2_UNKNOW_E,
//P2_UNKNOW_F,
//UNKNOW_Q,
//UNKNOW_N,
//UNKNOW_R,
//UNKNOW_T,
//UNKNOW_M,
//UNKNOW_V,
//UNKNOW_B,
//F10,
//F9,
//F8,
//F7,
//F6,
//F5,
//F4,
//F3,
//F2,
//F1,
//Escape,
//LeftShift,
//RightShift,
///// <summary>
///// 用于标记最后一个
///// </summary>
//FinalKey,
//EMU_PAUSED,
}
}