# HG changeset patch # User Simon Cross # Date 1316199907 -7200 # Node ID 8643c7dbc8adc158d75449662bd08b62d48024f2 # Parent 0c25bca380de510bcf353d6caded421af1e640ec Allow sub-classing level menu. diff -r 0c25bca380de -r 8643c7dbc8ad mamba/habitats/level.py --- a/mamba/habitats/level.py Fri Sep 16 21:04:42 2011 +0200 +++ b/mamba/habitats/level.py Fri Sep 16 21:05:07 2011 +0200 @@ -3,14 +3,15 @@ from pygame.locals import KEYDOWN from mamba.constants import ESCAPE_KEYS -from mamba.engine import Habitat, NewHabitatEvent +from mamba.engine import Habitat from mamba.world import World from mamba.widgets.game import GameWidget class LevelHabitat(Habitat): - def __init__(self, level): + def __init__(self, level, go_menu): super(LevelHabitat, self).__init__() + self.go_menu = go_menu world = World(level) game_widget = GameWidget(world) self.container.add(game_widget) @@ -18,6 +19,5 @@ def keydown_event(self, ev, widget): if ev.key in ESCAPE_KEYS: - from mamba.habitats.mainmenu import MainMenu - NewHabitatEvent.post(MainMenu()) + self.go_menu() return True diff -r 0c25bca380de -r 8643c7dbc8ad mamba/habitats/levelmenu.py --- a/mamba/habitats/levelmenu.py Fri Sep 16 21:04:42 2011 +0200 +++ b/mamba/habitats/levelmenu.py Fri Sep 16 21:05:07 2011 +0200 @@ -14,8 +14,8 @@ def __init__(self): super(LevelMenu, self).__init__() self.level_buttons = {} - for i, name in enumerate(levels): - level = Level(name) + for i, name in enumerate(self.list_levels()): + level = self.get_level(name) button = LevelButton((20 + 120 * i, 20), level, done=name in done_levels) button.add_callback('clicked', self.level_selected, name) @@ -24,15 +24,25 @@ self.container.add_callback(KEYDOWN, self.keydown_event) self.update_buttons() + def list_levels(self): + return levels + + def get_level(self, name): + return Level(name) + def update_buttons(self): for name, button in self.level_buttons.iteritems(): button.done = name in done_levels def level_selected(self, ev, widget, name): from mamba.habitats.level import LevelHabitat - NewHabitatEvent.post(LevelHabitat(widget.level)) + NewHabitatEvent.post(LevelHabitat(widget.level, self.go_menu)) return True + @classmethod + def go_menu(cls): + NewHabitatEvent.post(cls()) + def keydown_event(self, ev, widget): if ev.key in ESCAPE_KEYS: return self.return_to_mainmenu(ev, widget)