实现统一的Input管理,KeyCode,Axis,Ugui虚拟按钮,做统一封装,外部不关心,另外MAME核心的Input已经换成这套
This commit is contained in:
parent
b0d1cc6131
commit
49875351c3
AxibugEmuOnline.Client/Assets/Script/AppMain
@ -22,6 +22,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
public static AppLogin login;
|
public static AppLogin login;
|
||||||
public static AppChat chat;
|
public static AppChat chat;
|
||||||
public static UserDataManager user;
|
public static UserDataManager user;
|
||||||
|
public static AppInput input;
|
||||||
public static AppEmu emu;
|
public static AppEmu emu;
|
||||||
public static HttpAPI httpAPI;
|
public static HttpAPI httpAPI;
|
||||||
public static CacheManager CacheMgr;
|
public static CacheManager CacheMgr;
|
||||||
@ -83,6 +84,7 @@ namespace AxibugEmuOnline.Client.ClientCore
|
|||||||
login = new AppLogin();
|
login = new AppLogin();
|
||||||
chat = new AppChat();
|
chat = new AppChat();
|
||||||
user = new UserDataManager();
|
user = new UserDataManager();
|
||||||
|
input = new AppInput();
|
||||||
emu = new AppEmu();
|
emu = new AppEmu();
|
||||||
httpAPI = new HttpAPI();
|
httpAPI = new HttpAPI();
|
||||||
if (bUseLocalWebApi)
|
if (bUseLocalWebApi)
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0a5208f1ea0c95b4fba6c793b1f7f3f7
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fe1927652aa0d4d46955419a18ee7802
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,54 @@
|
|||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Assets.Script.AppMain.AxiInput
|
||||||
|
{
|
||||||
|
[StructLayout(LayoutKind.Explicit, Size = 8)]
|
||||||
|
public struct AxiInput
|
||||||
|
{
|
||||||
|
[FieldOffset(0)]
|
||||||
|
public UInt64 all;
|
||||||
|
[FieldOffset(0)]
|
||||||
|
public AxiInputType type;
|
||||||
|
[FieldOffset(1)]
|
||||||
|
public KeyCode KeyCodeValue;
|
||||||
|
[FieldOffset(1)]
|
||||||
|
public AxiInputAxisType AxisType;
|
||||||
|
[FieldOffset(1)]
|
||||||
|
public AxiInputUGuiBtnType UguiBtn;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum AxiInputType : byte
|
||||||
|
{
|
||||||
|
UNITY_KEYCODE,
|
||||||
|
UNITY_AXIS,//Input.GetAxis
|
||||||
|
UNITY_UGUI_BTN,//UGUI 的BTN事件,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum AxiInputAxisType : byte
|
||||||
|
{
|
||||||
|
LEFT,
|
||||||
|
RIGHT,
|
||||||
|
UP,
|
||||||
|
DOWN,
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum AxiInputUGuiBtnType : byte
|
||||||
|
{
|
||||||
|
UP,
|
||||||
|
DOWN,
|
||||||
|
LEFT,
|
||||||
|
RIGHT,
|
||||||
|
BTN_1,
|
||||||
|
BTN_2,
|
||||||
|
BTN_3,
|
||||||
|
BTN_4,
|
||||||
|
BTN_5,
|
||||||
|
BTN_6,
|
||||||
|
POTION_1,
|
||||||
|
POTION_2,
|
||||||
|
POTION_3,
|
||||||
|
POTION_4,
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ec9c487241d75d34e9ae2ee3c047ec1b
|
@ -0,0 +1,71 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace Assets.Script.AppMain.AxiInput
|
||||||
|
{
|
||||||
|
public static class AxiInputEx
|
||||||
|
{
|
||||||
|
public static AxiInput ByKeyCode(KeyCode keycode)
|
||||||
|
{
|
||||||
|
AxiInput data = new AxiInput();
|
||||||
|
data.all = 0;
|
||||||
|
data.type = AxiInputType.UNITY_KEYCODE;
|
||||||
|
data.KeyCodeValue = keycode;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
public static AxiInput ByAxis(AxiInputAxisType axisType)
|
||||||
|
{
|
||||||
|
AxiInput data = new AxiInput();
|
||||||
|
data.all = 0;
|
||||||
|
data.type = AxiInputType.UNITY_AXIS;
|
||||||
|
data.AxisType = axisType;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
public static AxiInput ByUGUIBtn(AxiInputUGuiBtnType btnType)
|
||||||
|
{
|
||||||
|
AxiInput data = new AxiInput();
|
||||||
|
data.all = 0;
|
||||||
|
data.type = AxiInputType.UNITY_UGUI_BTN;
|
||||||
|
data.UguiBtn = btnType;
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsKeyDown(this AxiInput axiInput)
|
||||||
|
{
|
||||||
|
switch (axiInput.type)
|
||||||
|
{
|
||||||
|
case AxiInputType.UNITY_KEYCODE:
|
||||||
|
return Input.GetKeyDown(axiInput.KeyCodeValue);
|
||||||
|
case AxiInputType.UNITY_AXIS://AXIS 不考虑KeyDown情况
|
||||||
|
{
|
||||||
|
switch (axiInput.AxisType)
|
||||||
|
{
|
||||||
|
case AxiInputAxisType.RIGHT: return Input.GetAxis("Horizontal") > 0;
|
||||||
|
case AxiInputAxisType.LEFT: return Input.GetAxis("Horizontal") < 0;
|
||||||
|
case AxiInputAxisType.UP: return Input.GetAxis("Vertical") > 0;
|
||||||
|
case AxiInputAxisType.DOWN: return Input.GetAxis("Vertical") < 0;
|
||||||
|
default: return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case AxiInputType.UNITY_UGUI_BTN:
|
||||||
|
return AxiInputUGUICenter.IsKeyDown(axiInput.UguiBtn);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsKey(this AxiInput axiInput)
|
||||||
|
{
|
||||||
|
switch (axiInput.type)
|
||||||
|
{
|
||||||
|
case AxiInputType.UNITY_KEYCODE:
|
||||||
|
return Input.GetKey(axiInput.KeyCodeValue);
|
||||||
|
case AxiInputType.UNITY_AXIS://AXIS 不考虑KeyDown情况
|
||||||
|
return false;
|
||||||
|
case AxiInputType.UNITY_UGUI_BTN:
|
||||||
|
return AxiInputUGUICenter.IsKeyDown(axiInput.UguiBtn);
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f19df5371f3222747868da94fc86702f
|
@ -0,0 +1,66 @@
|
|||||||
|
using AxibugEmuOnline.Client.Manager;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Assets.Script.AppMain.AxiInput
|
||||||
|
{
|
||||||
|
public static class AxiInputUGUICenter
|
||||||
|
{
|
||||||
|
static int handleSeed = 0;
|
||||||
|
static Dictionary<int, AxiInputUGUIHandleBase> dictHandle2AxiUgui = new Dictionary<int, AxiInputUGUIHandleBase>();
|
||||||
|
static Dictionary<AxiInputUGuiBtnType, List<AxiInputUGUIHandleBase>> dictBtnType2BtnList = new Dictionary<AxiInputUGuiBtnType, List<AxiInputUGUIHandleBase>>();
|
||||||
|
|
||||||
|
public static int GetNextSeed()
|
||||||
|
{
|
||||||
|
return ++handleSeed;
|
||||||
|
}
|
||||||
|
public static void RegHandle(AxiInputUGUIHandleBase uiHandle)
|
||||||
|
{
|
||||||
|
dictHandle2AxiUgui[uiHandle.Handle] = uiHandle;
|
||||||
|
List<AxiInputUGUIHandleBase> list;
|
||||||
|
if (dictBtnType2BtnList.TryGetValue(uiHandle.UguiBtnType, out list))
|
||||||
|
list = dictBtnType2BtnList[uiHandle.UguiBtnType] = new List<AxiInputUGUIHandleBase>();
|
||||||
|
|
||||||
|
if (!list.Contains(uiHandle))
|
||||||
|
list.Add(uiHandle);
|
||||||
|
}
|
||||||
|
public static void UnregHandle(AxiInputUGUIHandleBase uiHandle)
|
||||||
|
{
|
||||||
|
if (!dictHandle2AxiUgui.ContainsKey(uiHandle.Handle))
|
||||||
|
return;
|
||||||
|
dictHandle2AxiUgui.Remove(uiHandle.Handle);
|
||||||
|
|
||||||
|
List<AxiInputUGUIHandleBase> list;
|
||||||
|
if (dictBtnType2BtnList.TryGetValue(uiHandle.UguiBtnType, out list))
|
||||||
|
{
|
||||||
|
if (list.Contains(uiHandle))
|
||||||
|
list.Remove(uiHandle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsKeyDown(AxiInputUGuiBtnType btntype)
|
||||||
|
{
|
||||||
|
List<AxiInputUGUIHandleBase> list;
|
||||||
|
if (!dictBtnType2BtnList.TryGetValue(btntype, out list))
|
||||||
|
return false;
|
||||||
|
for (int i = 0; i < list.Count; i++)
|
||||||
|
{
|
||||||
|
if (list[i].IsKeyDown())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static bool IsKey(AxiInputUGuiBtnType btntype)
|
||||||
|
{
|
||||||
|
List<AxiInputUGUIHandleBase> list;
|
||||||
|
if (!dictBtnType2BtnList.TryGetValue(btntype, out list))
|
||||||
|
return false;
|
||||||
|
for (int i = 0; i < list.Count; i++)
|
||||||
|
{
|
||||||
|
if (list[i].IsKey())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0a5bf14cd30c06b498fda45eb5f4ac2a
|
@ -0,0 +1,26 @@
|
|||||||
|
using AxibugEmuOnline.Client.Manager;
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Assets.Script.AppMain.AxiInput
|
||||||
|
{
|
||||||
|
public abstract class AxiInputUGUIHandleBase : IDisposable
|
||||||
|
{
|
||||||
|
public int Handle { get; private set; }
|
||||||
|
public AxiInputUGuiBtnType UguiBtnType { get; private set; }
|
||||||
|
|
||||||
|
public AxiInputUGUIHandleBase(AxiInputUGuiBtnType uguiBtnType)
|
||||||
|
{
|
||||||
|
|
||||||
|
Handle = AxiInputUGUICenter.GetNextSeed();
|
||||||
|
this.UguiBtnType = uguiBtnType;
|
||||||
|
AxiInputUGUICenter.RegHandle(this);
|
||||||
|
}
|
||||||
|
public abstract bool IsKeyDown();
|
||||||
|
public abstract bool IsKey();
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
AxiInputUGUICenter.UnregHandle(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c9c6bc9404053b24ba77a0f86ad1daa8
|
@ -1,12 +1,14 @@
|
|||||||
using AxibugEmuOnline.Client;
|
using AxibugEmuOnline.Client;
|
||||||
using AxibugEmuOnline.Client.ClientCore;
|
using AxibugEmuOnline.Client.ClientCore;
|
||||||
using AxibugEmuOnline.Client.Event;
|
using AxibugEmuOnline.Client.Event;
|
||||||
|
using AxibugEmuOnline.Client.Manager;
|
||||||
using AxiReplay;
|
using AxiReplay;
|
||||||
using MAME.Core;
|
using MAME.Core;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using UnityEngine;
|
using UnityEngine;
|
||||||
|
using static AxibugEmuOnline.Client.Manager.MAMEKSingleKeysSeting;
|
||||||
|
|
||||||
public class UniKeyboard : MonoBehaviour, IKeyboard
|
public class UniKeyboard : MonoBehaviour, IKeyboard
|
||||||
{
|
{
|
||||||
@ -268,9 +270,9 @@ public class MameControllerMapper : IControllerSetuper
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class MameSingleConoller : IController
|
public class MameSingleConoller : IController
|
||||||
{
|
{
|
||||||
public KeyCode INSERT_COIN, GAMESTART,
|
//public KeyCode INSERT_COIN, GAMESTART,
|
||||||
UP, DOWN, LEFT, RIGHT,
|
//UP, DOWN, LEFT, RIGHT,
|
||||||
BTN_A, BTN_B, BTN_C, BTN_D, BTN_E, BTN_F;
|
//BTN_A, BTN_B, BTN_C, BTN_D, BTN_E, BTN_F;
|
||||||
|
|
||||||
public ulong tg_INSERT_COIN, tg_GAMESTART,
|
public ulong tg_INSERT_COIN, tg_GAMESTART,
|
||||||
tg_UP, tg_DOWN, tg_LEFT, tg_RIGHT,
|
tg_UP, tg_DOWN, tg_LEFT, tg_RIGHT,
|
||||||
@ -300,7 +302,10 @@ public class MameSingleConoller : IController
|
|||||||
public int ControllerIndex
|
public int ControllerIndex
|
||||||
{
|
{
|
||||||
get { return mControllerIndex; }
|
get { return mControllerIndex; }
|
||||||
set { mControllerIndex = value; this.LoadControlKeyForConfig(); }
|
set { mControllerIndex = value;
|
||||||
|
//this.LoadControlKeyForConfig();
|
||||||
|
//走统一配置
|
||||||
|
}
|
||||||
}
|
}
|
||||||
public MameSingleConoller(int controllerIndex)
|
public MameSingleConoller(int controllerIndex)
|
||||||
{
|
{
|
||||||
@ -309,82 +314,100 @@ public class MameSingleConoller : IController
|
|||||||
|
|
||||||
public bool AnyButtonDown()
|
public bool AnyButtonDown()
|
||||||
{
|
{
|
||||||
if (Input.GetKeyDown(INSERT_COIN)) return true;
|
return App.input.mame.HadAnyKeyDown(ControllerIndex);
|
||||||
if (Input.GetKeyDown(GAMESTART)) return true;
|
//if (Input.GetKeyDown(INSERT_COIN)) return true;
|
||||||
if (Input.GetKeyDown(UP)) return true;
|
//if (Input.GetKeyDown(GAMESTART)) return true;
|
||||||
if (Input.GetKeyDown(DOWN)) return true;
|
//if (Input.GetKeyDown(UP)) return true;
|
||||||
if (Input.GetKeyDown(LEFT)) return true;
|
//if (Input.GetKeyDown(DOWN)) return true;
|
||||||
if (Input.GetKeyDown(RIGHT)) return true;
|
//if (Input.GetKeyDown(LEFT)) return true;
|
||||||
if (Input.GetKeyDown(BTN_A)) return true;
|
//if (Input.GetKeyDown(RIGHT)) return true;
|
||||||
if (Input.GetKeyDown(BTN_B)) return true;
|
//if (Input.GetKeyDown(BTN_A)) return true;
|
||||||
if (Input.GetKeyDown(BTN_C)) return true;
|
//if (Input.GetKeyDown(BTN_B)) return true;
|
||||||
if (Input.GetKeyDown(BTN_D)) return true;
|
//if (Input.GetKeyDown(BTN_C)) return true;
|
||||||
if (Input.GetKeyDown(BTN_E)) return true;
|
//if (Input.GetKeyDown(BTN_D)) return true;
|
||||||
if (Input.GetKeyDown(BTN_F)) return true;
|
//if (Input.GetKeyDown(BTN_E)) return true;
|
||||||
return false;
|
//if (Input.GetKeyDown(BTN_F)) return true;
|
||||||
|
//return false;
|
||||||
}
|
}
|
||||||
public ulong GetSingleAllInput()
|
public ulong GetSingleAllInput()
|
||||||
{
|
{
|
||||||
if (!ConnectSlot.HasValue)
|
if (!ConnectSlot.HasValue)
|
||||||
return 0;
|
return 0;
|
||||||
CurrLocalSingleAllInput = 0;
|
CurrLocalSingleAllInput = 0;
|
||||||
if (Input.GetKey(INSERT_COIN)) CurrLocalSingleAllInput |= (ulong)tg_INSERT_COIN;
|
|
||||||
if (Input.GetKey(GAMESTART)) CurrLocalSingleAllInput |= (ulong)tg_GAMESTART;
|
MAMEKSingleKeysSeting keys = App.input.mame.controllers[ControllerIndex];
|
||||||
if (Input.GetKey(UP)) CurrLocalSingleAllInput |= (ulong)tg_UP;
|
if (keys.GetKey(MAMEKSingleKey.INSERT_COIN)) CurrLocalSingleAllInput |= (ulong)tg_INSERT_COIN;
|
||||||
if (Input.GetKey(DOWN)) CurrLocalSingleAllInput |= (ulong)tg_DOWN;
|
if (keys.GetKey(MAMEKSingleKey.GAMESTART)) CurrLocalSingleAllInput |= (ulong)tg_GAMESTART;
|
||||||
if (Input.GetKey(LEFT)) CurrLocalSingleAllInput |= (ulong)tg_LEFT;
|
if (keys.GetKey(MAMEKSingleKey.UP)) CurrLocalSingleAllInput |= (ulong)tg_UP;
|
||||||
if (Input.GetKey(RIGHT)) CurrLocalSingleAllInput |= (ulong)tg_RIGHT;
|
if (keys.GetKey(MAMEKSingleKey.DOWN)) CurrLocalSingleAllInput |= (ulong)tg_DOWN;
|
||||||
if (Input.GetKey(BTN_A)) CurrLocalSingleAllInput |= (ulong)tg_BTN_A;
|
if (keys.GetKey(MAMEKSingleKey.LEFT)) CurrLocalSingleAllInput |= (ulong)tg_LEFT;
|
||||||
if (Input.GetKey(BTN_B)) CurrLocalSingleAllInput |= (ulong)tg_BTN_B;
|
if (keys.GetKey(MAMEKSingleKey.RIGHT)) CurrLocalSingleAllInput |= (ulong)tg_RIGHT;
|
||||||
if (Input.GetKey(BTN_C)) CurrLocalSingleAllInput |= (ulong)tg_BTN_C;
|
if (keys.GetKey(MAMEKSingleKey.BTN_A)) CurrLocalSingleAllInput |= (ulong)tg_BTN_A;
|
||||||
if (Input.GetKey(BTN_D)) CurrLocalSingleAllInput |= (ulong)tg_BTN_D;
|
if (keys.GetKey(MAMEKSingleKey.BTN_B)) CurrLocalSingleAllInput |= (ulong)tg_BTN_B;
|
||||||
if (Input.GetKey(BTN_E)) CurrLocalSingleAllInput |= (ulong)tg_BTN_E;
|
if (keys.GetKey(MAMEKSingleKey.BTN_C)) CurrLocalSingleAllInput |= (ulong)tg_BTN_C;
|
||||||
if (Input.GetKey(BTN_F)) CurrLocalSingleAllInput |= (ulong)tg_BTN_F;
|
if (keys.GetKey(MAMEKSingleKey.BTN_D)) CurrLocalSingleAllInput |= (ulong)tg_BTN_D;
|
||||||
|
if (keys.GetKey(MAMEKSingleKey.BTN_E)) CurrLocalSingleAllInput |= (ulong)tg_BTN_E;
|
||||||
|
if (keys.GetKey(MAMEKSingleKey.BTN_F)) CurrLocalSingleAllInput |= (ulong)tg_BTN_F;
|
||||||
|
|
||||||
|
//if (Input.GetKey(INSERT_COIN)) CurrLocalSingleAllInput |= (ulong)tg_INSERT_COIN;
|
||||||
|
//if (Input.GetKey(GAMESTART)) CurrLocalSingleAllInput |= (ulong)tg_GAMESTART;
|
||||||
|
//if (Input.GetKey(UP)) CurrLocalSingleAllInput |= (ulong)tg_UP;
|
||||||
|
//if (Input.GetKey(DOWN)) CurrLocalSingleAllInput |= (ulong)tg_DOWN;
|
||||||
|
//if (Input.GetKey(LEFT)) CurrLocalSingleAllInput |= (ulong)tg_LEFT;
|
||||||
|
//if (Input.GetKey(RIGHT)) CurrLocalSingleAllInput |= (ulong)tg_RIGHT;
|
||||||
|
//if (Input.GetKey(BTN_A)) CurrLocalSingleAllInput |= (ulong)tg_BTN_A;
|
||||||
|
//if (Input.GetKey(BTN_B)) CurrLocalSingleAllInput |= (ulong)tg_BTN_B;
|
||||||
|
//if (Input.GetKey(BTN_C)) CurrLocalSingleAllInput |= (ulong)tg_BTN_C;
|
||||||
|
//if (Input.GetKey(BTN_D)) CurrLocalSingleAllInput |= (ulong)tg_BTN_D;
|
||||||
|
//if (Input.GetKey(BTN_E)) CurrLocalSingleAllInput |= (ulong)tg_BTN_E;
|
||||||
|
//if (Input.GetKey(BTN_F)) CurrLocalSingleAllInput |= (ulong)tg_BTN_F;
|
||||||
|
|
||||||
return CurrLocalSingleAllInput;
|
return CurrLocalSingleAllInput;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
public static class MameSingleControllSetter
|
public static class MameSingleControllSetter
|
||||||
{
|
{
|
||||||
public static void LoadControlKeyForConfig(this MameSingleConoller singlecontrol)
|
//不再需要
|
||||||
{
|
//public static void LoadControlKeyForConfig(this MameSingleConoller singlecontrol)
|
||||||
//TODO µÈ´ýÖ§³ÖÅäÖ㬻òͳһ
|
//{
|
||||||
switch (singlecontrol.ControllerIndex)
|
// //TODO 等待支持配置,或统一
|
||||||
{
|
// switch (singlecontrol.ControllerIndex)
|
||||||
case 0:
|
// {
|
||||||
singlecontrol.INSERT_COIN = KeyCode.Alpha5;
|
// case 0:
|
||||||
singlecontrol.GAMESTART = KeyCode.Alpha1;
|
// singlecontrol.INSERT_COIN = KeyCode.Alpha5;
|
||||||
singlecontrol.UP = KeyCode.W;
|
// singlecontrol.GAMESTART = KeyCode.Alpha1;
|
||||||
singlecontrol.DOWN = KeyCode.S;
|
// singlecontrol.UP = KeyCode.W;
|
||||||
singlecontrol.LEFT = KeyCode.A;
|
// singlecontrol.DOWN = KeyCode.S;
|
||||||
singlecontrol.RIGHT = KeyCode.D;
|
// singlecontrol.LEFT = KeyCode.A;
|
||||||
singlecontrol.BTN_A = KeyCode.J;
|
// singlecontrol.RIGHT = KeyCode.D;
|
||||||
singlecontrol.BTN_B = KeyCode.K;
|
// singlecontrol.BTN_A = KeyCode.J;
|
||||||
singlecontrol.BTN_C = KeyCode.L;
|
// singlecontrol.BTN_B = KeyCode.K;
|
||||||
singlecontrol.BTN_D = KeyCode.U;
|
// singlecontrol.BTN_C = KeyCode.L;
|
||||||
singlecontrol.BTN_E = KeyCode.I;
|
// singlecontrol.BTN_D = KeyCode.U;
|
||||||
singlecontrol.BTN_F = KeyCode.O;
|
// singlecontrol.BTN_E = KeyCode.I;
|
||||||
break;
|
// singlecontrol.BTN_F = KeyCode.O;
|
||||||
case 1:
|
// break;
|
||||||
singlecontrol.INSERT_COIN = KeyCode.KeypadMultiply;
|
// case 1:
|
||||||
singlecontrol.GAMESTART = KeyCode.KeypadDivide;
|
// singlecontrol.INSERT_COIN = KeyCode.KeypadMultiply;
|
||||||
singlecontrol.UP = KeyCode.UpArrow;
|
// singlecontrol.GAMESTART = KeyCode.KeypadDivide;
|
||||||
singlecontrol.DOWN = KeyCode.DownArrow;
|
// singlecontrol.UP = KeyCode.UpArrow;
|
||||||
singlecontrol.LEFT = KeyCode.LeftArrow;
|
// singlecontrol.DOWN = KeyCode.DownArrow;
|
||||||
singlecontrol.RIGHT = KeyCode.RightArrow;
|
// singlecontrol.LEFT = KeyCode.LeftArrow;
|
||||||
singlecontrol.BTN_A = KeyCode.Keypad1;
|
// singlecontrol.RIGHT = KeyCode.RightArrow;
|
||||||
singlecontrol.BTN_B = KeyCode.Keypad2;
|
// singlecontrol.BTN_A = KeyCode.Keypad1;
|
||||||
singlecontrol.BTN_C = KeyCode.Keypad3;
|
// singlecontrol.BTN_B = KeyCode.Keypad2;
|
||||||
singlecontrol.BTN_D = KeyCode.Keypad4;
|
// singlecontrol.BTN_C = KeyCode.Keypad3;
|
||||||
singlecontrol.BTN_E = KeyCode.Keypad5;
|
// singlecontrol.BTN_D = KeyCode.Keypad4;
|
||||||
singlecontrol.BTN_F = KeyCode.Keypad6;
|
// singlecontrol.BTN_E = KeyCode.Keypad5;
|
||||||
break;
|
// singlecontrol.BTN_F = KeyCode.Keypad6;
|
||||||
case 2:
|
// break;
|
||||||
break;
|
// case 2:
|
||||||
case 3:
|
// break;
|
||||||
break;
|
// case 3:
|
||||||
}
|
// break;
|
||||||
}
|
// }
|
||||||
|
//}
|
||||||
public static void ResetTargetMotionKey(this MameSingleConoller singlecontrol)
|
public static void ResetTargetMotionKey(this MameSingleConoller singlecontrol)
|
||||||
{
|
{
|
||||||
if (!singlecontrol.ConnectSlot.HasValue)
|
if (!singlecontrol.ConnectSlot.HasValue)
|
||||||
|
211
AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppInput.cs
Normal file
211
AxibugEmuOnline.Client/Assets/Script/AppMain/Manager/AppInput.cs
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
using Assets.Script.AppMain.AxiInput;
|
||||||
|
using AxibugEmuOnline.Client.Common;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using static AxibugEmuOnline.Client.Manager.MAMEKSingleKeysSeting;
|
||||||
|
|
||||||
|
namespace AxibugEmuOnline.Client.Manager
|
||||||
|
{
|
||||||
|
public class AppInput
|
||||||
|
{
|
||||||
|
public MAMEKMultiKeysSetting mame;
|
||||||
|
public AppInput()
|
||||||
|
{
|
||||||
|
mame = new MAMEKMultiKeysSetting();
|
||||||
|
LoadDefaultSetting();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadDefaultSetting()
|
||||||
|
{
|
||||||
|
mame.LoadDefaultSetting();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface MultiKeysSetting
|
||||||
|
{
|
||||||
|
bool HadAnyKeyDown(int index);
|
||||||
|
void ClearAll();
|
||||||
|
void LoadDefaultSetting();
|
||||||
|
}
|
||||||
|
|
||||||
|
public interface SingleKeysSetting
|
||||||
|
{
|
||||||
|
void ClearAll();
|
||||||
|
void SetKey(ulong Key, AxiInput input);
|
||||||
|
void ColletAllKey();
|
||||||
|
bool HadAnyKeyDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MAMEKMultiKeysSetting : MultiKeysSetting
|
||||||
|
{
|
||||||
|
public MAMEKSingleKeysSeting[] controllers;
|
||||||
|
|
||||||
|
public MAMEKMultiKeysSetting()
|
||||||
|
{
|
||||||
|
controllers = new MAMEKSingleKeysSeting[4];
|
||||||
|
for (int i = 0; i < controllers.Length; i++)
|
||||||
|
controllers[i] = new MAMEKSingleKeysSeting();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HadAnyKeyDown(int index)
|
||||||
|
{
|
||||||
|
if (index >= controllers.Length)
|
||||||
|
return false;
|
||||||
|
return controllers[index].HadAnyKeyDown();
|
||||||
|
}
|
||||||
|
public void ClearAll()
|
||||||
|
{
|
||||||
|
controllers[0].ClearAll();
|
||||||
|
controllers[1].ClearAll();
|
||||||
|
controllers[2].ClearAll();
|
||||||
|
controllers[3].ClearAll();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void LoadDefaultSetting()
|
||||||
|
{
|
||||||
|
ClearAll();
|
||||||
|
#if UNITY_PSP2 && !UNITY_EDITOR
|
||||||
|
//PSV 摇杆
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.GAMESTART, AxiInputEx.ByKeyCode(PSVitaKey.Start));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.INSERT_COIN, AxiInputEx.ByKeyCode(PSVitaKey.Select));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.UP, AxiInputEx.ByKeyCode(PSVitaKey.Up));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.DOWN, AxiInputEx.ByKeyCode(PSVitaKey.Down));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.LEFT, AxiInputEx.ByKeyCode(PSVitaKey.Left));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.RIGHT, AxiInputEx.ByKeyCode(PSVitaKey.Right));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_A, AxiInputEx.ByKeyCode(PSVitaKey.Block));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_B, AxiInputEx.ByKeyCode(PSVitaKey.Cross));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_C, AxiInputEx.ByKeyCode(PSVitaKey.Circle));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_D, AxiInputEx.ByKeyCode(PSVitaKey.Triangle));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_E, AxiInputEx.ByKeyCode(PSVitaKey.L));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_F, AxiInputEx.ByKeyCode(PSVitaKey.R));
|
||||||
|
//PSV 摇杆
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.UP, AxiInputEx.ByAxis(AxiInputAxisType.UP));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.DOWN, AxiInputEx.ByAxis(AxiInputAxisType.DOWN));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.LEFT, AxiInputEx.ByAxis(AxiInputAxisType.LEFT));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.RIGHT, AxiInputEx.ByAxis(AxiInputAxisType.RIGHT));
|
||||||
|
controllers[0].ColletAllKey();
|
||||||
|
return;
|
||||||
|
#endif
|
||||||
|
#region P1
|
||||||
|
//P1 键盘
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.GAMESTART, AxiInputEx.ByKeyCode(KeyCode.Alpha1));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.INSERT_COIN, AxiInputEx.ByKeyCode(KeyCode.Alpha5));
|
||||||
|
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.UP, AxiInputEx.ByKeyCode(KeyCode.W));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.DOWN, AxiInputEx.ByKeyCode(KeyCode.S));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.LEFT, AxiInputEx.ByKeyCode(KeyCode.A));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.RIGHT, AxiInputEx.ByKeyCode(KeyCode.D));
|
||||||
|
|
||||||
|
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.UP, AxiInputEx.ByKeyCode(KeyCode.G));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.DOWN, AxiInputEx.ByKeyCode(KeyCode.V));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.LEFT, AxiInputEx.ByKeyCode(KeyCode.C));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.RIGHT, AxiInputEx.ByKeyCode(KeyCode.B));
|
||||||
|
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_A, AxiInputEx.ByKeyCode(KeyCode.J));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_B, AxiInputEx.ByKeyCode(KeyCode.K));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_C, AxiInputEx.ByKeyCode(KeyCode.L));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_D, AxiInputEx.ByKeyCode(KeyCode.U));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_E, AxiInputEx.ByKeyCode(KeyCode.I));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_F, AxiInputEx.ByKeyCode(KeyCode.O));
|
||||||
|
|
||||||
|
//Axis
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.UP, AxiInputEx.ByAxis(AxiInputAxisType.UP));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.DOWN, AxiInputEx.ByAxis(AxiInputAxisType.DOWN));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.LEFT, AxiInputEx.ByAxis(AxiInputAxisType.LEFT));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.RIGHT, AxiInputEx.ByAxis(AxiInputAxisType.RIGHT));
|
||||||
|
|
||||||
|
//P1 UGUI
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.GAMESTART, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.POTION_1));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.INSERT_COIN, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.POTION_2));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.UP, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.UP));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.DOWN, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.DOWN));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.LEFT, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.LEFT));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.RIGHT, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.RIGHT));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_A, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.BTN_1));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_B, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.BTN_2));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_C, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.BTN_3));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_D, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.BTN_4));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_E, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.BTN_5));
|
||||||
|
controllers[0].SetKey((ulong)MAMEKSingleKey.BTN_F, AxiInputEx.ByUGUIBtn(AxiInputUGuiBtnType.BTN_6));
|
||||||
|
|
||||||
|
controllers[0].ColletAllKey();
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class MAMEKSingleKeysSeting : SingleKeysSetting
|
||||||
|
{
|
||||||
|
public enum MAMEKSingleKey
|
||||||
|
{
|
||||||
|
INSERT_COIN,
|
||||||
|
GAMESTART,
|
||||||
|
UP,
|
||||||
|
DOWN,
|
||||||
|
LEFT,
|
||||||
|
RIGHT,
|
||||||
|
BTN_A,
|
||||||
|
BTN_B,
|
||||||
|
BTN_C,
|
||||||
|
BTN_D,
|
||||||
|
BTN_E,
|
||||||
|
BTN_F
|
||||||
|
}
|
||||||
|
|
||||||
|
Dictionary<MAMEKSingleKey, List<AxiInput>> DictSkey2AxiInput = new Dictionary<MAMEKSingleKey, List<AxiInput>>();
|
||||||
|
AxiInput[] AxiInputArr = null;
|
||||||
|
|
||||||
|
public void SetKey(ulong Key, AxiInput input)
|
||||||
|
{
|
||||||
|
List<AxiInput> list;
|
||||||
|
if (!DictSkey2AxiInput.TryGetValue((MAMEKSingleKey)Key, out list))
|
||||||
|
list = DictSkey2AxiInput[(MAMEKSingleKey)Key] = ObjectPoolAuto.AcquireList<AxiInput>();
|
||||||
|
list.Add(input);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetKey(MAMEKSingleKey Key)
|
||||||
|
{
|
||||||
|
List<AxiInput> list;
|
||||||
|
if (!DictSkey2AxiInput.TryGetValue(Key, out list))
|
||||||
|
return false;
|
||||||
|
for (int i = 0; i < list.Count; i++)
|
||||||
|
{
|
||||||
|
if (list[i].IsKey())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearAll()
|
||||||
|
{
|
||||||
|
foreach (List<AxiInput> singlelist in DictSkey2AxiInput.Values)
|
||||||
|
ObjectPoolAuto.Release(singlelist);
|
||||||
|
DictSkey2AxiInput.Clear();
|
||||||
|
AxiInputArr = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ColletAllKey()
|
||||||
|
{
|
||||||
|
List<AxiInput> list = ObjectPoolAuto.AcquireList<AxiInput>();
|
||||||
|
foreach (List<AxiInput> singlelist in DictSkey2AxiInput.Values)
|
||||||
|
list.AddRange(singlelist);
|
||||||
|
AxiInputArr = list.ToArray();
|
||||||
|
ObjectPoolAuto.Release(list);
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool HadAnyKeyDown()
|
||||||
|
{
|
||||||
|
if (AxiInputArr == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
for (int i = 0; AxiInputArr.Length > 0; i++)
|
||||||
|
{
|
||||||
|
if (AxiInputArr[i].IsKey())
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5c0bc1cf4f411aa4da3ffa218db2c2aa
|
Loading…
Reference in New Issue
Block a user