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 ForInputSystem.InputSystemResolver();
#elif UNITY_PSP2 //特化实现
return new ForPSV.PSVResolver();
#elif UNITY_PS3 //SDK
throw new System.NotImplementedException();
#else
throw new System.NotImplementedException();
#endif
}
/// 禁止外部构造
protected InputResolver()
{
OnInit();
}
protected abstract void OnInit();
///
/// 获得所有当前已连入的输入设备
///
///
public abstract IEnumerable GetDevices();
///
/// 检查指定输入设备是否还保持着连接
///
///
public abstract bool CheckOnline(InputDevice device);
/// 丢失的设备
public delegate void OnDeviceLostHandle(InputDevice lostDevice);
/// 当设备丢失时触发
public event OnDeviceLostHandle OnDeviceLost;
protected void RaiseDeviceLost(InputDevice lostDevice)
{
OnDeviceLost?.Invoke(lostDevice);
}
/// 建立连接的设备
public delegate void OnDeviceConnectedHandle(InputDevice connectDevice);
/// 当设备连接时触发
public event OnDeviceConnectedHandle OnDeviceConnected;
protected void RaiseDeviceConnected(InputDevice connectDevice)
{
OnDeviceConnected?.Invoke(connectDevice);
}
///
/// 获取一个键盘设备的指定按键当前调用帧是否处于按下状态
///
/// 键盘设备实例,来自Resolver提供的设备实例
/// 键盘按键枚举值
public abstract bool GetKey(KeyBoard keyboard, KeyCode key);
///
/// 获得输入设备的唯一名称
///
/// 这个设备必须是由resolver提供,并且保持着连接
///
public abstract string GetDeviceName(InputDevice inputDevice);
}
}