All pastes #168029 Raw Edit

Miscellany

public text v1 · immutable
·published 2006-09-12 16:57 UTC
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 = []