import contextlib import sys from typing import NoReturn import pygame from .Screen import Screen from ..controller import KeyboardController, JoystickController, Input from ..misc import UnPause def handle_input_pressed(controller, event): if controller.get_input_down(event) == Input.PAUSE: raise UnPause() class Pause(Screen): def __init__(self, screen): self.event_handler = dict() def exit(_) -> NoReturn: sys.exit() self.event_handler[pygame.QUIT] = exit self.event_handler[pygame.JOYBUTTONDOWN] = lambda evt: handle_input_pressed(JoystickController(evt.joy), evt) self.event_handler[pygame.KEYDOWN] = lambda evt: handle_input_pressed(KeyboardController(pygame.key), evt) def refresh(self): pass def oneframe(self): try: for event in pygame.event.get(): with contextlib.suppress(KeyError): self.event_handler[event.type](event) except UnPause: pygame.event.clear() raise