annotate mamba/gamestate.py @ 267:1e8dca95c48a

Hook up hot-keys in editor for jerith
author Neil Muller <drnlmuller@gmail.com>
date Thu, 15 Sep 2011 12:54:16 +0200
parents 321f2eef40e3
children b371c2ea309e
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.data import filepath
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
9 from mamba.options import options
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
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 levels = []
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13 unlocked_levels = set()
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14 done_levels = set()
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
15
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
16
222
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
17 def level_done(level_name):
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
18 assert level_name in levels
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
19 done_levels.add(level_name)
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
20 save_state()
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
21
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
22
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
23 def load_state():
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
24 global unlocked_levels, done_levels
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
25 fn = os.path.join(options.save_location, 'gamestate.json')
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
26 if os.access(fn, os.R_OK):
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
27 f = open(fn, 'r')
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
28 state = json.load(f)
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
29 f.close()
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
30 unlocked_levels = set(state['unlocked_levels'])
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
31 done_levels = set(state['done_levels'])
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
32 else:
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
33 unlocked_levels = set((0,))
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
34
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
35
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
36 def save_state():
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
37 fn = os.path.join(options.save_location, 'gamestate.json')
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
38 if not os.path.isdir(options.save_location):
222
321f2eef40e3 Save game when level completed.
Simon Cross <hodgestar@gmail.com>
parents: 167
diff changeset
39 os.makedirs(options.save_location)
167
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
40 f = open(fn, 'w')
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
41 json.dump({
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
42 'unlocked_levels': list(unlocked_levels),
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
43 'done_levels': list(done_levels),
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
44 }, f)
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
45 f.close()
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
46
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
47
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48 def load_levels():
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
49 global levels
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
50 f = open(filepath('levels/index.txt'))
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
51 levels = []
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
52 for line in f.readlines():
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
53 line = line.strip()
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
54 if line and line[0] != '#':
ce30befccc94 Missing files
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
55 levels.append(line)