git.fiddlerwoaroof.com
src/events.py
54cb1995
 import libtcodpy as tc
b8f124a1
 import collections
54cb1995
 
 class EventHandler(object):
b8f124a1
 	events = {}
 	def register_event(self, event):
 		return self.events.setdefault(event, [])
 	def handle_event(self, event, cb, *a, **kw):
 		cbs = self.register_event(event)
 		cbs.append( (cb, a, kw) )
 	def trigger_event(self, event, *a, **kw):
 		for cb, args, kwargs in self.events.get(event,[]):
 			kw.update(kwargs)
 			a += args
 			result = cb(*a, **kw)
 			if result is not None and not result: break
 
 
 class TCODEventHandler(object):
54cb1995
 	def __init__(self):
 		self.key = tc.Key()
 		self.mouse = tc.Mouse()
 		self.cbs = {}
 
 	def register(self, event, cb):
 		self.cbs.setdefault(event,[]).append(cb)
 
 	def tick(self):
 		tc.sys_check_for_event(tc.EVENT_KEY_PRESS|tc.EVENT_MOUSE|tc.KEY_PRESSED,
 			self.key, self.mouse
 		)
 
291e96ff
 		alt, shift, ctrl = self.key.lalt|self.key.ralt, self.key.shift, self.key.lctrl|self.key.rctrl
54cb1995
 		char = chr(self.key.c)
 		if char != '\x00' and char in self.cbs:
 			for cb in self.cbs[char]:
291e96ff
 				cb(alt,shift,ctrl)
54cb1995
 
 		elif self.key.vk in self.cbs:
 			for cb in self.cbs[self.key.vk]:
291e96ff
 				cb(alt,shift,ctrl)
54cb1995