# {py:mod}`simvx.core.input.devices` ```{py:module} simvx.core.input.devices ``` ```{autodoc2-docstring} simvx.core.input.devices :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`AxisReport ` - ```{autodoc2-docstring} simvx.core.input.devices.AxisReport :summary: ``` * - {py:obj}`ButtonInfo ` - ```{autodoc2-docstring} simvx.core.input.devices.ButtonInfo :summary: ``` * - {py:obj}`AxisInfo ` - ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo :summary: ``` * - {py:obj}`InputDevice ` - ```{autodoc2-docstring} simvx.core.input.devices.InputDevice :summary: ``` * - {py:obj}`ControllerDevice ` - ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice :summary: ``` ```` ### Functions ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`family_for ` - ```{autodoc2-docstring} simvx.core.input.devices.family_for :summary: ``` * - {py:obj}`wrapped_delta ` - ```{autodoc2-docstring} simvx.core.input.devices.wrapped_delta :summary: ``` * - {py:obj}`check_axes ` - ```{autodoc2-docstring} simvx.core.input.devices.check_axes :summary: ``` * - {py:obj}`reset ` - ```{autodoc2-docstring} simvx.core.input.devices.reset :summary: ``` * - {py:obj}`hold_frame ` - ```{autodoc2-docstring} simvx.core.input.devices.hold_frame :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.core.input.devices.__all__ :summary: ``` * - {py:obj}`STICK_DEADZONE ` - ```{autodoc2-docstring} simvx.core.input.devices.STICK_DEADZONE :summary: ``` * - {py:obj}`store ` - ```{autodoc2-docstring} simvx.core.input.devices.store :summary: ``` ```` ### API ````{py:data} __all__ :canonical: simvx.core.input.devices.__all__ :value: > ['AxisInfo', 'AxisReport', 'ButtonInfo', 'ControllerDevice', 'InputDevice', 'family_for', 'hold_fram... ```{autodoc2-docstring} simvx.core.input.devices.__all__ ``` ```` ````{py:data} STICK_DEADZONE :canonical: simvx.core.input.devices.STICK_DEADZONE :value: > 0.15 ```{autodoc2-docstring} simvx.core.input.devices.STICK_DEADZONE ``` ```` ````{py:function} family_for(name: str, guid: str = '', *, recognised: bool = True) -> simvx.core.input.enums.ControllerFamily :canonical: simvx.core.input.devices.family_for ```{autodoc2-docstring} simvx.core.input.devices.family_for ``` ```` `````{py:class} AxisReport() :canonical: simvx.core.input.devices.AxisReport Bases: {py:obj}`enum.StrEnum` ```{autodoc2-docstring} simvx.core.input.devices.AxisReport ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.input.devices.AxisReport.__init__ ``` ````{py:attribute} ABSOLUTE :canonical: simvx.core.input.devices.AxisReport.ABSOLUTE :value: > 'absolute' ```{autodoc2-docstring} simvx.core.input.devices.AxisReport.ABSOLUTE ``` ```` ````{py:attribute} RELATIVE :canonical: simvx.core.input.devices.AxisReport.RELATIVE :value: > 'relative' ```{autodoc2-docstring} simvx.core.input.devices.AxisReport.RELATIVE ``` ```` ````{py:attribute} BOTH :canonical: simvx.core.input.devices.AxisReport.BOTH :value: > 'both' ```{autodoc2-docstring} simvx.core.input.devices.AxisReport.BOTH ``` ```` ````{py:method} __new__(*values) :canonical: simvx.core.input.devices.AxisReport.__new__ ```` ````{py:method} __add__() :canonical: simvx.core.input.devices.AxisReport.__add__ ```` ````{py:method} __contains__() :canonical: simvx.core.input.devices.AxisReport.__contains__ ```` ````{py:method} __delattr__() :canonical: simvx.core.input.devices.AxisReport.__delattr__ ```` ````{py:method} __dir__() :canonical: simvx.core.input.devices.AxisReport.__dir__ ```` ````{py:method} __eq__() :canonical: simvx.core.input.devices.AxisReport.__eq__ ```` ````{py:method} __format__() :canonical: simvx.core.input.devices.AxisReport.__format__ ```` ````{py:method} __ge__() :canonical: simvx.core.input.devices.AxisReport.__ge__ ```` ````{py:method} __getattribute__() :canonical: simvx.core.input.devices.AxisReport.__getattribute__ ```` ````{py:method} __getitem__() :canonical: simvx.core.input.devices.AxisReport.__getitem__ ```` ````{py:method} __getnewargs__() :canonical: simvx.core.input.devices.AxisReport.__getnewargs__ ```` ````{py:method} __getstate__() :canonical: simvx.core.input.devices.AxisReport.__getstate__ ```` ````{py:method} __gt__() :canonical: simvx.core.input.devices.AxisReport.__gt__ ```` ````{py:method} __hash__() :canonical: simvx.core.input.devices.AxisReport.__hash__ ```` ````{py:method} __iter__() :canonical: simvx.core.input.devices.AxisReport.__iter__ ```` ````{py:method} __le__() :canonical: simvx.core.input.devices.AxisReport.__le__ ```` ````{py:method} __len__() :canonical: simvx.core.input.devices.AxisReport.__len__ ```` ````{py:method} __lt__() :canonical: simvx.core.input.devices.AxisReport.__lt__ ```` ````{py:method} __mod__() :canonical: simvx.core.input.devices.AxisReport.__mod__ ```` ````{py:method} __mul__() :canonical: simvx.core.input.devices.AxisReport.__mul__ ```` ````{py:method} __ne__() :canonical: simvx.core.input.devices.AxisReport.__ne__ ```` ````{py:method} __reduce__() :canonical: simvx.core.input.devices.AxisReport.__reduce__ ```` ````{py:method} __reduce_ex__() :canonical: simvx.core.input.devices.AxisReport.__reduce_ex__ ```` ````{py:method} __repr__() :canonical: simvx.core.input.devices.AxisReport.__repr__ ```` ````{py:method} __rmod__() :canonical: simvx.core.input.devices.AxisReport.__rmod__ ```` ````{py:method} __rmul__() :canonical: simvx.core.input.devices.AxisReport.__rmul__ ```` ````{py:method} __setattr__() :canonical: simvx.core.input.devices.AxisReport.__setattr__ ```` ````{py:method} __sizeof__() :canonical: simvx.core.input.devices.AxisReport.__sizeof__ ```` ````{py:method} __str__() :canonical: simvx.core.input.devices.AxisReport.__str__ ```` ````{py:method} __subclasshook__() :canonical: simvx.core.input.devices.AxisReport.__subclasshook__ ```` ````{py:method} capitalize() :canonical: simvx.core.input.devices.AxisReport.capitalize ```` ````{py:method} casefold() :canonical: simvx.core.input.devices.AxisReport.casefold ```` ````{py:method} center() :canonical: simvx.core.input.devices.AxisReport.center ```` ````{py:method} count() :canonical: simvx.core.input.devices.AxisReport.count ```` ````{py:method} encode() :canonical: simvx.core.input.devices.AxisReport.encode ```` ````{py:method} endswith() :canonical: simvx.core.input.devices.AxisReport.endswith ```` ````{py:method} expandtabs() :canonical: simvx.core.input.devices.AxisReport.expandtabs ```` ````{py:method} find() :canonical: simvx.core.input.devices.AxisReport.find ```` ````{py:method} format() :canonical: simvx.core.input.devices.AxisReport.format ```` ````{py:method} format_map() :canonical: simvx.core.input.devices.AxisReport.format_map ```` ````{py:method} index() :canonical: simvx.core.input.devices.AxisReport.index ```` ````{py:method} isalnum() :canonical: simvx.core.input.devices.AxisReport.isalnum ```` ````{py:method} isalpha() :canonical: simvx.core.input.devices.AxisReport.isalpha ```` ````{py:method} isascii() :canonical: simvx.core.input.devices.AxisReport.isascii ```` ````{py:method} isdecimal() :canonical: simvx.core.input.devices.AxisReport.isdecimal ```` ````{py:method} isdigit() :canonical: simvx.core.input.devices.AxisReport.isdigit ```` ````{py:method} isidentifier() :canonical: simvx.core.input.devices.AxisReport.isidentifier ```` ````{py:method} islower() :canonical: simvx.core.input.devices.AxisReport.islower ```` ````{py:method} isnumeric() :canonical: simvx.core.input.devices.AxisReport.isnumeric ```` ````{py:method} isprintable() :canonical: simvx.core.input.devices.AxisReport.isprintable ```` ````{py:method} isspace() :canonical: simvx.core.input.devices.AxisReport.isspace ```` ````{py:method} istitle() :canonical: simvx.core.input.devices.AxisReport.istitle ```` ````{py:method} isupper() :canonical: simvx.core.input.devices.AxisReport.isupper ```` ````{py:method} join() :canonical: simvx.core.input.devices.AxisReport.join ```` ````{py:method} ljust() :canonical: simvx.core.input.devices.AxisReport.ljust ```` ````{py:method} lower() :canonical: simvx.core.input.devices.AxisReport.lower ```` ````{py:method} lstrip() :canonical: simvx.core.input.devices.AxisReport.lstrip ```` ````{py:method} partition() :canonical: simvx.core.input.devices.AxisReport.partition ```` ````{py:method} removeprefix() :canonical: simvx.core.input.devices.AxisReport.removeprefix ```` ````{py:method} removesuffix() :canonical: simvx.core.input.devices.AxisReport.removesuffix ```` ````{py:method} replace() :canonical: simvx.core.input.devices.AxisReport.replace ```` ````{py:method} rfind() :canonical: simvx.core.input.devices.AxisReport.rfind ```` ````{py:method} rindex() :canonical: simvx.core.input.devices.AxisReport.rindex ```` ````{py:method} rjust() :canonical: simvx.core.input.devices.AxisReport.rjust ```` ````{py:method} rpartition() :canonical: simvx.core.input.devices.AxisReport.rpartition ```` ````{py:method} rsplit() :canonical: simvx.core.input.devices.AxisReport.rsplit ```` ````{py:method} rstrip() :canonical: simvx.core.input.devices.AxisReport.rstrip ```` ````{py:method} split() :canonical: simvx.core.input.devices.AxisReport.split ```` ````{py:method} splitlines() :canonical: simvx.core.input.devices.AxisReport.splitlines ```` ````{py:method} startswith() :canonical: simvx.core.input.devices.AxisReport.startswith ```` ````{py:method} strip() :canonical: simvx.core.input.devices.AxisReport.strip ```` ````{py:method} swapcase() :canonical: simvx.core.input.devices.AxisReport.swapcase ```` ````{py:method} title() :canonical: simvx.core.input.devices.AxisReport.title ```` ````{py:method} translate() :canonical: simvx.core.input.devices.AxisReport.translate ```` ````{py:method} upper() :canonical: simvx.core.input.devices.AxisReport.upper ```` ````{py:method} zfill() :canonical: simvx.core.input.devices.AxisReport.zfill ```` ````{py:method} __deepcopy__(memo) :canonical: simvx.core.input.devices.AxisReport.__deepcopy__ ```` ````{py:method} __copy__() :canonical: simvx.core.input.devices.AxisReport.__copy__ ```` ````{py:method} name() :canonical: simvx.core.input.devices.AxisReport.name ```` ````{py:method} value() :canonical: simvx.core.input.devices.AxisReport.value ```` ````` `````{py:class} ButtonInfo :canonical: simvx.core.input.devices.ButtonInfo ```{autodoc2-docstring} simvx.core.input.devices.ButtonInfo ``` ````{py:attribute} index :canonical: simvx.core.input.devices.ButtonInfo.index :type: int :value: > None ```{autodoc2-docstring} simvx.core.input.devices.ButtonInfo.index ``` ```` ````{py:attribute} control :canonical: simvx.core.input.devices.ButtonInfo.control :type: simvx.core.input.controls.DeviceButton :value: > None ```{autodoc2-docstring} simvx.core.input.devices.ButtonInfo.control ``` ```` ````{py:attribute} label :canonical: simvx.core.input.devices.ButtonInfo.label :type: str :value: > None ```{autodoc2-docstring} simvx.core.input.devices.ButtonInfo.label ``` ```` ````` `````{py:class} AxisInfo :canonical: simvx.core.input.devices.AxisInfo ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo ``` ````{py:attribute} index :canonical: simvx.core.input.devices.AxisInfo.index :type: int :value: > None ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo.index ``` ```` ````{py:attribute} control :canonical: simvx.core.input.devices.AxisInfo.control :type: simvx.core.input.controls.DeviceAxis :value: > None ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo.control ``` ```` ````{py:attribute} label :canonical: simvx.core.input.devices.AxisInfo.label :type: str :value: > None ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo.label ``` ```` ````{py:attribute} report :canonical: simvx.core.input.devices.AxisInfo.report :type: simvx.core.input.devices.AxisReport :value: > None ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo.report ``` ```` ````{py:attribute} wraps :canonical: simvx.core.input.devices.AxisInfo.wraps :type: bool :value: > None ```{autodoc2-docstring} simvx.core.input.devices.AxisInfo.wraps ``` ```` ````` ````{py:function} wrapped_delta(now: float, before: float) -> float :canonical: simvx.core.input.devices.wrapped_delta ```{autodoc2-docstring} simvx.core.input.devices.wrapped_delta ``` ```` ````{py:function} check_axes(reports: collections.abc.Sequence[simvx.core.input.devices.AxisReport | str], wraps: collections.abc.Collection[int]) -> tuple[tuple[simvx.core.input.devices.AxisReport, ...], frozenset[int]] :canonical: simvx.core.input.devices.check_axes ```{autodoc2-docstring} simvx.core.input.devices.check_axes ``` ```` `````{py:class} InputDevice(store: simvx.core.input.devices._DeviceStore, device_id: int) :canonical: simvx.core.input.devices.InputDevice ```{autodoc2-docstring} simvx.core.input.devices.InputDevice ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.input.devices.InputDevice.__slots__ :value: > ('_id', '_store') ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.__slots__ ``` ```` ````{py:method} __repr__() -> str :canonical: simvx.core.input.devices.InputDevice.__repr__ ```` ````{py:property} id :canonical: simvx.core.input.devices.InputDevice.id :type: int ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.id ``` ```` ````{py:property} type :canonical: simvx.core.input.devices.InputDevice.type :type: simvx.core.input.controls.DeviceType ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.type ``` ```` ````{py:property} name :canonical: simvx.core.input.devices.InputDevice.name :type: str ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.name ``` ```` ````{py:property} guid :canonical: simvx.core.input.devices.InputDevice.guid :type: str ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.guid ``` ```` ````{py:property} connected :canonical: simvx.core.input.devices.InputDevice.connected :type: bool ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.connected ``` ```` ````{py:property} buttons :canonical: simvx.core.input.devices.InputDevice.buttons :type: tuple[simvx.core.input.devices.ButtonInfo, ...] ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.buttons ``` ```` ````{py:property} axes :canonical: simvx.core.input.devices.InputDevice.axes :type: tuple[simvx.core.input.devices.AxisInfo, ...] ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.axes ``` ```` ````{py:method} label(control: simvx.core.input.controls.DeviceControl) -> str :canonical: simvx.core.input.devices.InputDevice.label ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.label ``` ```` ````{py:method} pressed(button: simvx.core.input.controls.DeviceButton) -> bool :canonical: simvx.core.input.devices.InputDevice.pressed ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.pressed ``` ```` ````{py:method} axis(axis: simvx.core.input.controls.DeviceAxis) -> float | None :canonical: simvx.core.input.devices.InputDevice.axis ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.axis ``` ```` ````{py:method} axis_delta(axis: simvx.core.input.controls.DeviceAxis) -> float :canonical: simvx.core.input.devices.InputDevice.axis_delta ```{autodoc2-docstring} simvx.core.input.devices.InputDevice.axis_delta ``` ```` ````` `````{py:class} ControllerDevice(store: simvx.core.input.devices._DeviceStore, device_id: int) :canonical: simvx.core.input.devices.ControllerDevice Bases: {py:obj}`simvx.core.input.devices.InputDevice` ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.__init__ ``` ````{py:attribute} __slots__ :canonical: simvx.core.input.devices.ControllerDevice.__slots__ :value: > () ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.__slots__ ``` ```` ````{py:method} __repr__() -> str :canonical: simvx.core.input.devices.ControllerDevice.__repr__ ```` ````{py:property} source :canonical: simvx.core.input.devices.ControllerDevice.source :type: simvx.core.input.enums.ControllerSource ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.source ``` ```` ````{py:property} family :canonical: simvx.core.input.devices.ControllerDevice.family :type: simvx.core.input.enums.ControllerFamily ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.family ``` ```` ````{py:property} recognised :canonical: simvx.core.input.devices.ControllerDevice.recognised :type: bool ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.recognised ``` ```` ````{py:property} connected :canonical: simvx.core.input.devices.ControllerDevice.connected :type: bool ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.connected ``` ```` ````{py:method} pressed(button: simvx.core.input.controls.DeviceButton) -> bool :canonical: simvx.core.input.devices.ControllerDevice.pressed ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.pressed ``` ```` ````{py:method} axis_delta(axis: simvx.core.input.controls.DeviceAxis) -> float :canonical: simvx.core.input.devices.ControllerDevice.axis_delta ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.axis_delta ``` ```` ````{py:method} just_pressed(button: simvx.core.input.controls.DeviceButton) -> bool :canonical: simvx.core.input.devices.ControllerDevice.just_pressed ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.just_pressed ``` ```` ````{py:method} just_released(button: simvx.core.input.controls.DeviceButton) -> bool :canonical: simvx.core.input.devices.ControllerDevice.just_released ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.just_released ``` ```` ````{py:method} axis(axis: simvx.core.input.controls.DeviceAxis) -> float :canonical: simvx.core.input.devices.ControllerDevice.axis ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.axis ``` ```` ````{py:method} stick(stick: simvx.core.input.controls.DeviceStick = Controller.LEFT_STICK, *, deadzone: float = STICK_DEADZONE) -> simvx.core.math.types.Vec2 :canonical: simvx.core.input.devices.ControllerDevice.stick ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.stick ``` ```` ````{py:method} rumble(strong: float = 1.0, weak: float = 0.0, duration: float = 0.2) -> bool :canonical: simvx.core.input.devices.ControllerDevice.rumble ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.rumble ``` ```` ````{py:method} label(control: simvx.core.input.controls.DeviceControl, *, positive: bool | None = None) -> str :canonical: simvx.core.input.devices.ControllerDevice.label ```{autodoc2-docstring} simvx.core.input.devices.ControllerDevice.label ``` ```` ````{py:property} id :canonical: simvx.core.input.devices.ControllerDevice.id :type: int ```` ````{py:property} type :canonical: simvx.core.input.devices.ControllerDevice.type :type: simvx.core.input.controls.DeviceType ```` ````{py:property} name :canonical: simvx.core.input.devices.ControllerDevice.name :type: str ```` ````{py:property} guid :canonical: simvx.core.input.devices.ControllerDevice.guid :type: str ```` ````{py:property} buttons :canonical: simvx.core.input.devices.ControllerDevice.buttons :type: tuple[simvx.core.input.devices.ButtonInfo, ...] ```` ````{py:property} axes :canonical: simvx.core.input.devices.ControllerDevice.axes :type: tuple[simvx.core.input.devices.AxisInfo, ...] ```` ````` ````{py:data} store :canonical: simvx.core.input.devices.store :value: > '_DeviceStore(...)' ```{autodoc2-docstring} simvx.core.input.devices.store ``` ```` ````{py:function} reset() -> None :canonical: simvx.core.input.devices.reset ```{autodoc2-docstring} simvx.core.input.devices.reset ``` ```` ````{py:function} hold_frame() -> contextlib.AbstractContextManager[None] :canonical: simvx.core.input.devices.hold_frame ```{autodoc2-docstring} simvx.core.input.devices.hold_frame ``` ````