changeset 173:21d34f1f15b2

Press p to pause.
author Simon Cross <hodgestar@gmail.com>
date Wed, 06 Apr 2011 11:52:03 +0200
parents bf144d817113
children 8774c170a232
files skaapsteker/levelscene.py
diffstat 1 files changed, 20 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- 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):