view mamba/habitats/level.py @ 415:f1ba457772ae

Go to next level, not back to menu. (Official levels only, though.)
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 17 Sep 2011 15:19:57 +0200
parents 35680740f163
children 30ce046d08c3
line wrap: on
line source

"""Where a level object hides."""

from pygame.locals import KEYDOWN

from mamba.constants import ESCAPE_KEYS
from mamba.engine import Habitat, LevelCompletedEvent
from mamba.gamestate import level_done
from mamba.widgets.game import GameWidget
from mamba.widgets.messagebox import MessageBox
from mamba.world import World


class LevelHabitat(Habitat):
    def __init__(self, level, go_menu, go_next_level):
        super(LevelHabitat, self).__init__()
        self.go_menu = go_menu
        self.go_next_level = go_next_level
        self.world = World(level)
        game_widget = GameWidget(self.world)
        self.container.add(game_widget)
        self.container.add_callback(KEYDOWN, self.keydown_event)
        self.container.add_callback(LevelCompletedEvent, self.level_completed)

    def keydown_event(self, ev, widget):
        if ev.key in ESCAPE_KEYS:
            self.world.pause()
            self.go_menu()
            return True

    def level_completed(self, ev, widget):
        if not self.world.pause():
            return False
        self.display_dialog(
            MessageBox((300, 200), 'Level complete!', self.go_next_level))
        level_done(self.world.level.unique_name())
        return True