using System;
using System.Collections.Generic;
using System.Linq;
using UnityEngine.InputSystem;
using UnityEngine.InputSystem.Layouts;
using UnityEngine.InputSystem.LowLevel;
using UnityEngine.InputSystem.Utilities;
namespace Unity.RenderStreaming.InputSystem
{
using InputSystem = UnityEngine.InputSystem.InputSystem;
///
///
///
public interface IInputManager
{
///
///
///
event Action onMessage;
///
///
///
event Action onEvent;
///
///
///
event Action onDeviceChange;
///
///
///
event Action onLayoutChange;
///
///
///
ReadOnlyArray devices { get; }
///
///
///
IEnumerable layouts { get; }
///
///
///
///
///
InputDevice GetDeviceById(int deviceId);
///
///
///
///
///
///
///
InputDevice AddDevice(string layout, string name = null, string variants = null);
///
///
///
///
void RemoveDevice(InputDevice device);
///
///
///
///
///
void AddDeviceUsage(InputDevice device, string usage);
///
///
///
///
///
void RemoveDeviceUsage(InputDevice device, string usage);
///
///
///
///
///
InputControlLayout LoadLayout(string name);
///
///
///
///
///
///
void RegisterControlLayout(string json, string name = null, bool isOverride = false);
///
///
///
///
void RemoveLayout(string name);
///
///
///
///
void QueueEvent(InputEventPtr eventPtr);
}
public abstract class InputManager : IInputManager
{
//todo(kazuki):: remove warning CS0067
#pragma warning disable 0067
public virtual event Action onMessage;
public virtual event Action onEvent;
public virtual event Action onDeviceChange;
public virtual event Action onLayoutChange;
#pragma warning restore 0067
public virtual ReadOnlyArray devices
{
get
{
return InputSystem.devices;
}
}
public virtual IEnumerable layouts
{
get
{
return InputSystem.ListLayouts();
}
}
public virtual InputDevice GetDeviceById(int deviceId)
{
return InputSystem.GetDeviceById(deviceId);
}
public virtual InputDevice AddDevice(string layout, string name = null, string variants = null)
{
foreach (var device_ in InputSystem.devices.Where(device => device.enabled))
InputSystem.ResetDevice(device_);
return InputSystem.AddDevice(layout, name, variants);
}
public virtual void RemoveDevice(InputDevice device)
{
foreach (var device_ in InputSystem.devices.Where(device => device.enabled))
InputSystem.ResetDevice(device_);
InputSystem.RemoveDevice(device);
}
public virtual void AddDeviceUsage(InputDevice device, string usage)
{
InputSystem.AddDeviceUsage(device, usage);
}
public virtual void RemoveDeviceUsage(InputDevice device, string usage)
{
InputSystem.RemoveDeviceUsage(device, usage);
}
public virtual InputControlLayout LoadLayout(string name)
{
return InputSystem.LoadLayout(name);
}
public virtual void RegisterControlLayout(string json, string name = null, bool isOverride = false)
{
if(isOverride)
InputSystem.RegisterLayoutOverride(json, name);
else
InputSystem.RegisterLayout(json, name);
}
public virtual void RemoveLayout(string name)
{
InputSystem.RemoveLayout(name);
}
public virtual void QueueEvent(InputEventPtr eventPtr)
{
InputSystem.QueueEvent(eventPtr);
}
}
}
// #endif