Mercurial > mamba
view mamba/data.py @ 560:a85993b00fd7
Unbreak thing placement
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Mon, 17 Oct 2011 18:02:49 +0200 |
parents | b49f6dde8731 |
children |
line wrap: on
line source
'''Simple data loader module. Loads data files from the "data" directory shipped with a game. Enhancing this to handle caching etc. is left as an exercise for the reader. Note that pyglet users should probably just add the data directory to the pyglet.resource search path. ''' import os import pygame from mamba.gamestate import save_path data_py = os.path.abspath(os.path.dirname(__file__)) data_dir = os.path.normpath(os.path.join(data_py, '..', 'data')) def filepath(filename, is_user_dir=False): '''Determine the path to a file in the data directory. ''' filename = os.path.join(*filename.split('/')) if is_user_dir: return os.path.join(save_path(filename)) return os.path.join(data_dir, filename) def load_file(filename, mode='rb', is_user_dir=False): '''Open a file in the data directory. "mode" is passed as the second arg to open(). ''' return open(filepath(filename, is_user_dir), mode) IMAGES = {} MUTATED_IMAGES = {} def load_image(filename, mutators=()): if not pygame.display.get_init(): # Just check image exists testfile = open(filepath(filename), 'rb') testfile.close() return None key = (filename, mutators) if key in MUTATED_IMAGES: return MUTATED_IMAGES[key] if filename in IMAGES: image = IMAGES[filename] else: image = pygame.image.load(filepath(filename)) image = image.convert_alpha(pygame.display.get_surface()) IMAGES[filename] = image for mutator in mutators: image = mutator(image) MUTATED_IMAGES[key] = image return image def load_tile_image(image_name, tileset='common', mutators=()): filename = "tiles/%s/%s.png" % (tileset, image_name) return load_image(filename, mutators) def check_tileset_legal(tileset): return os.path.isdir(os.path.join(data_dir, 'tiles', tileset)) def check_level_exists(level, level_dir, is_user_dir=False): return os.path.isfile(os.path.join(data_dir, 'levels', '%s.txt' % level)) def get_official_levels(): f = open(filepath('levels/index.txt')) levels = [] for line in f.readlines(): line = line.strip() if line and line[0] != '#': levels.append(line) return levels def get_level_list(level_dir, is_user_dir=False): level_dir = filepath(level_dir, is_user_dir) if is_user_dir: if not os.path.isdir(level_dir): os.makedirs(level_dir) files = [os.path.splitext(x) for x in os.listdir(level_dir)] return sorted([name for name, ext in files if ext == '.txt']) def get_tileset_list(): tiles = os.listdir(filepath('tiles')) return [x for x in tiles if check_tileset_legal(x)] def get_track_list(): tracks = os.listdir(filepath('music')) return [x for x in tracks if os.path.splitext(x)[1] == '.ogg']