changeset 61:fc4b7db1d832

Habitat switching.
author Simon Cross <hodgestar@gmail.com>
date Sun, 11 Sep 2011 16:35:02 +0200
parents 848749c2804b
children 40be38f4427c
files mamba/engine.py mamba/habitats/level.py mamba/habitats/mainmenu.py
diffstat 3 files changed, 40 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/mamba/engine.py	Sun Sep 11 16:35:57 2011 +0200
+++ b/mamba/engine.py	Sun Sep 11 16:35:02 2011 +0200
@@ -30,7 +30,10 @@
             for ev in events:
                 if ev.type is QUIT:
                     return
-                self._habitat.dispatch(ev)
+                elif NewHabitatEvent.matches(ev):
+                    self.set_habitat(ev.habitat)
+                else:
+                    self._habitat.dispatch(ev)
             self._habitat.draw(surface)
             flip()
 
@@ -60,13 +63,22 @@
 
 class UserEvent(object):
 
-    utype = "UNKNOWN"
+    TYPE = "UNKNOWN"
 
     @classmethod
     def post(cls, **kws):
-        ev = pygame.event.Event(USEREVENT, utype=cls.utype, **kws)
+        ev = pygame.event.Event(USEREVENT, utype=cls.TYPE, **kws)
         pygame.event.post(ev)
 
     @classmethod
     def matches(cls, ev):
-        return ev.type is USEREVENT and ev.utype == cls.utype
+        return ev.type is USEREVENT and ev.utype == cls.TYPE
+
+
+class NewHabitatEvent(UserEvent):
+
+    TYPE = "NEW_HABITAT"
+
+    @classmethod
+    def post(cls, habitat):
+        super(NewHabitatEvent, cls).post(habitat)
--- a/mamba/habitats/level.py	Sun Sep 11 16:35:57 2011 +0200
+++ b/mamba/habitats/level.py	Sun Sep 11 16:35:02 2011 +0200
@@ -1,6 +1,9 @@
 """Where a level object hides."""
 
-from mamba.engine import Habitat
+from pygame.locals import KEYDOWN
+
+from mamba.constants import ESCAPE_KEYS
+from mamba.engine import Habitat, NewHabitatEvent
 from mamba.widgets.level import LevelWidget
 from mamba.level import Level
 
@@ -9,4 +12,11 @@
     def __init__(self, level_name):
         super(LevelHabitat, self).__init__()
         self.level = Level(level_name)
-        self.container.add(LevelWidget(self.level))
+        self.level_widget = LevelWidget(self.level)
+        self.container.add(self.level_widget)
+        self.container.add_callback(KEYDOWN, self.keydown_event)
+
+    def keydown_event(self, ev, widget):
+        if ev.key in ESCAPE_KEYS:
+            from mamba.habitat.mainmenu import MainMenu
+            NewHabitatEvent.post(MainMenu())
--- a/mamba/habitats/mainmenu.py	Sun Sep 11 16:35:57 2011 +0200
+++ b/mamba/habitats/mainmenu.py	Sun Sep 11 16:35:02 2011 +0200
@@ -1,10 +1,13 @@
 """Main menu."""
 
-from pygame.locals import MOUSEMOTION, MOUSEBUTTONUP, MOUSEBUTTONDOWN
+from pygame.locals import MOUSEMOTION, KEYDOWN, QUIT
+import pygame.event
 
+from mamba.constants import ESCAPE_KEYS
 from mamba.engine import Habitat
 from mamba.widgets.text import TextWidget
 
+
 class MainMenu(Habitat):
     def __init__(self):
         super(MainMenu, self).__init__()
@@ -13,6 +16,12 @@
         hello.add_callback(MOUSEMOTION, self.debug_event)
         quit = TextWidget((100, 200), "Quit", color='red')
         self.container.add(quit)
+        self.container.add_callback(KEYDOWN, self.keydown_event)
 
-    def debug_event(self, event, widget):
-        print event
+    def keydown_event(self, ev, widget):
+        if ev.key in ESCAPE_KEYS:
+            pygame.event.post(pygame.event.Event(QUIT))
+            return True
+
+    def debug_event(self, ev, widget):
+        print ev