diff gamelib/savegame.py @ 512:b112bcf4d435

Add restore game button to main menu.
author Simon Cross <hodgestar@gmail.com>
date Thu, 26 Nov 2009 23:36:20 +0000
parents 3e4bb2c9556c
children 882b582da618
line wrap: on
line diff
--- a/gamelib/savegame.py	Thu Nov 26 23:33:49 2009 +0000
+++ b/gamelib/savegame.py	Thu Nov 26 23:36:20 2009 +0000
@@ -12,6 +12,8 @@
 
 import config
 import version
+import gameboard
+import serializer
 
 TIMESTAMP_FORMAT = "%Y-%m-%dT%H:%M:%S"
 
@@ -239,11 +241,11 @@
 class RestoreDialog(BaseSaveRestoreDialog):
     """Restore game dialog."""
 
-    def __init__(self, gameboard):
+    def __init__(self, restore_func):
         BaseSaveRestoreDialog.__init__(self, "Load Game ...", "Load", allow_new=False)
-        self.connect(gui.CHANGE, self._restore, gameboard)
+        self.connect(gui.CHANGE, self._restore, restore_func)
 
-    def _restore(self, gameboard):
+    def _restore(self, restore_func):
         filename = self.get_fullpath()
         if filename is None:
             return
@@ -254,4 +256,14 @@
             print "Failed to load game: %s" % (e,)
             return
 
-        gameboard.restore_game(data)
+        if 'refid' not in data or 'class' not in data or data['class'] != gameboard.GameBoard.__name__:
+            print "Failed to load game: Invalid game data."
+            return
+
+        try:
+            new_gameboard = serializer.unsimplify(data)
+        except Exception, e:
+            print "Failed to load game: %s" % (e,)
+            return
+
+        restore_func(new_gameboard)