annotate mamba/data.py @ 540:efe1b61aad08

Start of help and an exit button.
author Simon Cross <hodgestar@gmail.com>
date Sun, 18 Sep 2011 01:37:03 +0200
parents b49f6dde8731
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 '''Simple data loader module.
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3 Loads data files from the "data" directory shipped with a game.
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5 Enhancing this to handle caching etc. is left as an exercise for the reader.
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
6
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
7 Note that pyglet users should probably just add the data directory to the
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8 pyglet.resource search path.
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9 '''
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11 import os
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12
8
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
13 import pygame
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
14
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
15 from mamba.gamestate import save_path
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
16
8
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
17
0
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 data_py = os.path.abspath(os.path.dirname(__file__))
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19 data_dir = os.path.normpath(os.path.join(data_py, '..', 'data'))
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
20
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
21
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
22 def filepath(filename, is_user_dir=False):
0
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
23 '''Determine the path to a file in the data directory.
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
24 '''
29
b48c47af7801 Fix filepath bug in data.py (same as last pyweek)
Neil Muller <drnlmuller@gmail.com>
parents: 8
diff changeset
25 filename = os.path.join(*filename.split('/'))
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
26 if is_user_dir:
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
27 return os.path.join(save_path(filename))
0
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 return os.path.join(data_dir, filename)
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
31 def load_file(filename, mode='rb', is_user_dir=False):
0
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 '''Open a file in the data directory.
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
34 "mode" is passed as the second arg to open().
08941f788c15 Skellington! Inna repo!
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
35 '''
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
36 return open(filepath(filename, is_user_dir), mode)
8
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
37
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
38
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
39 IMAGES = {}
65
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
40 MUTATED_IMAGES = {}
8
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
41
66ae99f6903e First stab at tile/level stuff.
Jeremy Thurgood <firxen@gmail.com>
parents: 0
diff changeset
42
65
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
43 def load_image(filename, mutators=()):
256
9827ce469834 Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better
Neil Muller <drnlmuller@gmail.com>
parents: 226
diff changeset
44 if not pygame.display.get_init():
9827ce469834 Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better
Neil Muller <drnlmuller@gmail.com>
parents: 226
diff changeset
45 # Just check image exists
9827ce469834 Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better
Neil Muller <drnlmuller@gmail.com>
parents: 226
diff changeset
46 testfile = open(filepath(filename), 'rb')
9827ce469834 Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better
Neil Muller <drnlmuller@gmail.com>
parents: 226
diff changeset
47 testfile.close()
9827ce469834 Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better
Neil Muller <drnlmuller@gmail.com>
parents: 226
diff changeset
48 return None
65
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
49 key = (filename, mutators)
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
50 if key in MUTATED_IMAGES:
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
51 return MUTATED_IMAGES[key]
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
52 if filename in IMAGES:
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
53 image = IMAGES[filename]
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
54 else:
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
55 image = pygame.image.load(filepath(filename))
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
56 image = image.convert_alpha(pygame.display.get_surface())
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
57 IMAGES[filename] = image
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
58 for mutator in mutators:
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
59 image = mutator(image)
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
60 MUTATED_IMAGES[key] = image
ca2206efeeb1 Add mutators concept to image loader.
Simon Cross <hodgestar@gmail.com>
parents: 29
diff changeset
61 return image
212
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 126
diff changeset
62
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 126
diff changeset
63
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 126
diff changeset
64 def load_tile_image(image_name, tileset='common', mutators=()):
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 126
diff changeset
65 filename = "tiles/%s/%s.png" % (tileset, image_name)
e768056b0588 Refactor tile image loading stuff. More magic is good, right?
Jeremy Thurgood <firxen@gmail.com>
parents: 126
diff changeset
66 return load_image(filename, mutators)
226
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
67
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
68
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
69 def check_tileset_legal(tileset):
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
70 return os.path.isdir(os.path.join(data_dir, 'tiles', tileset))
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
71
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
72
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
73 def check_level_exists(level, level_dir, is_user_dir=False):
226
cd5377697c9e Add some helpers to data.py
Neil Muller <drnlmuller@gmail.com>
parents: 212
diff changeset
74 return os.path.isfile(os.path.join(data_dir, 'levels', '%s.txt' % level))
271
49c125e8bc2a More helpers
Neil Muller <drnlmuller@gmail.com>
parents: 256
diff changeset
75
49c125e8bc2a More helpers
Neil Muller <drnlmuller@gmail.com>
parents: 256
diff changeset
76
402
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
77 def get_official_levels():
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
78 f = open(filepath('levels/index.txt'))
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
79 levels = []
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
80 for line in f.readlines():
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
81 line = line.strip()
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
82 if line and line[0] != '#':
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
83 levels.append(line)
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
84 return levels
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
85
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
86
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
87 def get_level_list(level_dir, is_user_dir=False):
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
88 level_dir = filepath(level_dir, is_user_dir)
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
89 if is_user_dir:
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
90 if not os.path.isdir(level_dir):
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
91 os.makedirs(level_dir)
001c3797a63b Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents: 325
diff changeset
92 files = [os.path.splitext(x) for x in os.listdir(level_dir)]
432
b49f6dde8731 Sort user level list.
Simon Cross <hodgestar@gmail.com>
parents: 402
diff changeset
93 return sorted([name for name, ext in files if ext == '.txt'])
273
dcd0642e12e0 Ever helpful data helpers
Neil Muller <drnlmuller@gmail.com>
parents: 271
diff changeset
94
dcd0642e12e0 Ever helpful data helpers
Neil Muller <drnlmuller@gmail.com>
parents: 271
diff changeset
95
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 273
diff changeset
96 def get_tileset_list():
273
dcd0642e12e0 Ever helpful data helpers
Neil Muller <drnlmuller@gmail.com>
parents: 271
diff changeset
97 tiles = os.listdir(filepath('tiles'))
dcd0642e12e0 Ever helpful data helpers
Neil Muller <drnlmuller@gmail.com>
parents: 271
diff changeset
98 return [x for x in tiles if check_tileset_legal(x)]
325
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 273
diff changeset
99
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 273
diff changeset
100
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 273
diff changeset
101 def get_track_list():
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 273
diff changeset
102 tracks = os.listdir(filepath('music'))
00c36ff53de9 Teach editor about background tracks
Neil Muller <drnlmuller@gmail.com>
parents: 273
diff changeset
103 return [x for x in tracks if os.path.splitext(x)[1] == '.ogg']