# HG changeset patch # User Stefano Rivera # Date 1378584189 -7200 # Node ID bf7960e49063f9d425f997f71c1516b990b80f2b # Parent 400f52d4279dc1d2e92d02d380383866300eaa5f Inventory diff -r 400f52d4279d -r bf7960e49063 nagslang/mutators.py --- a/nagslang/mutators.py Sat Sep 07 22:03:00 2013 +0200 +++ b/nagslang/mutators.py Sat Sep 07 22:03:09 2013 +0200 @@ -57,10 +57,28 @@ return image +class ImageCentre(Mutator): + def __init__(self, size): + super(ImageCentre, self).__init__(ImageCentre.centre, size) + + @classmethod + def centre(cls, image, size): + if image.get_size() == size: + return image + surf = pygame.surface.Surface(size, pygame.locals.SRCALPHA, image) + surf.blit(image, ((size[0] - image.get_width()) / 2, + (size[1] - image.get_height()) / 2)) + return surf + + def rotator(angle): return Mutator(rotate, angle) +def scaler(size): + return Mutator(scale, size) + + # Identity mutator NULL = Mutator(lambda x: x) diff -r 400f52d4279d -r bf7960e49063 nagslang/screens/area.py --- a/nagslang/screens/area.py Sat Sep 07 22:03:00 2013 +0200 +++ b/nagslang/screens/area.py Sat Sep 07 22:03:09 2013 +0200 @@ -4,6 +4,8 @@ import pymunk import pymunk.pygame_util +from nagslang.resources import resources +from nagslang.mutators import ImageCentre, scaler from nagslang.options import options from nagslang.constants import ( COLLISION_TYPE_WALL, COLLISION_TYPE_PLAYER, CALLBACK_COLLIDERS, @@ -256,6 +258,7 @@ overlay.render(surface, render_rect.topleft, max_width) break self.render_health_bar(surface) + self.render_inventory(surface) def tick_protagonist(self): dx, dy = self.keys.get_direction() @@ -281,7 +284,7 @@ self._level.overlay_drawables.remove(drawable.overlay) def render_health_bar(self, surface, damage_experienced=None): - bar_surface = pygame.Surface((110, 50)).convert(surface) + bar_surface = pygame.Surface((110, 40)).convert(surface) if damage_experienced: health_box_colour = pygame.color.THECOLORS['red'] else: @@ -291,8 +294,31 @@ health_colour = pygame.color.THECOLORS['red'] else: health_colour = pygame.color.THECOLORS['violetred3'] - rect = pygame.Rect(5, 5, self.protagonist.get_health_level(), 40) + rect = pygame.Rect(5, 5, self.protagonist.get_health_level(), 30) pygame.draw.rect(bar_surface, health_colour, rect, 0) bar_surface.set_alpha(192) y_pos = surface.get_height() - 20 - bar_surface.get_height() surface.blit(bar_surface, (20, y_pos)) + + def render_inventory(self, surface): + items = len(self.world.inventory) + if not items: + return + padding = 4 + img_size = 64 + size = 32 + inv_surf = pygame.Surface( + (padding + (size + padding) * items, + (2 * padding + size))) + inv_surf = inv_surf.convert(surface) + inv_surf.set_alpha(192) + inv_surf.fill(pygame.color.THECOLORS['white']) + for index, item in enumerate(sorted(self.world.inventory)): + img = resources.get_image( + 'objects', item + '.png', + transforms=(ImageCentre((img_size, img_size)), + scaler((size, size)))) + inv_surf.blit(img, (padding + index * (size + padding), padding)) + y_pos = surface.get_height() - 20 - inv_surf.get_height() + x_pos = 130 + padding + surface.blit(inv_surf, (x_pos, y_pos))