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()