changeset 555:bf7960e49063

Inventory
author Stefano Rivera <stefano@rivera.za.net>
date Sat, 07 Sep 2013 22:03:09 +0200
parents 400f52d4279d
children 6710bc95a80c
files nagslang/mutators.py nagslang/screens/area.py
diffstat 2 files changed, 46 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- 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)
 
--- 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))