view mamba/habitats/level.py @ 531:dee11e9a37b0

Caption fiddling
author Neil Muller <drnlmuller@gmail.com>
date Sun, 18 Sep 2011 01:10:32 +0200
parents 30ce046d08c3
children 6a4f9a2f6820
line wrap: on
line source

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

import pygame.display
from pygame.locals import KEYDOWN

from mamba.constants import ESCAPE_KEYS, NAME
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.level_name = level.name
        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 on_enter(self):
        """Set the caption to the level name"""
        super(LevelHabitat, self).on_enter()
        pygame.display.set_caption('%s: %s' % (NAME, self.level_name))

    def on_exit(self):
        """Fix name"""
        super(LevelHabitat, self).on_exit()
        pygame.display.set_caption(NAME)

    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