b501d2f4 |
import libtcodpy as tc
import collections
class EventHandler(object):
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):
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
)
alt, shift, ctrl = self.key.lalt|self.key.ralt, self.key.shift, self.key.lctrl|self.key.rctrl
char = chr(self.key.c)
if char != '\x00' and char in self.cbs:
for cb in self.cbs[char]:
cb(alt,shift,ctrl)
elif self.key.vk in self.cbs:
for cb in self.cbs[self.key.vk]:
cb(alt,shift,ctrl)
|