view mamba/habitats/level.py @ 416:30ce046d08c3

Fix clicking in dead dialog bug
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 17 Sep 2011 16:40:29 +0200
parents f1ba457772ae
children dee11e9a37b0
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, SnakeDiedEvent
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)
        self.game_widget = GameWidget(self.world)
        self.container.add(self.game_widget)
        self.container.add_callback(KEYDOWN, self.keydown_event)
        self.container.add_callback(LevelCompletedEvent, self.level_completed)
        self.container.add_callback(SnakeDiedEvent, self.snake_died)

    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

    def snake_died(self, ev, widget):
        if not self.world.pause():
            return False
        self.display_dialog(MessageBox((300, 200), 'You died!\n%s' % ev.reason,
                            self.game_widget.restart))
        self.world.snake.alive = False
        return True