# HG changeset patch # User Jeremy Thurgood # Date 1316262830 -7200 # Node ID 98ccef2a1a3ce751f9d32e27d7b18436c4e1a755 # Parent c81d5551cb17847cacf32cbaf88483daad545e82 Level loading refactorage. diff -r c81d5551cb17 -r 98ccef2a1a3c mamba/__main__.py --- a/mamba/__main__.py Sat Sep 17 14:28:39 2011 +0200 +++ b/mamba/__main__.py Sat Sep 17 14:33:50 2011 +0200 @@ -10,7 +10,7 @@ from mamba.gamestate import load_state from mamba.sound import SoundSystem from mamba.habitats.mainmenu import MainMenu -from mamba.habitats.levelmenu import LevelMenu +from mamba.habitats.levelmenu import OfficialLevelMenu from mamba.habitats.userlevelmenu import UserLevelApi from mamba.habitats.level import LevelHabitat from mamba.habitats.editor import EditorHabitat @@ -40,7 +40,7 @@ start = EditorHabitat(Level(options.level, 'official')) elif options.level is not None: start = LevelHabitat(Level(options.level, 'official'), - LevelMenu.go_menu) + OfficialLevelMenu.go_menu) elif options.uncurated is not None: api = UserLevelApi("uncurated") start = LevelHabitat(api.get_level(options.uncurated), diff -r c81d5551cb17 -r 98ccef2a1a3c mamba/engine.py --- a/mamba/engine.py Sat Sep 17 14:28:39 2011 +0200 +++ b/mamba/engine.py Sat Sep 17 14:33:50 2011 +0200 @@ -124,3 +124,12 @@ @classmethod def post(cls): super(FlipArrowsEvent, cls).post() + + +class HabitatSetupEvent(UserEvent): + + TYPE = "SETUP_HABITAT" + + @classmethod + def post(cls): + super(HabitatSetupEvent, cls).post() diff -r c81d5551cb17 -r 98ccef2a1a3c mamba/habitats/levelmenu.py --- a/mamba/habitats/levelmenu.py Sat Sep 17 14:28:39 2011 +0200 +++ b/mamba/habitats/levelmenu.py Sat Sep 17 14:33:50 2011 +0200 @@ -3,7 +3,7 @@ from pygame.locals import KEYDOWN from mamba.constants import ESCAPE_KEYS -from mamba.engine import Habitat, NewHabitatEvent +from mamba.engine import Habitat, NewHabitatEvent, HabitatSetupEvent from mamba.gamestate import done_levels from mamba.data import get_official_levels from mamba.level import Level @@ -11,37 +11,50 @@ from mamba.widgets.levelbutton import LevelButton +OFFICIAL_LEVELS = [] + + class LevelMenu(Habitat): - level_namespace = 'official' + WIDTH = 5 def __init__(self): + print "init" super(LevelMenu, self).__init__() self.level_buttons = {} - WIDTH = 5 - container = GridContainer(width=WIDTH) - self.container.add(container) + self.container.add(GridContainer(width=self.WIDTH)) + self.container.add_callback(KEYDOWN, self.keydown_event) + + def on_enter(self): + print "enter" + super(LevelMenu, self).on_enter() + self.setup_levels() + + def dispatch(self, ev): + if HabitatSetupEvent.matches(ev): + self.setup_levels(ev) + return + super(LevelMenu, self).dispatch(ev) + + def setup_level(self, i, name): + level = self.get_level(name) + button = LevelButton((20 + 120 * (i % self.WIDTH), + 20 + 120 * (i // self.WIDTH)), + level) + button.add_callback('clicked', self.level_selected, name) + button.done = level.unique_name() in done_levels + self.container.add(button) + self.level_buttons[name] = button + + def setup_levels(self, ev=None): for i, name in enumerate(self.list_levels()): - level = self.get_level(name) - button = LevelButton((20 + 120 * (i % WIDTH), - 20 + 120 * (i // WIDTH)), - level) - button.add_callback('clicked', self.level_selected, name) - container.add(button) - self.level_buttons[name] = button - - self.container.add_callback(KEYDOWN, self.keydown_event) - self.update_buttons() + self.setup_level(i, name) def list_levels(self): - return get_official_levels() + raise NotImplementedError() def get_level(self, name): - return Level(name, self.level_namespace) - - def update_buttons(self): - for button in self.level_buttons.itervalues(): - button.done = button.level.unique_name() in done_levels + raise NotImplementedError() def level_selected(self, ev, widget, name): from mamba.habitats.level import LevelHabitat @@ -60,3 +73,25 @@ from mamba.habitats.mainmenu import MainMenu NewHabitatEvent.post(MainMenu()) return True + + +class OfficialLevelMenu(LevelMenu): + + level_namespace = 'official' + + def setup_levels(self, ev=None): + if ev is not None: + self._setup_levels() + else: + HabitatSetupEvent.post() + + def _setup_levels(self): + super(OfficialLevelMenu, self).setup_levels() + + def list_levels(self): + if not OFFICIAL_LEVELS: + OFFICIAL_LEVELS.extend(get_official_levels()) + return OFFICIAL_LEVELS[:] + + def get_level(self, name): + return Level(name, self.level_namespace) diff -r c81d5551cb17 -r 98ccef2a1a3c mamba/habitats/mainmenu.py --- a/mamba/habitats/mainmenu.py Sat Sep 17 14:28:39 2011 +0200 +++ b/mamba/habitats/mainmenu.py Sat Sep 17 14:33:50 2011 +0200 @@ -36,8 +36,8 @@ return button def start_event(self, ev, widget): - from mamba.habitats.levelmenu import LevelMenu - NewHabitatEvent.post(LevelMenu()) + from mamba.habitats.levelmenu import OfficialLevelMenu + NewHabitatEvent.post(OfficialLevelMenu()) return True def userlevels_event(self, ev, widget):