# HG changeset patch # User Simon Cross # Date 1302083523 -7200 # Node ID 21d34f1f15b26c998ce4a8a0ad4e170ff8165869 # Parent bf144d817113f264e052f3c8abd8ced3ae0e6b90 Press p to pause. diff -r bf144d817113 -r 21d34f1f15b2 skaapsteker/levelscene.py --- a/skaapsteker/levelscene.py Wed Apr 06 01:35:20 2011 +0200 +++ b/skaapsteker/levelscene.py Wed Apr 06 11:52:03 2011 +0200 @@ -1,7 +1,7 @@ """Scene wrapping a level object.""" from pygame.locals import (KEYDOWN, KEYUP, K_DOWN, K_ESCAPE, K_LEFT, K_RIGHT, - K_SEMICOLON, K_UP, K_q, K_x, K_z) + K_SEMICOLON, K_UP, K_p, K_q, K_x, K_z) from . import options import engine @@ -23,6 +23,7 @@ self._level_surface = self._level.get_surface() self._clip_rect = None self._world = physics.World() + self._paused = False # hackity, hack, hack for sprite in self._level.enemies: @@ -48,6 +49,7 @@ self._slow_key_map = { K_ESCAPE: self._quit, + K_p: self._toggle_pause, } if options['dvorak']: self._slow_key_map[K_SEMICOLON] = action('fire1') @@ -61,6 +63,14 @@ import menuscene # avoid circular import engine.ChangeScene.post(menuscene.MenuScene(self.game_state, self)) + def _toggle_pause(self): + if self._paused: + self._world.thaw() + self._paused = False + else: + self._world.freeze() + self._paused = True + def leave(self): """Freeze the scene, for serialization""" self._world.freeze() @@ -73,10 +83,11 @@ if self._clip_rect is None: self._clip_rect = pygame.Rect((0, 0), screen_surface.get_size()) - for key in self._fast_keys_down: - self._fast_key_map[key]() + if not self._paused: + for key in self._fast_keys_down: + self._fast_key_map[key]() + self._world.update() - self._world.update() self._update_clip_rect() self._level_surface.set_clip(self._clip_rect) @@ -87,6 +98,11 @@ fps_text = Text('FPS: %.1f' % engine.get_fps(), fps_text_pos) fps_text.draw(self._level_surface) + if self._paused: + paused_text_pos = self._clip_rect.centerx - 10, self._clip_rect.centery - 10 + paused_text = Text('Paused', paused_text_pos) + paused_text.draw(self._level_surface) + screen_surface.blit(self._level_surface, (0, 0), self._clip_rect) def _update_clip_rect(self):