def run(self, on_frame, on_keydown=None, on_keyup=None, on_mousedown=None, on_mouseup=None, on_mousemotion=None): latencies = [] while not self.done: frame_begin = now = time.time() on_frame() pygame.display.flip() now = time.time() latencies.append(now - frame_begin) if len(latencies) >= 100: latencies.pop(0) self.avg_latency = sum(latencies) / len(latencies) for event in pygame.event.get(): if event.type == QUIT: self.done = True if on_keydown and event.type == KEYDOWN: name = keyboard.bindings.get(event.key, None) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) on_keydown(name, modifiers, event.unicode) if on_keyup and event.type == KEYUP: name = keyboard.bindings.get(event.key, None) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) on_keyup(name, modifiers) if on_mousedown and event.type == MOUSEBUTTONDOWN: on_mousedown(event.button, event.pos) if on_mouseup and event.type == MOUSEBUTTONUP: on_mouseup(event.button, event.pos) if on_mousemotion and event.type == MOUSEMOTION: on_mousemotion(event.pos, event.rel)
def run(self): self.running = True latencies = [] while self.running: frame_begin = now = time.time() self.listeners["on_frame"](now) pygame.display.flip() now = time.time() latencies.append(now - frame_begin) if len(latencies) >= 100: latencies.pop(0) self.average_latency = sum(latencies) / len(latencies) for event in pygame.event.get(): if event.type == QUIT: self.running = False if 'on_keydown' in self.listeners and event.type == KEYDOWN: name = keyboard.bindings.get(event.key, None) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) self.listeners["on_keydown"](name, modifiers, event.unicode) if 'on_keyup' in self.listeners and event.type == KEYUP: name = keyboard.bindings.get(event.key, None) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) self.listeners["on_keyup"](name, modifiers) if 'on_mousedown' in self.listeners and event.type == MOUSEBUTTONDOWN: self.listeners["on_mousedown"](event.button, event.pos) if 'on_mouseup' in self.listeners and event.type == MOUSEBUTTONUP: self.listeners["on_mouseup"](event.button, event.pos) if 'on_mousemotion' in self.listeners and event.type == MOUSEMOTION: self.listeners["on_mousemotion"](event.pos, event.rel)
def dispatch(emit, event): global screen if event.type == pygame.QUIT: if not emit('quit', []): sys.exit(0) if event.type == pygame.VIDEORESIZE: size = [event.w, event.h] emit('resize', size) screen = Surface(pygame.display.set_mode(size, pygame.RESIZABLE)) emit('frame', [screen]) pygame.display.flip() if event.type == pygame.KEYDOWN: key = keyboard.bindings.get(event.key) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) emit('keydown', [key, modifiers, event.unicode]) if event.type == pygame.KEYUP: key = keyboard.bindings.get(event.key) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) emit('keyup', [key, modifiers]) if event.type == pygame.MOUSEMOTION: emit('motion', [vec2(*event.pos), vec2(*event.rel), event.buttons]) if event.type == pygame.MOUSEBUTTONDOWN: emit('buttondown', [vec2(*event.pos), event.button]) if event.type == pygame.MOUSEBUTTONUP: emit('buttonup', [vec2(*event.pos), event.button])
def event_dispatch(event, listeners): if 'on_keydown' in listeners and event.type == KEYDOWN: name = keyboard.bindings.get(event.key, None) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) listeners["on_keydown"](name, modifiers, event.unicode) if 'on_keyup' in listeners and event.type == KEYUP: name = keyboard.bindings.get(event.key, None) modifiers = frozenset(keyboard.parse_modifiers(event.mod)) listeners["on_keyup"](name, modifiers) if 'on_mousedown' in listeners and event.type == MOUSEBUTTONDOWN: listeners["on_mousedown"](event.button, event.pos) if 'on_mouseup' in listeners and event.type == MOUSEBUTTONUP: listeners["on_mouseup"](event.button, event.pos) if 'on_mousemotion' in listeners and event.type == MOUSEMOTION: listeners["on_mousemotion"](event.pos, event.rel)