## Superclass for events that can be passed to the ## event manager. class event: pass class event_manager: def __init__(self): from weakref import WeakKeyDictionary self.listeners = WeakKeyDictionary() def add_listener(self, listener): self.listeners[listener] = 1 def remove_listener(self, listener): if listener in self.listeners.keys(): del self.listeners[listener] def announce(self, event): for listener in self.listeners.keys(): listener.notify(event) ## Events that may occurr around the View, ## Controller and Game. In other words, events ## that can occur in the engine. class tick_event(event): pass class mouse_moved_event(event): def __init__(self, pos): self.pos = pos def get_pos(self): return self.pos class mouse_pressed_event(event): def __init__(self, pos): self.pos = pos def get_pos(self): return self.pos ## The keyboard event contains a pygame keypress. class keyboard_event(event): def __init__(self, key): self.key = key def get_key(self): return self.key class quit_event(event): pass ## The draw event contains a reference back ## to the screen which we want everything ## to be drawn onto. class draw_event(event): def __init__(self, screen): self.screen = screen def get_screen(self): return self.screen ## Abstract listener class for adding a couple ## of common methods for "all" listeners ## (except for the ones that shouldn't know ## how to announce events). class listener: def notify(self, event): print "Generic notify() called." def set_event_handler(self, event_handler): self.event_handler = event_handler