def which_pressed(player, *buttons: Button, refresh_input=False):
    """Checks which of the given buttons are pressed.

    Parameters
    ----------
    player: :class:`Player`
        The player to check with.
    buttons: one or more :class:`Button` objects OR Tuple[Button]
        Buttons to check for.
    refresh_input: Optional[bool]
        Whether or not to check for new inputs.
        Checks with inputs from last refresh if False.
        Defaults to False.

    Returns
    -------
    A list of :class:`Button` objects.
    """
    if refresh_input:
        _nx.hid_scan_input()
    keys_pressed = _nx.hid_keys_down(player.number - 1 if player.number != 1 else AUTO_PLAYER_1_ID)
    if not buttons:
        raise TypeError("At least one Button must be passed")
    if refresh_input:
        refresh_inputs()
    keys_pressed = _nx.hid_keys_down(player.number - 1 if player.number != 1 else AUTO_PLAYER_1_ID)
    buttons_pressed = []
    for button in buttons:
        for key_bit in button.key_bits:
            if keys_pressed & key_bit:
                buttons_pressed.append(button)
    return buttons_pressed
예제 #2
0
def poll_input(self):
    if self.firstrun:
        # todo: do this differently to prevent delay when placing marker near the bottom of the screen
        self.console.write(b" " +
                           bytes("\n" * self.selected_idx + "\r>\r", 'UTF-8'))
        self.firstrun = False
    _nx.hid_scan_input()
    keys_down = _nx.hid_keys_down(self.CONTROLLER_P1_AUTO)

    if keys_down & self.KEY_A:
        return True
    elif keys_down & (1 << 10):
        raise ExitToHBMenu
    elif keys_down & self.KEY_UP:
        if self.selected_idx > 0:
            self.selected_idx -= 1
            self.console.write(b" \x1b[1A\r>\r")
            self.console.flush()
    elif keys_down & self.KEY_DOWN:
        if self.selected_idx < len(self.entries) - 1:
            self.selected_idx += 1
            self.console.write(b" \n\r>\r")
            self.console.flush()
    elif keys_down & (1 << 14):
        if self.selected_idx < len(self.entries) - 5:
            self.selected_idx += 5
            self.console.write(b" \n\n\n\n\n\r>\r")
            self.console.flush()
        else:
            self.console.write(
                bytes(
                    (" " + "\n" *
                     ((len(self.entries) - 1) - self.selected_idx)) + "\r>\r",
                    "UTF-8"))
            self.selected_idx = len(self.entries) - 1
            self.console.flush()
    elif keys_down & (1 << 12):
        if self.selected_idx > 5:
            self.selected_idx -= 5
            self.console.write(b" \x1b[1A\x1b[1A\x1b[1A\x1b[1A\x1b[1A\r>\r")
            self.console.flush()
        else:
            self.console.write(
                bytes((" " + "\x1b[1A" * self.selected_idx) + "\r>\r",
                      "UTF-8"))
            self.selected_idx = 0
            self.console.flush()

    return False
    def poll_input(self):
        _nx.hid_scan_input()
        keys_down = _nx.hid_keys_down(self.CONTROLLER_P1_AUTO)

        if keys_down & self.KEY_A:
            return True
        elif keys_down & self.KEY_UP:
            if self.selected_idx > 0:
                self.selected_idx -= 1
                self.console.write(b" \x1b[1A\r>\r")
                self.console.flush()
        elif keys_down & self.KEY_DOWN:
            if self.selected_idx < len(self.entries) - 1:
                self.selected_idx += 1
                self.console.write(b" \n\r>\r")
                self.console.flush()

        return False
def refresh_inputs():
    """Refreshes inputs.
    Should normally be called at least once
    within every iteration of your main loop.
    """
    _nx.hid_scan_input()