view mamba/habitats/levelmenu.py @ 236:09247e08aeda

Refactor edit calling code. Tweak toolbar layout
author Neil Muller <drnlmuller@gmail.com>
date Wed, 14 Sep 2011 23:32:08 +0200
parents bea4857487de
children e6a3b00f997b
line wrap: on
line source

"""Level menu."""

from pygame.locals import KEYDOWN

from mamba.gamestate import levels, unlocked_levels, done_levels
from mamba.constants import ESCAPE_KEYS
from mamba.engine import Habitat, NewHabitatEvent
from mamba.widgets.imagebutton import LockableTextButton


class LevelMenu(Habitat):

    def __init__(self):
        super(LevelMenu, self).__init__()
        self.level_buttons = []
        for level, name in enumerate(levels):
            button = LockableTextButton((50 + 75 * level, 100), str(level + 1),
                                        color='white')
            button.add_callback('clicked', self.level_selected, name)
            button.locked = level not in unlocked_levels
            self.container.add(button)
            self.level_buttons.append(button)
        self.container.add_callback(KEYDOWN, self.keydown_event)
        self.update_button_colors()

    def update_button_colors(self):
        for level, button in enumerate(self.level_buttons):
            if not button.locked and level not in done_levels:
                button.color = 'green'
            else:
                button.color = 'white'

    def level_selected(self, ev, widget, name):
        # Demo:
        if widget.locked:
            widget.locked = False
            self.update_button_colors()
            return True

        if not widget.locked:
            from mamba.habitats.level import LevelHabitat
            NewHabitatEvent.post(LevelHabitat(name))
            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