changeset 104:12ce1d131a72

Hack in resume game option
author Neil Muller <drnlmuller@gmail.com>
date Mon, 04 Apr 2011 20:53:45 +0200
parents aaef228b6358
children c455b7925212
files skaapsteker/levelscene.py skaapsteker/menuscene.py skaapsteker/physics.py
diffstat 3 files changed, 31 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/skaapsteker/levelscene.py	Mon Apr 04 20:46:44 2011 +0200
+++ b/skaapsteker/levelscene.py	Mon Apr 04 20:53:45 2011 +0200
@@ -28,6 +28,7 @@
         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:
@@ -47,7 +48,18 @@
 
     def _quit(self):
         import menuscene # avoid circular import
-        engine.ChangeScene.post(menuscene.MenuScene())
+        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()
--- a/skaapsteker/menuscene.py	Mon Apr 04 20:46:44 2011 +0200
+++ b/skaapsteker/menuscene.py	Mon Apr 04 20:53:45 2011 +0200
@@ -6,12 +6,16 @@
 from .widgets.text import Text, TextChoice
 
 class MenuScene(Scene):
-    def __init__(self):
+    def __init__(self, cur_game=None):
         super(MenuScene, self).__init__()
         self.widgets.append(Text("MENU:", (50, 50), color='white', size=48))
-        choice = TextChoice(("level1", "level2", "Quit"), (50, 100), color='white')
-        choice.callbacks.append(self.selected)
-        self.widgets.append(choice)
+        self.cur_game = cur_game
+        if cur_game is None:
+            self.choice = TextChoice(("level1", "level2", "Quit"), (50, 100), color='white')
+        else:
+            self.choice = TextChoice(("level1", "level2", "Resume Game", "Quit"), (50, 100), color='white')
+        self.choice.callbacks.append(self.selected)
+        self.widgets.append(self.choice)
 
     def selected(self, option):
         "Callback from menu TextChoice"
@@ -19,8 +23,11 @@
             ChangeScene.post(LevelScene('level1'))
         elif option == 1:
             ChangeScene.post(LevelScene('level2'))
-        elif option == 2:
+        elif option == len(self.choice.options) - 1:
             pygame.event.post(pygame.event.Event(QUIT))
+        elif option == 2 and self.cur_game is not None:
+            self.cur_game.thaw()
+            ChangeScene.post(self.cur_game)
 
     def draw(self, surface):
         surface.fill(pygame.Color('black'))
--- a/skaapsteker/physics.py	Mon Apr 04 20:46:44 2011 +0200
+++ b/skaapsteker/physics.py	Mon Apr 04 20:53:45 2011 +0200
@@ -90,6 +90,12 @@
         self._collision_groups = { None: pygame.sprite.Group() }
         self._last_time = None
 
+    def freeze(self):
+        self._last_time = None
+
+    def thaw(self):
+        self._last_time = time.time()
+
     def add(self, sprite):
         sprite.init_pos()
         self._all.add(sprite)