annotate mamba/gamestate.py @ 572:84616c7db2e7

ensure save dir exists before trying to save
author Neil Muller <drnlmuller@gmail.com>
date Tue, 20 Nov 2012 23:37:46 +0200
parents 001c3797a63b
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 import os
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3 try:
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
4 import json
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
5 except ImportError:
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6 import simplejson as json # pyflakes:ignore
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 from mamba.options import options
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
10
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
11 levels = []
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 done_levels = set()
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14
399
12d67f69e6b2 Support for user levels.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
15 def save_path(path):
12d67f69e6b2 Support for user levels.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
16 return os.path.join(options.save_location, *path.split('/'))
12d67f69e6b2 Support for user levels.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
17
12d67f69e6b2 Support for user levels.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
18
572
84616c7db2e7 ensure save dir exists before trying to save
Neil Muller <drnlmuller@gmail.com>
parents: 402
diff changeset
19 def ensure_save_path_exists(path):
84616c7db2e7 ensure save dir exists before trying to save
Neil Muller <drnlmuller@gmail.com>
parents: 402
diff changeset
20 location = save_path(path)
84616c7db2e7 ensure save dir exists before trying to save
Neil Muller <drnlmuller@gmail.com>
parents: 402
diff changeset
21 if not os.path.isdir(location):
84616c7db2e7 ensure save dir exists before trying to save
Neil Muller <drnlmuller@gmail.com>
parents: 402
diff changeset
22 os.makedirs(location)
84616c7db2e7 ensure save dir exists before trying to save
Neil Muller <drnlmuller@gmail.com>
parents: 402
diff changeset
23
84616c7db2e7 ensure save dir exists before trying to save
Neil Muller <drnlmuller@gmail.com>
parents: 402
diff changeset
24
222
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
25 def level_done(level_name):
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
26 done_levels.add(level_name)
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
27 save_state()
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
28
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
29
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
30 def load_state():
355
7d5bf8e72c61 Restore --level.
Simon Cross <hodgestar@gmail.com>
parents: 310
diff changeset
31 done_levels.clear()
399
12d67f69e6b2 Support for user levels.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
32 fn = save_path('gamestate.json')
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
33 if os.access(fn, os.R_OK):
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
34 f = open(fn, 'r')
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
35 state = json.load(f)
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
36 f.close()
355
7d5bf8e72c61 Restore --level.
Simon Cross <hodgestar@gmail.com>
parents: 310
diff changeset
37 done_levels.update(state['done_levels'])
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
38
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
39
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
40 def save_state():
399
12d67f69e6b2 Support for user levels.
Jeremy Thurgood <firxen@gmail.com>
parents: 361
diff changeset
41 fn = save_path('gamestate.json')
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
42 if not os.path.isdir(options.save_location):
222
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
43 os.makedirs(options.save_location)
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
44 f = open(fn, 'w')
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
45 json.dump({
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
46 'done_levels': list(done_levels),
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
47 }, f)
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48 f.close()