Mercurial > mamba
comparison 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 |
comparison
equal
deleted
inserted
replaced
401:20b424c5c1ef | 402:001c3797a63b |
---|---|
10 | 10 |
11 import os | 11 import os |
12 | 12 |
13 import pygame | 13 import pygame |
14 | 14 |
15 from mamba.gamestate import save_path | |
16 | |
15 | 17 |
16 data_py = os.path.abspath(os.path.dirname(__file__)) | 18 data_py = os.path.abspath(os.path.dirname(__file__)) |
17 data_dir = os.path.normpath(os.path.join(data_py, '..', 'data')) | 19 data_dir = os.path.normpath(os.path.join(data_py, '..', 'data')) |
18 | 20 |
19 | 21 |
20 def filepath(filename): | 22 def filepath(filename, is_user_dir=False): |
21 '''Determine the path to a file in the data directory. | 23 '''Determine the path to a file in the data directory. |
22 ''' | 24 ''' |
23 filename = os.path.join(*filename.split('/')) | 25 filename = os.path.join(*filename.split('/')) |
26 if is_user_dir: | |
27 return os.path.join(save_path(filename)) | |
24 return os.path.join(data_dir, filename) | 28 return os.path.join(data_dir, filename) |
25 | 29 |
26 | 30 |
27 def load_file(filename, mode='rb'): | 31 def load_file(filename, mode='rb', is_user_dir=False): |
28 '''Open a file in the data directory. | 32 '''Open a file in the data directory. |
29 | 33 |
30 "mode" is passed as the second arg to open(). | 34 "mode" is passed as the second arg to open(). |
31 ''' | 35 ''' |
32 return open(os.path.join(data_dir, filename), mode) | 36 return open(filepath(filename, is_user_dir), mode) |
33 | 37 |
34 | 38 |
35 IMAGES = {} | 39 IMAGES = {} |
36 MUTATED_IMAGES = {} | 40 MUTATED_IMAGES = {} |
37 | 41 |
64 | 68 |
65 def check_tileset_legal(tileset): | 69 def check_tileset_legal(tileset): |
66 return os.path.isdir(os.path.join(data_dir, 'tiles', tileset)) | 70 return os.path.isdir(os.path.join(data_dir, 'tiles', tileset)) |
67 | 71 |
68 | 72 |
69 def check_level_exists(level): | 73 def check_level_exists(level, level_dir, is_user_dir=False): |
70 return os.path.isfile(os.path.join(data_dir, 'levels', '%s.txt' % level)) | 74 return os.path.isfile(os.path.join(data_dir, 'levels', '%s.txt' % level)) |
71 | 75 |
72 | 76 |
73 def get_level_list(): | 77 def get_official_levels(): |
74 files = [os.path.splitext(x) for x in os.listdir(filepath('levels'))] | 78 f = open(filepath('levels/index.txt')) |
75 return [x[0] for x in files if x[1] == '.txt'] | 79 levels = [] |
80 for line in f.readlines(): | |
81 line = line.strip() | |
82 if line and line[0] != '#': | |
83 levels.append(line) | |
84 return levels | |
85 | |
86 | |
87 def get_level_list(level_dir, is_user_dir=False): | |
88 level_dir = filepath(level_dir, is_user_dir) | |
89 if is_user_dir: | |
90 if not os.path.isdir(level_dir): | |
91 os.makedirs(level_dir) | |
92 files = [os.path.splitext(x) for x in os.listdir(level_dir)] | |
93 return [name for name, ext in files if ext == '.txt'] | |
76 | 94 |
77 | 95 |
78 def get_tileset_list(): | 96 def get_tileset_list(): |
79 tiles = os.listdir(filepath('tiles')) | 97 tiles = os.listdir(filepath('tiles')) |
80 return [x for x in tiles if check_tileset_legal(x)] | 98 return [x for x in tiles if check_tileset_legal(x)] |