Mercurial > mamba
changeset 256:9827ce469834
Add more validation exceptions to new map loading code. Handle trying to load when display hasn't been initiliased better
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Thu, 15 Sep 2011 01:34:42 +0200 |
parents | 59166ae6e864 |
children | 232c183346e9 |
files | mamba/data.py mamba/level.py |
diffstat | 2 files changed, 24 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mamba/data.py Thu Sep 15 01:32:50 2011 +0200 +++ b/mamba/data.py Thu Sep 15 01:34:42 2011 +0200 @@ -37,6 +37,11 @@ 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]
--- a/mamba/level.py Thu Sep 15 01:32:50 2011 +0200 +++ b/mamba/level.py Thu Sep 15 01:34:42 2011 +0200 @@ -2,6 +2,7 @@ Level for our shiny game. """ +import pygame from pygame.surface import Surface from pygame.sprite import RenderUpdates @@ -179,15 +180,28 @@ def setup_sprites(self, sprites_ascii): self.extra_sprites = {} + sprite_positions = [] for sprite_ascii in sprites_ascii: pos, _sep, rest = sprite_ascii.partition(':') - pos = [int(x.strip()) for x in pos.split(',')] + try: + pos = [int(x.strip()) for x in pos.split(',')] + except ValueError: + raise InvalidMapError("Sprite position must be two integers." + "Got %s" % pos) class_name, rest = rest.split(None, 1) args = rest.split() sprite_id, args = args[0], args[1:] - cls = sprites.find_sprite(class_name) + try: + cls = sprites.find_sprite(class_name) + except KeyError: + raise InvalidMapError("Unknown Sprite class: %s" % class_name) sprite = cls(*args) + if pos in sprite_positions: + raise InvalidMapError('Multiple sprites at %s.' % pos) + sprite_positions.append(pos) sprite.set_tile_pos(pos) + if sprite_id in self.extra_sprites: + raise InvalidMapError('Duplicate sprite id: %s.' % sprite_id) self.extra_sprites[sprite_id] = sprite self.sprites.add(sprite) @@ -225,6 +239,9 @@ return sprites.tile_sizify((x, y)) def make_background(self): + if not pygame.display.init(): + # Skip if we're not actuallt in pygame + return sx, sy = self.get_tile_size() self.background = Surface(self.get_size()) [self.background.blit(self.tileset.floor, sprites.tile_sizify((x, y)))