2025-01-07 17:01:37 +08:00
|
|
|
|
using System.Collections.Generic;
|
2025-01-03 19:53:38 +08:00
|
|
|
|
using System.Linq;
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
|
|
public class KeyCodeCore
|
|
|
|
|
{
|
|
|
|
|
public Dictionary<KeyCode, MotionKey> dictKeyCfgs = new Dictionary<KeyCode, MotionKey>();
|
|
|
|
|
public KeyCode[] CheckList;
|
|
|
|
|
public MotionKey[] mCurrKey = new MotionKey[0];
|
|
|
|
|
//public ulong CurryInpuAllData = 0;
|
|
|
|
|
List<MotionKey> temp = new List<MotionKey>();
|
|
|
|
|
ulong tempInputAllData = 0;
|
|
|
|
|
UniKeyboard mUniKeyboard;
|
|
|
|
|
//bool bReplayMode;
|
|
|
|
|
//List<MotionKey> ReplayCheckKey = new List<MotionKey>();
|
|
|
|
|
|
|
|
|
|
ulong last_CurryInpuAllData_test = 0;
|
|
|
|
|
|
|
|
|
|
public MotionKey[] GetPressedKeys()
|
|
|
|
|
{
|
|
|
|
|
return mCurrKey;
|
|
|
|
|
|
|
|
|
|
// if (!bReplayMode)
|
|
|
|
|
// {
|
|
|
|
|
// //UMAME.instance.mReplayWriter.NextFramebyFrameIdx((int)UMAME.instance.mUniVideoPlayer.mFrame, CurryInpuAllData);
|
|
|
|
|
// UMAME.instance.mReplayWriter.NextFramebyFrameIdx((int)UMAME.instance.mUniVideoPlayer.mFrame, CurryInpuAllData);
|
|
|
|
|
|
|
|
|
|
//#if UNITY_EDITOR
|
|
|
|
|
// if (last_CurryInpuAllData_test != CurryInpuAllData)
|
|
|
|
|
// {
|
|
|
|
|
// last_CurryInpuAllData_test = CurryInpuAllData;
|
|
|
|
|
// string TempStr = "";
|
|
|
|
|
// foreach (var item in mCurrKey)
|
|
|
|
|
// {
|
|
|
|
|
// TempStr += $"{item.ToString()}|";
|
|
|
|
|
// }
|
|
|
|
|
// if (!string.IsNullOrEmpty(TempStr))
|
|
|
|
|
// Debug.Log($"{UMAME.instance.mUniVideoPlayer.mFrame} | Input-> {TempStr}");
|
|
|
|
|
// else
|
|
|
|
|
// Debug.Log($"{UMAME.instance.mUniVideoPlayer.mFrame} | Input-> 0");
|
|
|
|
|
// }
|
|
|
|
|
//#endif
|
|
|
|
|
// return mCurrKey;
|
|
|
|
|
// }
|
|
|
|
|
// else
|
|
|
|
|
// {
|
|
|
|
|
// //有变化
|
|
|
|
|
|
|
|
|
|
// //if (UMAME.instance.mReplayReader.NextFrame(out AxiReplay.ReplayStep stepData))
|
|
|
|
|
// if (UMAME.instance.mReplayReader.NextFramebyFrameIdx((int)UMAME.instance.mUniVideoPlayer.mFrame, out AxiReplay.ReplayStep stepData))
|
|
|
|
|
// {
|
|
|
|
|
// temp.Clear();
|
|
|
|
|
// //有数据
|
|
|
|
|
// for (int i = 0; i < ReplayCheckKey.Count; i++)
|
|
|
|
|
// {
|
|
|
|
|
// if ((stepData.InPut & (ulong)ReplayCheckKey[i]) > 0)
|
|
|
|
|
// temp.Add(ReplayCheckKey[i]);
|
|
|
|
|
// }
|
|
|
|
|
// mCurrKey = temp.ToArray();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//#if UNITY_EDITOR
|
|
|
|
|
// string TempStr = "";
|
|
|
|
|
// foreach (var item in mCurrKey)
|
|
|
|
|
// {
|
|
|
|
|
// TempStr += $"{item.ToString()}|";
|
|
|
|
|
// }
|
|
|
|
|
// if (!string.IsNullOrEmpty(TempStr))
|
|
|
|
|
// Debug.Log($"{UMAME.instance.mUniVideoPlayer.mFrame} | Input-> {TempStr}");
|
|
|
|
|
// else
|
|
|
|
|
// Debug.Log($"{UMAME.instance.mUniVideoPlayer.mFrame} | Input-> 0");
|
|
|
|
|
//#endif
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// return mCurrKey;
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void SetRePlay(bool IsReplay)
|
|
|
|
|
{
|
|
|
|
|
//bReplayMode = IsReplay;
|
|
|
|
|
}
|
|
|
|
|
public void Init(Essgee.Emulation.Machines.IMachine Machine, UniKeyboard uniKeyboard, bool IsReplay)
|
|
|
|
|
{
|
|
|
|
|
//bReplayMode = IsReplay;
|
|
|
|
|
mUniKeyboard = uniKeyboard;
|
|
|
|
|
//foreach (MotionKey mkey in Enum.GetValues(typeof(MotionKey)))
|
|
|
|
|
//{
|
|
|
|
|
// ReplayCheckKey.Add(mkey);
|
|
|
|
|
//}
|
|
|
|
|
dictKeyCfgs.Clear();
|
|
|
|
|
//dictKeyCfgs.Add(KeyCode.P, MotionKey.EMU_PAUSED);
|
|
|
|
|
if (Machine is Essgee.Emulation.Machines.MasterSystem)
|
|
|
|
|
{
|
|
|
|
|
var machine = (Essgee.Emulation.Machines.MasterSystem)Machine;
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.W, machine.configuration.Joypad1Up);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.S, machine.configuration.Joypad1Down);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.A, machine.configuration.Joypad1Left);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.D, machine.configuration.Joypad1Right);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.J, machine.configuration.Joypad1Button1);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.K, machine.configuration.Joypad1Button2);
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.UpArrow, machine.configuration.Joypad2Up);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.DownArrow, machine.configuration.Joypad2Down);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.LeftArrow, machine.configuration.Joypad2Left);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.RightAlt, machine.configuration.Joypad2Right);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Alpha1, machine.configuration.Joypad2Button1);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Alpha2, machine.configuration.Joypad2Button2);
|
|
|
|
|
}
|
|
|
|
|
else if (Machine is Essgee.Emulation.Machines.GameBoy)
|
|
|
|
|
{
|
|
|
|
|
var machine = (Essgee.Emulation.Machines.GameBoy)Machine;
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.W, machine.configuration.ControlsUp);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.S, machine.configuration.ControlsDown);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.A, machine.configuration.ControlsLeft);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.D, machine.configuration.ControlsRight);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.J, machine.configuration.ControlsB);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.K, machine.configuration.ControlsA);
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Return, machine.configuration.ControlsStart);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.RightShift, machine.configuration.ControlsSelect);
|
|
|
|
|
}
|
2025-01-07 11:04:34 +08:00
|
|
|
|
else if (Machine is Essgee.Emulation.Machines.GameBoyColor)
|
|
|
|
|
{
|
|
|
|
|
var machine = (Essgee.Emulation.Machines.GameBoyColor)Machine;
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.W, machine.configuration.ControlsUp);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.S, machine.configuration.ControlsDown);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.A, machine.configuration.ControlsLeft);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.D, machine.configuration.ControlsRight);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.J, machine.configuration.ControlsB);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.K, machine.configuration.ControlsA);
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Return, machine.configuration.ControlsStart);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.RightShift, machine.configuration.ControlsSelect);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Space, machine.configuration.ControlsSendIR);
|
|
|
|
|
}
|
|
|
|
|
else if (Machine is Essgee.Emulation.Machines.GameGear)
|
|
|
|
|
{
|
|
|
|
|
var machine = (Essgee.Emulation.Machines.GameGear)Machine;
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.W, machine.configuration.ControlsUp);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.S, machine.configuration.ControlsDown);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.A, machine.configuration.ControlsLeft);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.D, machine.configuration.ControlsRight);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.J, machine.configuration.ControlsButton2);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.K, machine.configuration.ControlsButton1);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Return, machine.configuration.ControlsStart);
|
|
|
|
|
}
|
|
|
|
|
else if (Machine is Essgee.Emulation.Machines.SC3000)
|
|
|
|
|
{
|
|
|
|
|
var machine = (Essgee.Emulation.Machines.SC3000)Machine;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* InputReset = MotionKey.F12;
|
|
|
|
|
InputChangeMode = MotionKey.F1;
|
|
|
|
|
InputPlayTape = MotionKey.F2;
|
|
|
|
|
|
|
|
|
|
Joypad1Up = MotionKey.Up;
|
|
|
|
|
Joypad1Down = MotionKey.Down;
|
|
|
|
|
Joypad1Left = MotionKey.Left;
|
|
|
|
|
Joypad1Right = MotionKey.Right;
|
|
|
|
|
Joypad1Button1 = MotionKey.A;
|
|
|
|
|
Joypad1Button2 = MotionKey.S;
|
|
|
|
|
|
|
|
|
|
Joypad2Up = MotionKey.NumPad8;
|
|
|
|
|
Joypad2Down = MotionKey.NumPad2;
|
|
|
|
|
Joypad2Left = MotionKey.NumPad4;
|
|
|
|
|
Joypad2Right = MotionKey.NumPad6;
|
|
|
|
|
Joypad2Button1 = MotionKey.NumPad1;
|
|
|
|
|
Joypad2Button2 = MotionKey.NumPad3;
|
|
|
|
|
*/
|
|
|
|
|
|
2025-01-07 17:01:37 +08:00
|
|
|
|
//dictKeyCfgs.Add(KeyCode.F12, machine.configuration.InputReset);
|
2025-01-07 11:04:34 +08:00
|
|
|
|
dictKeyCfgs.Add(KeyCode.F1, machine.configuration.InputChangeMode);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.F2, machine.configuration.InputPlayTape);
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.W, machine.configuration.Joypad1Up);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.S, machine.configuration.Joypad1Down);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.A, machine.configuration.Joypad1Left);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.D, machine.configuration.Joypad1Right);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.J, machine.configuration.Joypad1Button2);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.K, machine.configuration.Joypad1Button1);
|
2025-01-03 19:53:38 +08:00
|
|
|
|
|
2025-01-07 11:04:34 +08:00
|
|
|
|
dictKeyCfgs.Add(KeyCode.UpArrow, machine.configuration.Joypad2Up);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.DownArrow, machine.configuration.Joypad2Down);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.LeftArrow, machine.configuration.Joypad2Left);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.RightAlt, machine.configuration.Joypad2Right);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Alpha1, machine.configuration.Joypad2Button1);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Alpha2, machine.configuration.Joypad2Button2);
|
|
|
|
|
}
|
|
|
|
|
else if (Machine is Essgee.Emulation.Machines.SG1000)
|
|
|
|
|
{
|
|
|
|
|
var machine = (Essgee.Emulation.Machines.SG1000)Machine;
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
TVStandard = TVStandard.NTSC;
|
|
|
|
|
|
|
|
|
|
InputPause = MotionKey.Space;
|
|
|
|
|
|
|
|
|
|
Joypad1Up = MotionKey.Up;
|
|
|
|
|
Joypad1Down = MotionKey.Down;
|
|
|
|
|
Joypad1Left = MotionKey.Left;
|
|
|
|
|
Joypad1Right = MotionKey.Right;
|
|
|
|
|
Joypad1Button1 = MotionKey.A;
|
|
|
|
|
Joypad1Button2 = MotionKey.S;
|
|
|
|
|
|
|
|
|
|
Joypad2Up = MotionKey.NumPad8;
|
|
|
|
|
Joypad2Down = MotionKey.NumPad2;
|
|
|
|
|
Joypad2Left = MotionKey.NumPad4;
|
|
|
|
|
Joypad2Right = MotionKey.NumPad6;
|
|
|
|
|
Joypad2Button1 = MotionKey.NumPad1;
|
|
|
|
|
Joypad2Button2 = MotionKey.NumPad3;
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.W, machine.configuration.Joypad1Up);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.S, machine.configuration.Joypad1Down);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.A, machine.configuration.Joypad1Left);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.D, machine.configuration.Joypad1Right);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.J, machine.configuration.Joypad1Button2);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.K, machine.configuration.Joypad1Button1);
|
|
|
|
|
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.UpArrow, machine.configuration.Joypad2Up);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.DownArrow, machine.configuration.Joypad2Down);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.LeftArrow, machine.configuration.Joypad2Left);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.RightAlt, machine.configuration.Joypad2Right);
|
2025-01-07 17:01:37 +08:00
|
|
|
|
dictKeyCfgs.Add(KeyCode.Alpha1, machine.configuration.Joypad2Button2);
|
|
|
|
|
dictKeyCfgs.Add(KeyCode.Alpha2, machine.configuration.Joypad2Button1);
|
2025-01-07 11:04:34 +08:00
|
|
|
|
}
|
2025-01-03 19:53:38 +08:00
|
|
|
|
CheckList = dictKeyCfgs.Keys.ToArray();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//mUniKeyboard.btnP1.Key = new long[] { (long)MotionKey.P1_GAMESTART };
|
|
|
|
|
//mUniKeyboard.btnCoin1.Key = new long[] { (long)MotionKey.P1_INSERT_COIN };
|
|
|
|
|
//mUniKeyboard.btnA.Key = new long[] { (long)MotionKey.P1_BTN_1 };
|
|
|
|
|
//mUniKeyboard.btnB.Key = new long[] { (long)MotionKey.P1_BTN_2 };
|
|
|
|
|
//mUniKeyboard.btnC.Key = new long[] { (long)MotionKey.P1_BTN_3 };
|
|
|
|
|
//mUniKeyboard.btnD.Key = new long[] { (long)MotionKey.P1_BTN_4 };
|
|
|
|
|
////mUniKeyboard.btnE.Key = new long[] { (long)MotionKey.P1_BTN_5 };
|
|
|
|
|
////mUniKeyboard.btnF.Key = new long[] { (long)MotionKey.P1_BTN_6 };
|
|
|
|
|
//mUniKeyboard.btnAB.Key = new long[] { (long)MotionKey.P1_BTN_1, (long)MotionKey.P1_BTN_2 };
|
|
|
|
|
//mUniKeyboard.btnCD.Key = new long[] { (long)MotionKey.P1_BTN_3, (long)MotionKey.P1_BTN_4 };
|
|
|
|
|
//mUniKeyboard.btnABC.Key = new long[] { (long)MotionKey.P1_BTN_1, (long)MotionKey.P1_BTN_2, (long)MotionKey.P1_BTN_3 };
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void UpdateLogic()
|
|
|
|
|
{
|
|
|
|
|
//if (bReplayMode) return;
|
|
|
|
|
tempInputAllData = 0;
|
|
|
|
|
temp.Clear();
|
|
|
|
|
for (int i = 0; i < CheckList.Length; i++)
|
|
|
|
|
{
|
|
|
|
|
if (Input.GetKey(CheckList[i]))
|
|
|
|
|
{
|
|
|
|
|
MotionKey mk = dictKeyCfgs[CheckList[i]];
|
|
|
|
|
temp.Add(mk);
|
|
|
|
|
tempInputAllData |= (ulong)mk;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//for (int i = 0; i < mUniKeyboard.mUIBtns.Count; i++)
|
|
|
|
|
//{
|
|
|
|
|
// if (mUniKeyboard.mUIBtns[i].bHotKey)
|
|
|
|
|
// {
|
|
|
|
|
// for (int j = 0; j < mUniKeyboard.mUIBtns[i].Key.Length; j++)
|
|
|
|
|
// {
|
|
|
|
|
// MotionKey mk = (MotionKey)mUniKeyboard.mUIBtns[i].Key[j];
|
|
|
|
|
// temp.Add(mk);
|
|
|
|
|
// tempInputAllData |= (ulong)mk;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
//Vector2Int inputV2 = mUniKeyboard.mJoystick.RawInputV2;
|
|
|
|
|
////Debug.Log($"{inputV2.x},{inputV2.y}");
|
|
|
|
|
//if (inputV2.x > 0)
|
|
|
|
|
//{
|
|
|
|
|
// temp.Add(MotionKey.P1_RIGHT);
|
|
|
|
|
// tempInputAllData |= (ulong)MotionKey.P1_RIGHT;
|
|
|
|
|
//}
|
|
|
|
|
//else if (inputV2.x < 0)
|
|
|
|
|
//{
|
|
|
|
|
// temp.Add(MotionKey.P1_LEFT);
|
|
|
|
|
// tempInputAllData |= (ulong)MotionKey.P1_LEFT;
|
|
|
|
|
//}
|
|
|
|
|
//if (inputV2.y > 0)
|
|
|
|
|
//{
|
|
|
|
|
// temp.Add(MotionKey.P1_UP);
|
|
|
|
|
// tempInputAllData |= (ulong)MotionKey.P1_UP;
|
|
|
|
|
//}
|
|
|
|
|
//else if (inputV2.y < 0)
|
|
|
|
|
//{
|
|
|
|
|
// temp.Add(MotionKey.P1_DOWN);
|
|
|
|
|
// tempInputAllData |= (ulong)MotionKey.P1_DOWN;
|
|
|
|
|
//}
|
|
|
|
|
//CurryInpuAllData = tempInputAllData;
|
|
|
|
|
mCurrKey = temp.ToArray();
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|