using System.Collections.Generic; using UnityEngine; namespace AxibugEmuOnline.Client.InputDevices { public abstract class InputResolver { public static InputResolver Create() { #if ENABLE_INPUT_SYSTEM //InputSystem return new InputSystemResolver(); #elif UNITY_PSP2 //SDK throw new System.NotImplementedException(); #elif UNITY_PS3 //SDK throw new System.NotImplementedException(); #else //使用旧Input throw new System.NotImplementedException(); #endif } /// <summary> 禁止外部构造 </summary> protected InputResolver() { OnInit(); } protected abstract void OnInit(); /// <summary> /// 获得所有当前已连入的输入设备 /// </summary> /// <returns></returns> public abstract IEnumerable<InputDevice> GetDevices(); /// <summary> /// 检查指定输入设备是否还保持着连接 /// </summary> /// <returns></returns> public abstract bool CheckOnline(InputDevice device); /// <param name="lostDevice">丢失的设备</param> public delegate void OnDeviceLostHandle(InputDevice lostDevice); /// <summary> 当设备丢失时触发 </summary> public event OnDeviceLostHandle OnDeviceLost; protected void RaiseDeviceLost(InputDevice lostDevice) { OnDeviceLost?.Invoke(lostDevice); } /// <param name="connectDevice">建立连接的设备</param> public delegate void OnDeviceConnectedHandle(InputDevice connectDevice); /// <summary> 当设备连接时触发 </summary> public event OnDeviceConnectedHandle OnDeviceConnected; protected void RaiseDeviceConnected(InputDevice connectDevice) { OnDeviceConnected?.Invoke(connectDevice); } /// <summary> /// 获取一个键盘设备的指定按键当前调用帧是否触发了按下动作 /// </summary> /// <param name="keyboard">键盘设备实例,来自Resolver提供的设备实例</param> /// <param name="key">键盘按键枚举值</param> /// <returns></returns> public abstract bool GetKeyDown(KeyBoard keyboard, KeyCode key); /// <summary> /// 获取一个键盘设备的指定按键当前调用帧是否触发了放开动作 /// </summary> /// <param name="keyboard">键盘设备实例,来自Resolver提供的设备实例</param> /// <param name="key">键盘按键枚举值</param> public abstract bool GetKeyUp(KeyBoard keyboard, KeyCode key); /// <summary> /// 获取一个键盘设备的指定按键当前调用帧是否处于按下状态 /// </summary> /// <param name="keyboard">键盘设备实例,来自Resolver提供的设备实例</param> /// <param name="key">键盘按键枚举值</param> public abstract bool GetKey(KeyBoard keyboard, KeyCode key); } }