Mercurial > scrounge
changeset 51:1e347ff94ea6
visibility includes monsters now
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Sun, 28 Aug 2011 17:17:17 +0200 |
| parents | e1bad2c34eae |
| children | 46f33d277b4d |
| files | src/display.py src/level.py src/main.py |
| diffstat | 3 files changed, 28 insertions(+), 28 deletions(-) [+] |
line wrap: on
line diff
--- a/src/display.py Sun Aug 28 16:20:56 2011 +0200 +++ b/src/display.py Sun Aug 28 17:17:17 2011 +0200 @@ -65,18 +65,10 @@ class Overlay(pygame.sprite.Sprite): def __init__(self, x, y, image): super(Overlay, self).__init__() - self.image = image.subsurface((0, 0, 24, 16)) + self.image = image self.rect = self.image.get_rect() self.rect.move_ip(x * 24, y * 16) - self.alpha = 0 - self.image.set_alpha(0) - def update(self): - if self.alpha < 255: - self.alpha += 32 - if self.alpha > 255: - self.alpha = 255 - self.image.set_alpha(self.alpha) class Darkness(pygame.sprite.Sprite): def __init__(self, x, y, w, h, holes=()): @@ -120,14 +112,15 @@ self.darkness = pygame.sprite.RenderUpdates() self.effects = pygame.sprite.RenderUpdates() self.menus = SortedUpdates() - self.empty() - def empty(self): + def empty(self, map_size=(30, 30)): self.key = None self.scroll_offset = (0, 0) - self.background = pygame.Surface((self.screen.get_width(), - self.screen.get_height())) + self.background = pygame.Surface((map_size[0] * 24, map_size[1] * 16)) self.background.fill((0, 0, 0)) + self.fog = pygame.Surface((map_size[0] * 24, map_size[1] * 16), + pygame.SRCALPHA) + self.fog.fill((255, 255, 255)) self.sprites.empty() self.shadows.empty() self.overlay.empty() @@ -175,6 +168,11 @@ self.sprites.draw(self.screen) 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())), + pygame.BLEND_RGBA_SUB) 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) @@ -207,6 +205,10 @@ self.overlay.draw(self.screen) dirty += self.darkness.draw(self.screen) dirty += self.effects.draw(self.screen) + for d in dirty: + r = d.move(-self.scroll_offset[0], -self.scroll_offset[1]) + self.screen.blit(self.fog, d.topleft, r, pygame.BLEND_RGBA_SUB) + 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) self._sprite_shift(self.overlay, self.scroll_offset, reverse=True)
--- a/src/level.py Sun Aug 28 16:20:56 2011 +0200 +++ b/src/level.py Sun Aug 28 17:17:17 2011 +0200 @@ -127,9 +127,7 @@ return True def render(self, display): - display.background = pygame.Surface((len(self.map[0]) * 24, - len(self.map) * 16)) - #self.render_map(display, None) + display.empty((len(self.map[0]), len(self.map))) self.flags = [] for y, line in enumerate(self.map): self.flags.append([]) @@ -143,6 +141,7 @@ self.hero.render(display) for m in self.monsters.itervalues(): m.render(display) + self.render_map(display, None) def get_room(self, x, y): for line in self.rooms: @@ -151,7 +150,7 @@ return room raise KeyError('Not in any room') - def explore(self, display, x, y): + def explore(self, to_display, x, y): try: room = self.get_room(x, y) area = (room[0] + 1, room[1] + 1, room[2], room[3]) @@ -161,23 +160,28 @@ min(len(self.map[0]), area[2] + 1), min(len(self.map), area[3] + 1)) update = False + holes = set() 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 + to_display.fog.fill((0, 0, 0), + rect=(x * 24, y * 16, 24, 16)) + else: + holes.add((x - area[0], y - area[1])) + if not update: return - self.render_map(display, area) - for y in range(area[1], area[3]): - for x in range(area[0], area[2]): - self.flags[y][x] |= self.EXPLORED + dark = display.Darkness(area[0], area[1], area[2] - area[0], + area[3] - area[1], holes) + to_display.darkness.add(dark) def render_map(self, to_display, area): if area is None: area = (0, 0, len(self.map[0]), len(self.map)) to_display.background.fill((0, 0, 0), rect=pygame.rect.Rect(area[0]*24, area[1]*16, (area[2] - area[0]) * 24, (area[3] - area[1]) * 16)) - holes = set() for y, line in enumerate(self.map[area[1]:area[3]]): for x, c in enumerate(line[area[0]:area[2]]): tile_class = self.key.get(c) @@ -188,8 +192,3 @@ self.things[(area[0] + x, area[1] + y)].render(to_display) except KeyError: pass - if self.flags[area[1] + y][area[0] + x] & self.EXPLORED: - holes.add((x, y)) - dark = display.Darkness(area[0], area[1], area[2] - area[0], - area[3] - area[1], holes) - to_display.darkness.add(dark)
