changeset 37:18646f021d62

Move render_level and render_sprites to display
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sat, 10 Mar 2012 12:12:15 +0100
parents 3d3c523edefe
children b637ee420b8a
files mhrok/display.py
diffstat 1 files changed, 60 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mhrok/display.py	Sat Mar 10 12:09:02 2012 +0100
+++ b/mhrok/display.py	Sat Mar 10 12:12:15 2012 +0100
@@ -35,8 +35,8 @@
 
     def render_level(self, level):
         (self.sprites,
-         self.shadows, self.visions) = level.render_sprites(self.tiles)
-        self.background.blit(level.render_background(self.tiles), (0, 0))
+         self.shadows, self.visions) = render_sprites(level, self.tiles)
+        self.background.blit(render_background(level, self.tiles), (0, 0))
 
     def light_room(self, room):
         (rx, ry), (rw, rh) = room
@@ -90,3 +90,61 @@
             tiles.append(image.subsurface(rect))
     return tiles
 
+def render_background(level, tiles):
+    background = pygame.Surface((level.width * 20 + 20, level.height * 12 + 20))
+    background.fill((16, 8, 0))
+    blood = tiles[21].copy()
+    blood.set_alpha(220)
+    blood2 = tiles[22].copy()
+    blood2.set_alpha(220)
+    for y, row in enumerate(level.map):
+        for x, square in enumerate(row):
+            pos = x * 20 + 4, y * 12
+            border = 0
+            if square == 1:
+                background.blit(tiles[23], pos)
+                border = 4
+            elif square == 2:
+                background.blit(tiles[33], pos)
+                border = 24
+            elif square == 3:
+                background.blit(tiles[23], pos)
+                background.blit(blood, pos)
+                border = 4
+            elif square == 4:
+                background.blit(tiles[23], pos)
+                background.blit(blood2, pos)
+                border = 4
+            elif square == 5:
+                background.blit(tiles[38], pos)
+                border = 4
+            elif square < 0:
+                background.blit(tiles[39 - square], pos)
+                border = 24
+            if border:
+                if not level[x - 1, y]:
+                    background.blit(tiles[5 + border], pos)
+                if not level[x + 1, y]:
+                    background.blit(tiles[15 + border], pos)
+                if not level[x, y - 1]:
+                    background.blit(tiles[border], pos)
+                if not level[x, y + 1]:
+                    background.blit(tiles[10 + border], pos)
+
+    return background
+
+def render_sprites(level, tiles):
+    sprites = SortedUpdates()
+    shadows = pygame.sprite.RenderUpdates()
+    visions = pygame.sprite.LayeredDirty()
+    for mob in level.mobs:
+        sprite, shadow, vision = mob.make_sprite(tiles)
+        if sprite:
+            sprites.add(sprite)
+        if shadow:
+            shadows.add(shadow)
+        if vision:
+            visions.add(vision)
+    return sprites, shadows, visions
+
+