Mercurial > mamba
annotate mamba/data.py @ 402:001c3797a63b
Editor now uses templates and the user level directory.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Sat, 17 Sep 2011 12:56:26 +0200 |
parents | 00c36ff53de9 |
children | b49f6dde8731 |
rev | line source |
---|---|
0 | 1 '''Simple data loader module. |
2 | |
3 Loads data files from the "data" directory shipped with a game. | |
4 | |
5 Enhancing this to handle caching etc. is left as an exercise for the reader. | |
6 | |
7 Note that pyglet users should probably just add the data directory to the | |
8 pyglet.resource search path. | |
9 ''' | |
10 | |
11 import os | |
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 | 18 data_py = os.path.abspath(os.path.dirname(__file__)) |
19 data_dir = os.path.normpath(os.path.join(data_py, '..', 'data')) | |
20 | |
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 | 23 '''Determine the path to a file in the data directory. |
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 | 28 return os.path.join(data_dir, filename) |
29 | |
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 | 32 '''Open a file in the data directory. |
33 | |
34 "mode" is passed as the second arg to open(). | |
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 | 75 |
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)] |
001c3797a63b
Editor now uses templates and the user level directory.
Jeremy Thurgood <firxen@gmail.com>
parents:
325
diff
changeset
|
93 return [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'] |