@startuml
class InputAction <<sealed>> {
    + name : string <<get>>
    + type : InputActionType <<get>>
    + id : Guid <<get>>
    <<internal>> idDontGenerate : Guid <<get>>
    + expectedControlType : string <<get>> <<set>>
    + processors : string <<get>>
    + interactions : string <<get>>
    + actionMap : InputActionMap <<get>>
    + bindingMask : InputBinding? <<get>> <<set>>
    + bindings : ReadOnlyArray<InputBinding> <<get>>
    + controls : ReadOnlyArray<InputControl> <<get>>
    + phase : InputActionPhase <<get>>
    + inProgress : bool <<get>>
    + enabled : bool <<get>>
    + triggered : bool <<get>>
    + <<unsafe>> activeControl : InputControl <<get>>
    + wantsInitialStateCheck : bool <<get>> <<set>>
    + InputAction()
    + InputAction(name:string, type:InputActionType, binding:string, interactions:string, processors:string, expectedControlType:string)
    + Dispose() : void
    + <<override>> ToString() : string
    + Enable() : void
    + Disable() : void
    + Clone() : InputAction
    - Clone() : object
    + <<unsafe>> ReadValue() : TValue
    + <<unsafe>> ReadValueAsObject() : object
    + Reset() : void
    + <<unsafe>> IsPressed() : bool
    + <<unsafe>> IsInProgress() : bool
    + <<unsafe>> WasPressedThisFrame() : bool
    + <<unsafe>> WasReleasedThisFrame() : bool
    + <<unsafe>> WasPerformedThisFrame() : bool
    + <<unsafe>> GetTimeoutCompletionPercentage() : float
    <<internal>> m_Name : string
    <<internal>> m_Type : InputActionType
    <<internal>> m_ExpectedControlType : string
    <<internal>> m_Id : string
    <<internal>> m_Processors : string
    <<internal>> m_Interactions : string
    <<internal>> m_SingletonActionBindings : InputBinding[]
    <<internal>> m_Flags : ActionFlags
    <<internal>> m_BindingMask : InputBinding?
    <<internal>> m_BindingsStartIndex : int
    <<internal>> m_BindingsCount : int
    <<internal>> m_ControlStartIndex : int
    <<internal>> m_ControlCount : int
    <<internal>> m_ActionIndexInState : int
    <<internal>> m_ActionMap : InputActionMap
    <<internal>> m_OnStarted : CallbackArray<Action<CallbackContext>>
    <<internal>> m_OnCanceled : CallbackArray<Action<CallbackContext>>
    <<internal>> m_OnPerformed : CallbackArray<Action<CallbackContext>>
    <<internal>> isSingletonAction : bool <<get>>
    - currentState : InputActionState.TriggerState <<get>>
    <<internal>> MakeSureIdIsInPlace() : string
    <<internal>> GenerateId() : void
    <<internal>> GetOrCreateActionMap() : InputActionMap
    - CreateInternalActionMapForSingletonAction() : void
    <<internal>> RequestInitialStateCheckOnEnabledAction() : void
    <<internal>> ActiveControlIsValid(control:InputControl) : bool
    <<internal>> FindEffectiveBindingMask() : InputBinding?
    <<internal>> BindingIndexOnActionToBindingIndexOnMap(indexOfBindingOnAction:int) : int
    <<internal>> BindingIndexOnMapToBindingIndexOnAction(indexOfBindingOnMap:int) : int
}
enum ActionFlags {
    WantsInitialStateCheck= 1 << 0,
}
struct CallbackContext {
    <<internal>> m_State : InputActionState
    <<internal>> m_ActionIndex : int
    - actionIndex : int <<get>>
    - <<unsafe>> bindingIndex : int <<get>>
    - <<unsafe>> controlIndex : int <<get>>
    - <<unsafe>> interactionIndex : int <<get>>
    + <<unsafe>> phase : InputActionPhase <<get>>
    + started : bool <<get>>
    + performed : bool <<get>>
    + canceled : bool <<get>>
    + action : InputAction <<get>>
    + control : InputControl <<get>>
    + interaction : IInputInteraction <<get>>
    + <<unsafe>> time : double <<get>>
    + <<unsafe>> startTime : double <<get>>
    + duration : double <<get>>
    + valueType : Type <<get>>
    + valueSizeInBytes : int <<get>>
    + <<unsafe>> ReadValue(buffer:void*, bufferSize:int) : void
    + ReadValue() : TValue
    + ReadValueAsButton() : bool
    + ReadValueAsObject() : object
    + <<override>> ToString() : string
}
ICloneable <|-- InputAction
IDisposable <|-- InputAction
InputAction +-- ActionFlags
InputAction +-- CallbackContext
@enduml
