changeset 53:11633a298288

nicer edges of darkness
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Sun, 28 Aug 2011 19:40:37 +0200
parents 46f33d277b4d
children 83a5c8c1e1a6
files lib/things.png src/display.py src/level.py
diffstat 3 files changed, 24 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
Binary file lib/things.png has changed
--- a/src/display.py	Sun Aug 28 17:37:00 2011 +0200
+++ b/src/display.py	Sun Aug 28 19:40:37 2011 +0200
@@ -71,17 +71,21 @@
 
 
 class Darkness(pygame.sprite.Sprite):
-    def __init__(self, x, y, w, h, holes=()):
+    def __init__(self, x, y, w, h, dark=()):
         super(Darkness, self).__init__()
-        self.image = pygame.surface.Surface((w * 24, h * 16))
-        self.image.fill((0, 0, 0))
+        self.image = pygame.surface.Surface((w * 24 + 8, h * 16 + 16))
+        self.image.fill((255, 255, 255))
         self.image.set_colorkey((255, 255, 255))
         self.rect = self.image.get_rect()
-        self.rect.move_ip(x * 24, y * 16)
+        self.rect.move_ip(x * 24 - 4, y * 16 - 8)
         self.alpha = 255
-        for x, y in holes:
-            self.image.fill((255, 255, 255), rect=pygame.rect.Rect(
-                        x * 24, y * 16, 24, 16))
+        shade = sprites['things.png'][0][3]
+        for x, y in dark:
+#            self.image.fill((255, 255, 255), rect=pygame.rect.Rect(
+#                        x * 24, y * 16, 24, 16))
+                self.image.blit(shade, (x*24, y*16), (0, 0, 32, 32),
+                            pygame.BLEND_RGB_SUB)
+
 
     def update(self):
         self.alpha -= 32
@@ -151,9 +155,8 @@
 
         self.screen.fill((0, 0, 0))
         self.screen.blit(self.background, (0, 0),
-            pygame.rect.Rect(
-                (-self.scroll_offset[0], -self.scroll_offset[1]),
-                (self.screen.get_width(), self.screen.get_height())))
+            ((-self.scroll_offset[0], -self.scroll_offset[1]),
+             (self.screen.get_width(), self.screen.get_height())))
         self.sprites.clear(self.screen, self._sprite_clear)
         self.darkness.clear(self.screen, self._sprite_clear)
         self.effects.clear(self.screen, self._sprite_clear)
@@ -169,9 +172,8 @@
         self.overlay.draw(self.screen)
         self.darkness.draw(self.screen)
         self.screen.blit(self.fog, (0, 0),
-            pygame.rect.Rect(
-                (-self.scroll_offset[0], -self.scroll_offset[1]),
-                (self.screen.get_width(), self.screen.get_height())))
+            ((-self.scroll_offset[0], -self.scroll_offset[1]),
+             (self.screen.get_width(), self.screen.get_height())))
         self.effects.draw(self.screen)
         self._sprite_shift(self.shadows, self.scroll_offset, reverse=True)
         self._sprite_shift(self.sprites, self.scroll_offset, reverse=True)
--- a/src/level.py	Sun Aug 28 17:37:00 2011 +0200
+++ b/src/level.py	Sun Aug 28 19:40:37 2011 +0200
@@ -155,27 +155,27 @@
             room = self.get_room(x, y)
             area = (room[0] + 1, room[1] + 1, room[2], room[3])
         except KeyError:
+            room = None
             area = (x, y, x + 1, y + 1)
         area = (max(0, area[0] - 1), max(0, area[1] - 1),
                 min(len(self.map[0]), area[2] + 1),
                 min(len(self.map), area[3] + 1))
         update = False
-        holes = set()
+        dark = []
+        shade = display.sprites['things.png'][0][3]
         for y in range(area[1], area[3]):
             for x in range(area[0], area[2]):
                 if not self.flags[y][x] & self.EXPLORED:
                     update = True
                     self.flags[y][x] |= self.EXPLORED
-                else:
-                    holes.add((x - area[0], y - area[1]))
+                    to_display.fog.blit(shade, (x*24-4, y*16-8), (0, 0, 32, 32),
+                                pygame.BLEND_RGB_ADD)
+                    dark.append((x - area[0], y - area[1]))
         if not update:
             return
-        to_display.fog.fill((255, 255, 255), rect=(
-            area[0] * 24, area[1] * 16,
-            (area[2] - area[0]) * 24, (area[3] - area[1]) * 16))
-        dark = display.Darkness(area[0], area[1], area[2] - area[0],
-                                area[3] - area[1], holes)
-        to_display.darkness.add(dark)
+        darkness = display.Darkness(area[0], area[1], area[2] - area[0],
+                                area[3] - area[1], dark)
+        to_display.darkness.add(darkness)
 
     def render_map(self, to_display, area):
         if area is None: