rendered paste body# -*- 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 = []