ppo-Pyramids-Training
/
com.unity.ml-agents.extensions
/Runtime
/Input
/InputActuatorEventContext.cs
using System; | |
using Unity.Collections; | |
using UnityEngine.InputSystem; | |
using UnityEngine.InputSystem.LowLevel; | |
using UnityEditor; | |
namespace Unity.MLAgents.Extensions.Input | |
{ | |
/// <summary> | |
/// This interface is passed to InputActionActuators to allow them to write to InputEvents. | |
/// The way this interface should be used is to request the <see cref="InputEventPtr"/> by calling | |
/// <see cref="GetEventForFrame"/> then call <see cref="EventProcessedInFrame"/> before returning from | |
/// </summary> | |
public class InputActuatorEventContext : IDisposable | |
{ | |
/// <summary> | |
/// The number of times to allow the use of an event before queuing it in the InputSystem. | |
/// </summary> | |
public readonly int NumTimesToProcess; | |
public readonly InputDevice InputDevice; | |
NativeArray<byte> m_EventBuffer; | |
InputEventPtr m_Ptr; | |
int m_Count; | |
public static InputActuatorEventContext s_EditorContext = new InputActuatorEventContext(); | |
public InputActuatorEventContext(int numTimesToProcess = 1, InputDevice device = null) | |
{ | |
NumTimesToProcess = numTimesToProcess; | |
InputDevice = device; | |
m_Count = 0; | |
m_Ptr = new InputEventPtr(); | |
m_EventBuffer = new NativeArray<byte>(); | |
} | |
/// <summary> | |
/// Returns the <see cref="InputEventPtr"/> to write to for the current frame. | |
/// </summary> | |
/// <returns>The <see cref="InputEventPtr"/> to write to for the current frame.</returns> | |
public IDisposable GetEventForFrame(out InputEventPtr eventPtr) | |
{ | |
if (!EditorApplication.isPlaying) | |
{ | |
eventPtr = new InputEventPtr(); | |
} | |
if (m_Count % NumTimesToProcess == 0) | |
{ | |
m_Count = 0; | |
m_EventBuffer = StateEvent.From(InputDevice, out m_Ptr); | |
} | |
eventPtr = m_Ptr; | |
return this; | |
} | |
public void Dispose() | |
{ | |
if (!EditorApplication.isPlaying) | |
{ | |
return; | |
} | |
m_Count++; | |
if (m_Count == NumTimesToProcess && m_Ptr.valid) | |
{ | |
InputSystem.QueueEvent(m_Ptr); | |
m_EventBuffer.Dispose(); | |
} | |
} | |
} | |
} | |