Source code for rubato.utils.radio.events

"""
These events are broadcast by rubato and can be listened to with
:func:`rb.Radio.listen() <rubato.utils.radio.Radio.listen>`. Here is an example of how you can listen for a
key down event:

.. code-block:: python

    def listener(data: rb.KeyResponse):
        if data.key == "a":
            print("You pressed the 'a' key!")

    rb.Radio.listen(rb.Events.KEYDOWN, listener)
"""

from __future__ import annotations
from enum import Enum, unique
from dataclasses import dataclass
import cython


[docs]@unique class Events(Enum): """ Describes all rubato-fired events that can be listened for. """ KEYUP = "KEYUP" """ Fired when a key is released. Responds with a :func:`KeyResponse <rubato.utils.events.KeyResponse>` object. """ KEYDOWN = "KEYDOWN" """ Fired when a key is pressed. Responds with a :func:`KeyResponse <rubato.utils.events.KeyResponse>` object. """ KEYHOLD = "KEYHOLD" """ Fired when a key is held down (After the initial keydown). Responds with a :func:`KeyResponse <rubato.utils.events.KeyResponse>` object. """ MOUSEUP = "MOUSEUP" """ Fired when a mouse button is released. Responds with a :func:`MouseButtonResponse <rubato.utils.events.MouseButtonResponse>` object. """ MOUSEDOWN = "MOUSEDOWN" """ Fired when a mouse button is pressed. Responds with a :func:`MouseButtonResponse <rubato.utils.events.MouseButtonResponse>` object. """ MOUSEWHEEL = "MOUSEWHEEL" """ Fired when the mouse wheel is scrolled. Responds with a :func:`MouseWheelResponse <rubato.utils.events.MouseWheelResponse>` object. """ MOUSEMOTION = "MOUSEMOTION" """ Fired when the mouse is moved. Responds with a :func:`MouseMotionResponse <rubato.utils.events.MouseMotionResponse>` object. """ JOYSTICKCONNECT = "JOYSTICKCONNECT" """ Fired when a controller joystick is connected. Responds with a :func:`JoystickConnectResponse <rubato.utils.events.JoystickConnectResponse>` object. """ JOYSTICKDISCONNECT = "JOYSTICKDISCONNECT" """ Fired when a controller joystick is disconnected. Responds with a :func:`JoystickDisconnectResponse <rubato.utils.events.JoystickDisconnectResponse>` object. """ JOYAXISMOTION = "JOYAXISMOTION" """ Fired when a controller joystick axis is moved. Responds with a :func:`JoyAxisMotionResponse <rubato.utils.events.JoyAxisMotionResponse>` object. """ JOYHATMOTION = "JOYHATMOTION" """ Fired when a controller hat button is changed. Responds with a :func:`JoyHatMotionResponse <rubato.utils.events.JoyHatMotionResponse>` object. """ JOYBUTTONDOWN = "JOYBUTTONDOWN" """ Fired when a controller button is pressed. Responds with a :func:`JoyButtonResponse <rubato.utils.events.JoyButtonResponse>` object. """ JOYBUTTONUP = "JOYBUTTONUP" """ Fired when a controller button is released. Responds with a :func:`JoyButtonResponse <rubato.utils.events.JoyButtonResponse>` object. """ EXIT = "EXIT" """Fired when the game is exiting. Has no response.""" RESIZE = "RESIZE" """ Fired when the window is resized. Responds with a :func:`ResizeResponse <rubato.utils.events.ResizeResponse>` object. """
if not cython.compiled: from enum_tools import document_enum document_enum(Events)
[docs]@dataclass(frozen=True) class EventResponse: """A response to an event. This class behaves like a dict, but is immutable.""" timestamp: float """The timestamp of the event in seconds.""" def __getitem__(self, item): if hasattr(self, item): return getattr(self, item) else: raise KeyError(item) def keys(self): return self.__dict__.keys() def items(self): return self.__dict__.items() def values(self): return self.__dict__.values() def get(self, item, default=None): if hasattr(self, item): return getattr(self, item) else: return default
[docs]@dataclass(frozen=True) class KeyResponse(EventResponse): """A response to a key event""" key: str """The name of the key (see Key Names section for the list of possible key names)""" unicode: str """The unicode character for the key (keys without unicode are just empty strings)""" code: int """The keycode of the the key. (can be processed with Input.get_name)""" mods: int """The code for the currently pressed modifiers. (can be processed with Input.mods_from_code)"""
[docs]@dataclass(frozen=True) class MouseButtonResponse(EventResponse): """A response to a mouse event""" button: int """The mouse button that was pressed""" x: int """The x position of the mouse""" y: int """The y position of the mouse""" clicks: int """The number of clicks that have been made""" which: int """The mouse that was used"""
[docs]@dataclass(frozen=True) class MouseWheelResponse(EventResponse): """A response to a mouse wheel event""" x: float """The x scroll amount of the mouse""" y: float """The y scroll amount of the mouse""" which: int """The mouse that was used"""
[docs]@dataclass(frozen=True) class MouseMotionResponse(EventResponse): """A response to a mouse motion event""" x: int """The x position of the mouse""" y: int """The y position of the mouse""" dx: int """The change in x position of the mouse""" dy: int """The change in y position of the mouse""" which: int """The mouse that was used"""
[docs]@dataclass(frozen=True) class JoystickConnectResponse(EventResponse): """A response to a joystick connection event""" id: int """The id of the joystick that was connected"""
[docs]@dataclass(frozen=True) class JoystickDisconnectResponse(EventResponse): """A response to a joystick disconnection event""" id: int """The id of the joystick that was disconnected"""
[docs]@dataclass(frozen=True) class JoyAxisMotionResponse(EventResponse): """A response to a joystick axis event""" controller: int """The joystick that was used""" axis: int """The axis that was moved""" value: float """The value of the axis""" centered: bool """Whether the axis is centered"""
[docs]@dataclass(frozen=True) class JoyButtonResponse(EventResponse): """A response to a joystick button event""" controller: int """The joystick that was used""" button: int """The button that was pressed"""
[docs]@dataclass(frozen=True) class JoyHatMotionResponse(EventResponse): """A response to a joystick hat event""" controller: int """The joystick that was used""" hat: int """The hat that was moved""" value: int """The value of the hat""" name: str """The name of the hat"""
[docs]@dataclass(frozen=True) class ResizeResponse(EventResponse): """A response to a resize event""" width: int """The new width of the window""" height: int """The new height of the window""" old_width: float """The old width of the window""" old_height: float """The old height of the window"""