# HG changeset patch # User Simon Cross # Date 1328989236 -7200 # Node ID d9d1a9c4b83370e407c202175690bde71f6ad4f1 # Parent 1a8dceccd98e07506f1e4b59ea089dfb7038c429 Add ScreenEvents. diff -r 1a8dceccd98e -r d9d1a9c4b833 gamelib/menu.py --- a/gamelib/menu.py Sat Feb 11 21:40:51 2012 +0200 +++ b/gamelib/menu.py Sat Feb 11 21:40:36 2012 +0200 @@ -27,6 +27,7 @@ self.surface.blit(self._background, self.surface.get_rect()) def start(self, ev, widget): + self.screen_event('game', 'restart') self.change_screen('game') def check_running(self): diff -r 1a8dceccd98e -r d9d1a9c4b833 pyntnclick/engine.py --- a/pyntnclick/engine.py Sat Feb 11 21:40:51 2012 +0200 +++ b/pyntnclick/engine.py Sat Feb 11 21:40:36 2012 +0200 @@ -36,6 +36,9 @@ return elif ScreenChangeEvent.matches(ev): self.set_screen(ev.screen_name) + elif ScreenEvent.matches(ev): + self.screens[ev.screen_name].process_event(ev.event_name, + ev.data) else: self._screen.dispatch(ev) surface = pygame.display.get_surface() @@ -94,6 +97,12 @@ def change_screen(self, new_screen_name): ScreenChangeEvent.post(new_screen_name) + def screen_event(self, screen_name, event_name, data=None): + ScreenEvent.post(screen_name, event_name, data) + + def process_event(self, event_name, data): + pass + class UserEvent(object): """A user event type allowing subclassing, @@ -119,3 +128,13 @@ @classmethod def post(cls, screen_name): super(ScreenChangeEvent, cls).post(screen_name=screen_name) + + +class ScreenEvent(UserEvent): + + TYPE = "SCREEN_EVENT" + + @classmethod + def post(cls, screen_name, event_name, data): + super(ScreenEvent, cls).post(screen_name=screen_name, + event_name=event_name, data=data) diff -r 1a8dceccd98e -r d9d1a9c4b833 pyntnclick/gamescreen.py --- a/pyntnclick/gamescreen.py Sat Feb 11 21:40:51 2012 +0200 +++ b/pyntnclick/gamescreen.py Sat Feb 11 21:40:36 2012 +0200 @@ -215,6 +215,10 @@ for widget in self.container.children[:]: self.container.remove(widget) + def process_event(self, event_name, data): + if event_name == 'restart': + self.start_game() + def start_game(self): self._clear_all() self.game = self.create_initial_state()