# HG changeset patch # User Simon Cross # Date 1315751702 -7200 # Node ID fc4b7db1d8327a59a1abd3c252c7fcb5585dea0d # Parent 848749c2804bae545f75954b0cecc16273e5bc08 Habitat switching. diff -r 848749c2804b -r fc4b7db1d832 mamba/engine.py --- 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) diff -r 848749c2804b -r fc4b7db1d832 mamba/habitats/level.py --- 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()) diff -r 848749c2804b -r fc4b7db1d832 mamba/habitats/mainmenu.py --- 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