Mercurial > mhrok
changeset 16:1053363c0f22
Add simple fog of war
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Wed, 29 Feb 2012 22:12:09 +0100 |
| parents | 2fd709e21c45 |
| children | c0b56a4b73d5 |
| files | mhrok.py |
| diffstat | 1 files changed, 17 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/mhrok.py Wed Feb 29 21:52:19 2012 +0100 +++ b/mhrok.py Wed Feb 29 22:12:09 2012 +0100 @@ -266,23 +266,36 @@ self.first_draw = True self.tiles = load_tiles('mhrok.png', 32, 32) self.background = pygame.Surface(self.screen.get_size()) + self.fog = pygame.Surface(self.screen.get_size(), pg.SRCALPHA) + self.fog.fill((0, 0, 0)) + self.fov = pygame.Surface((64, 64), pg.SRCALPHA) + pygame.draw.circle(self.fov, (255, 255, 255), (32, 32), 32, 0) + self.dirty = [] def render_level(self, level): self.sprites, self.shadows = level.render_sprites(self.tiles) self.background.blit(level.render_background(self.tiles), (0, 0)) + def light(self, (x, y)): + dirty = self.fog.blit(self.fov, (x-32, y-32), + special_flags=pg.BLEND_RGBA_SUB) + self.dirty.append(dirty) + def draw(self): if self.first_draw: self.screen.blit(self.background, (0, 0)) self.shadows.draw(self.screen) self.sprites.draw(self.screen) self.first_draw = False - dirty = self.background.get_rect() + self.screen.blit(self.fog, (0, 0)) + self.dirty = [self.background.get_rect()] else: self.sprites.clear(self.screen, self.background) self.shadows.draw(self.screen) - dirty = self.sprites.draw(self.screen) - pygame.display.update(dirty) + self.dirty.extend(self.sprites.draw(self.screen)) + self.screen.blit(self.fog, (0, 0)) + pygame.display.update(self.dirty) + self.dirty = [] def update(self): self.sprites.update() @@ -302,6 +315,7 @@ def main(self): while not self.game_over: self.pc.control(self.level) + self.display.light(self.pc.mob.rect.center) self.display.draw() self.clock.tick(15) self.display.update()
