Mercurial > mamba
view mamba/habitats/level.py @ 564:6a4f9a2f6820
Include author in caption if available
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Tue, 18 Oct 2011 12:50:56 +0200 |
parents | dee11e9a37b0 |
children |
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.author = level.author 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() if self.author: pygame.display.set_caption('%s: %s by %s' % (NAME, self.level_name, self.author)) else: 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