# -*- coding: utf-8 -*- import threading import object import pygame pygame.init() class EventManager( threading.Thread ): receivers = [] signals = [] is_alive = True def __init__( self ): threading.Thread.__init__( self ) self.start() def connect( self, transmitter, signal, receiver, callback, *args ): if isinstance( receiver, object.Object ): self.receivers.append( ( transmitter, signal, receiver, callback, args ) ) def propagate( self, transmitter, signal, *args ): self.signals.append( ( transmitter, signal, args ) ) def quit( self ): self.is_alive = False def run( self ): pygame.key.set_repeat(100, 30) while self.is_alive: for event in pygame.event.get(): if event.type == pygame.QUIT: self.quit() if event.type == pygame. KEYDOWN: self.propagate( "env", "keydown", event.key ) for signal in self.signals: for receiver in self.receivers: if receiver[0] == signal[0] and receiver[1] == signal[1]: object = receiver[2] args = [] args.extend( signal[2] ) args.extend( receiver[4] ) object.__getattribute__( receiver[3] )( receiver[0], *args ) self.signals = []