view mamba/habitats/levelmenu.py @ 322:86c5c6afdac0

Thumbnails on the level screen
author Stefano Rivera <stefano@rivera.za.net>
date Fri, 16 Sep 2011 20:01:13 +0200
parents fba74abad7b7
children 8643c7dbc8ad
line wrap: on
line source

"""Level menu."""

from pygame.locals import KEYDOWN

from mamba.constants import ESCAPE_KEYS
from mamba.engine import Habitat, NewHabitatEvent
from mamba.gamestate import levels, done_levels
from mamba.level import Level
from mamba.widgets.levelbutton import LevelButton


class LevelMenu(Habitat):

    def __init__(self):
        super(LevelMenu, self).__init__()
        self.level_buttons = {}
        for i, name in enumerate(levels):
            level = Level(name)
            button = LevelButton((20 + 120 * i, 20), level,
                                 done=name in done_levels)
            button.add_callback('clicked', self.level_selected, name)
            self.container.add(button)
            self.level_buttons[name] = button
        self.container.add_callback(KEYDOWN, self.keydown_event)
        self.update_buttons()

    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))
        return True

    def keydown_event(self, ev, widget):
        if ev.key in ESCAPE_KEYS:
            return self.return_to_mainmenu(ev, widget)

    def return_to_mainmenu(self, ev, widget):
        from mamba.habitats.mainmenu import MainMenu
        NewHabitatEvent.post(MainMenu())
        return True