annotate gamelib/savegame.py @ 509:77a3f7f1c856

Add level name and timestamp to save games.
author Simon Cross <hodgestar@gmail.com>
date Thu, 26 Nov 2009 23:02:10 +0000
parents c2a4e3a24e9a
children 3e4bb2c9556c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
1 """Utilities and widgets for saving and restoring games."""
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
2
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
3 import xmlrpclib
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
4 import os
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
5 import StringIO
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
6 import base64
499
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
7 import zlib
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
8 import datetime
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
9
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
10 from pgu import gui
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
11 import pygame
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
12
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
13 import config
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
14 import version
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
15
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
16 TIMESTAMP_FORMAT = "%Y-%m-%dT%H:%M:%S"
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
17
499
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
18 def read_savegame(fullpath):
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
19 """Open a save game file."""
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
20 try:
499
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
21 xml = zlib.decompress(open(fullpath, "rb").read())
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
22 params, methodname = xmlrpclib.loads(xml)
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
23 if methodname != "foxassault":
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
24 raise SaveGameError("File does not appear to be a "
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
25 "Fox Assault save game.")
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
26 save_version = params[0]
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
27 if save_version != version.SAVE_GAME_VERSION:
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
28 raise SaveGameError("Incompatible save game version.")
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
29
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
30 data = params[1]
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
31
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
32 try:
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
33 snapshot = decode_snapshot(params[2])
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
34 except Exception, e:
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
35 snapshot = None
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
36
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
37 try:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
38 level_name = params[3]
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
39 except Exception, e:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
40 level_name = None
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
41
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
42 try:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
43 timestamp = datetime.datetime.strptime(params[4], TIMESTAMP_FORMAT)
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
44 except Exception, e:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
45 timestamp = None
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
46
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
47 except Exception, e:
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
48 raise SaveGameError("Failed to load game: %s" % (e,))
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
49
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
50 return data, snapshot, level_name, timestamp
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
51
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
52 def write_savegame(fullpath, data, snapshot, level_name, timestamp):
499
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
53 """Write a save game file."""
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
54 try:
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
55 snapshot_data = encode_snapshot(snapshot)
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
56 timestamp_str = timestamp.strftime(TIMESTAMP_FORMAT)
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
57 params = (version.SAVE_GAME_VERSION, data, snapshot_data, level_name, timestamp_str)
499
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
58 xml = xmlrpclib.dumps(params, "foxassault")
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
59 open(fullpath, "wb").write(zlib.compress(xml))
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
60 except Exception, e:
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
61 raise SaveGameError("Failed to save game: %s" % (e,))
c2a4e3a24e9a Factor out write_savegame method. Zlib compress save games to reduce space from ~600k to ~15k.
Simon Cross <hodgestar@gmail.com>
parents: 496
diff changeset
62
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
63 def encode_snapshot(snapshot):
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
64 """Encode a snapshot."""
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
65 snapshot_file = StringIO.StringIO()
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
66 pygame.image.save(snapshot, snapshot_file)
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
67 data = snapshot_file.getvalue()
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
68 data = base64.standard_b64encode(data)
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
69 return data
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
70
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
71 def decode_snapshot(data):
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
72 """Decode a snapshot."""
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
73 data = base64.standard_b64decode(data)
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
74 snapshot_file = StringIO.StringIO(data)
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
75 snapshot = pygame.image.load(snapshot_file, "snapshot.tga")
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
76 return snapshot
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
77
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
78
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
79 class SaveGameError(Exception):
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
80 pass
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
81
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
82
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
83 class BaseSaveRestoreDialog(gui.Dialog):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
84 """Save game dialog."""
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
85
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
86 TIMESTAMP_DISPLAY = "%H:%M, %d %b %Y"
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
87
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
88 def __init__(self, title_txt, button_txt, allow_new, cls="dialog"):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
89 self.value = None
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
90 self.save_folder = config.config.save_folder
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
91
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
92 self.save_games = {}
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
93 self._populate_save_games()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
94
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
95 if allow_new:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
96 self.name_input = gui.Input()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
97 else:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
98 self.name_input = None
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
99
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
100 td_style = {
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
101 'padding_left': 4,
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
102 'padding_right': 4,
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
103 'padding_top': 2,
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
104 'padding_bottom': 2,
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
105 }
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
106
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
107 self.save_list = gui.List(width=350, height=250)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
108 games = self.save_games.keys()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
109 games.sort()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
110 for name in games:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
111 self.save_list.add(name, value=name)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
112 self.save_list.set_vertical_scroll(0)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
113 self.save_list.connect(gui.CHANGE, self._save_list_change)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
114
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
115 self.image_container = gui.Container()
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
116
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
117 button_ok = gui.Button(button_txt)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
118 button_ok.connect(gui.CLICK, self._click_ok)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
119
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
120 button_cancel = gui.Button("Cancel")
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
121 button_cancel.connect(gui.CLICK, self._click_cancel)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
122
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
123 body = gui.Table()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
124 body.tr()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
125 body.td(self.save_list, style=td_style, colspan=2)
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
126 body.td(self.image_container, style=td_style, colspan=2)
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
127 body.tr()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
128 if self.name_input:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
129 body.td(gui.Label("Save as:"), style=td_style, align=1)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
130 body.td(self.name_input, style=td_style)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
131 else:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
132 body.td(gui.Spacer(0, 0), style=td_style, colspan=2)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
133 body.td(button_ok, style=td_style, align=1)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
134 body.td(button_cancel, style=td_style, align=1)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
135
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
136 title = gui.Label(title_txt, cls=cls + ".title.label")
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
137 gui.Dialog.__init__(self, title, body)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
138
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
139 def get_fullpath(self):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
140 """Return the fullpath of the select save game file or None."""
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
141 if self.value is None:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
142 return None
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
143 return os.path.join(self.save_folder, self.value + ".xml")
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
144
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
145 def _populate_save_games(self):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
146 """Read list of save games."""
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
147 for filename in os.listdir(self.save_folder):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
148 fullpath = os.path.join(self.save_folder, filename)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
149 root, ext = os.path.splitext(filename)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
150 if not os.path.isfile(fullpath):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
151 continue
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
152 if ext != ".xml":
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
153 continue
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
154 self.save_games[root] = self._create_image_widget(fullpath)
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
155
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
156 def _create_image_widget(self, fullpath):
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
157 """Create an image showing the contents of a save game file."""
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
158 try:
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
159 data, screenshot, level_name, timestamp = read_savegame(fullpath)
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
160 except SaveGameError:
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
161 return gui.Label("Bad Save Game")
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
162
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
163 tbl = gui.Table()
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
164
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
165 tbl.tr()
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
166 if screenshot is None:
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
167 tbl.td(gui.Label("No screenshot"))
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
168 else:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
169 tbl.td(gui.Image(screenshot))
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
170
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
171 tbl.tr()
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
172 if level_name is None:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
173 tbl.td(gui.Label("Level: ???"))
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
174 else:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
175 tbl.td(gui.Label("Level: %s" % (level_name,)))
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
176
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
177 if timestamp is not None:
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
178 tbl.tr()
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
179 tbl.td(gui.Label(timestamp.strftime(self.TIMESTAMP_DISPLAY)))
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
180
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
181 return tbl
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
182
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
183 def _save_list_change(self):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
184 if self.name_input:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
185 self.name_input.value = self.save_list.value
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
186
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
187 for w in self.image_container.widgets:
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
188 self.image_container.remove(w)
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
189
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
190 image_widget = self.save_games[self.save_list.value]
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
191 self.image_container.add(image_widget, 0, 0)
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
192
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
193 def _click_ok(self):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
194 if self.name_input:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
195 self.value = self.name_input.value
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
196 else:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
197 self.value = self.save_list.value
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
198 if self.value:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
199 self.send(gui.CHANGE)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
200 self.close()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
201
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
202 def _click_cancel(self):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
203 self.value = None
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
204 self.send(gui.CHANGE)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
205 self.close()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
206
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
207
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
208 class SaveDialog(BaseSaveRestoreDialog):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
209 """Save game dialog."""
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
210
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
211 def __init__(self, gameboard):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
212 BaseSaveRestoreDialog.__init__(self, "Save Game ...", "Save", allow_new=True)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
213 self.connect(gui.CHANGE, self._save, gameboard)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
214
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
215 def _save(self, gameboard):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
216 filename = self.get_fullpath()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
217 if filename is None:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
218 return
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
219
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
220 data = gameboard.save_game()
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
221 snapshot = gameboard.snapshot()
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
222 level_name = gameboard.level.level_name
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
223 timestamp = datetime.datetime.now()
496
bf90a2948e34 Basic snapshot support in save games added.
Simon Cross <hodgestar@gmail.com>
parents: 491
diff changeset
224
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
225 try:
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
226 write_savegame(filename, data, snapshot, level_name, timestamp)
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
227 except Exception, e:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
228 print "Failed to save game: %s" % (e,)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
229
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
230
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
231 class RestoreDialog(BaseSaveRestoreDialog):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
232 """Restore game dialog."""
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
233
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
234 def __init__(self, gameboard):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
235 BaseSaveRestoreDialog.__init__(self, "Load Game ...", "Load", allow_new=False)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
236 self.connect(gui.CHANGE, self._restore, gameboard)
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
237
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
238 def _restore(self, gameboard):
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
239 filename = self.get_fullpath()
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
240 if filename is None:
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
241 return
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
242
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
243 try:
509
77a3f7f1c856 Add level name and timestamp to save games.
Simon Cross <hodgestar@gmail.com>
parents: 499
diff changeset
244 data, screenshot, level_name, timestamp = read_savegame(filename)
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
245 except Exception, e:
491
75ef6ea3b7a6 Start of support for save game snapshots.
Simon Cross <hodgestar@gmail.com>
parents: 486
diff changeset
246 print "Failed to load game: %s" % (e,)
486
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
247 return
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
248
8897a436a8cb Factor out save game logic and (new, simplified) dialogs into their own module. Add preferences folder to concept to config. Save games under preferences folder.
Simon Cross <hodgestar@gmail.com>
parents:
diff changeset
249 gameboard.restore_game(data)