Mercurial > skaapsteker
view skaapsteker/levelscene.py @ 104:12ce1d131a72
Hack in resume game option
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 04 Apr 2011 20:53:45 +0200 |
parents | 2e913a89e69d |
children | bf7d511d3650 |
line wrap: on
line source
"""Scene wrapping a level object.""" import engine import level import physics import sprites.player import pygame from pygame.locals import KEYDOWN, K_UP, K_DOWN, K_LEFT, K_RIGHT, K_x, K_z, \ K_q, K_ESCAPE class LevelScene(engine.Scene): KEY_TO_PLAYER_ACTION = { K_LEFT: 'action_left', K_RIGHT: 'action_right', K_UP: 'action_up', K_DOWN: 'action_down', K_x: 'action_fire1', K_z: 'action_fire2', } def __init__(self, leveldef, player=None): if not player: self._player = sprites.player.Player() else: self._player = player self._level = level.Level(leveldef, self._player) self._level_surface = self._level.get_surface() self._pos = (0, 0) self._world = physics.World() self.frozen = False # hackity, hack, hack for sprite in self._level.enemies: self._world.add(sprite) for sprite in self._level.tiles: self._world.add(sprite) self._world.add(self._player) self._build_action_map() def _build_action_map(self): self._key_map = {} for key, action in self.KEY_TO_PLAYER_ACTION.items(): self._key_map[key] = getattr(self._player, action) for key in [K_q, K_ESCAPE]: self._key_map[key] = self._quit def _quit(self): import menuscene # avoid circular import self.freeze() engine.ChangeScene.post(menuscene.MenuScene(self)) def freeze(self): """Freeze the scene, for serialization""" self.frozen = True self._world.freeze() def thaw(self): """Unfreeze""" self._world.thaw() self.frozen = False def draw(self, screen_surface): self._world.update() clip_rect = pygame.Rect(self._pos, screen_surface.get_size()) self._level_surface.set_clip(clip_rect) self._level.draw(self._level_surface) self._world.draw(self._level_surface) screen_surface.blit(self._level_surface, (0, 0), clip_rect) def dispatch(self, ev): if ev.type is KEYDOWN: action = self._key_map.get(ev.key) if action is not None: action()