Mercurial > pyntnclick
changeset 619:d9d1a9c4b833 pyntnclick
Add ScreenEvents.
author | Simon Cross <hodgestar+bzr@gmail.com> |
---|---|
date | Sat, 11 Feb 2012 21:40:36 +0200 |
parents | 1a8dceccd98e |
children | 38f75cef86d0 |
files | gamelib/menu.py pyntnclick/engine.py pyntnclick/gamescreen.py |
diffstat | 3 files changed, 24 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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):
--- 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)
--- 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()