Mercurial > rrr
changeset 6:c98a36b9393e
Fluent opacity
| author | Radomir Dopieralski <sheep-devel@sheep.art.pl> |
|---|---|
| date | Mon, 01 Apr 2013 22:01:36 +0200 |
| parents | 6666dbf909be |
| children | 82d43295ba98 |
| files | rrr/level.py rrr/light.py run.py |
| diffstat | 3 files changed, 15 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/rrr/level.py Mon Apr 01 21:44:59 2013 +0200 +++ b/rrr/level.py Mon Apr 01 22:01:36 2013 +0200 @@ -11,6 +11,7 @@ 'symbol': '?', 'color': 'magenta', 'opaque': True, + 'opacity': 1.0, 'block': True, }, { @@ -18,6 +19,7 @@ 'symbol': '.', 'color': 'black', 'opaque': False, + 'opacity': 0.0, 'block': False, }, { @@ -25,6 +27,7 @@ 'symbol': '.', 'color': 'gray', 'opaque': False, + 'opacity': 0.0, 'block': False, }, { @@ -32,6 +35,7 @@ 'symbol': ':', 'color': 'gray', 'opaque': False, + 'opacity': 0.25, 'block': False, }, { @@ -39,6 +43,7 @@ 'symbol': '#', 'color': 'gray', 'opaque': True, + 'opacity': 1.0, 'block': True, }, @@ -71,6 +76,10 @@ t = self.get_terrain(pos) return t['opaque'] + def get_opacity(self, pos): + t = self.get_terrain(pos) + return t['opacity'] + def get_char(self, pos): t = self.get_terrain(pos) return t['symbol'], t['color']
--- a/rrr/light.py Mon Apr 01 21:44:59 2013 +0200 +++ b/rrr/light.py Mon Apr 01 22:01:36 2013 +0200 @@ -40,7 +40,7 @@ else: break - def _quart(self, pos, r, is_opaque, dx, dy): + def _quart(self, pos, r, get_opacity, dx, dy): max_rays = self.max_rays ray_max = self.ray_max ray_min = self.ray_min @@ -57,8 +57,10 @@ shadow = sum(rays[ray_min[x][y]:ray_max[x][y]]) if 12 * shadow < 11 * rayspan: lit.add((xpos, ypos)) - if is_opaque((xpos, ypos)): - rays[ray_min[x][y]:ray_max[x][y]] = [1] * rayspan + opacity = get_opacity((xpos, ypos)) + if opacity: + for ray in xrange(ray_min[x][y], ray_max[x][y]): + rays[ray] += opacity xpos += dx ypos += dy xpos = ox
--- a/run.py Mon Apr 01 21:44:59 2013 +0200 +++ b/run.py Mon Apr 01 22:01:36 2013 +0200 @@ -25,7 +25,7 @@ for p in level.explored: ch, c = level.get_char(p) display.map_draw(p, ch, 'magenta') - lit = light.cast((x, y), 8, level.is_opaque) + lit = light.cast((x, y), 8, level.get_opacity) level.explored |= lit for p in oldlit - lit: ch, c = level.get_char(p)
