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)]