Mercurial > scrounge
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
--- 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:
