From f7f70f40629b2ae2b79fa4eabf1401a38442243a Mon Sep 17 00:00:00 2001 From: Warmist Date: Sun, 23 Jun 2013 12:55:14 +0300 Subject: [PATCH] Light now fallsoff according to tile contents (water for now only) --- scripts/devel/light.lua | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) diff --git a/scripts/devel/light.lua b/scripts/devel/light.lua index ff5580610..f3d39e4db 100644 --- a/scripts/devel/light.lua +++ b/scripts/devel/light.lua @@ -107,17 +107,28 @@ function LightOverlay:placeLightFov(pos,radius,color,f) local vp=self:getViewport() local map = self.df_layout.map local ray=function(tx,ty) - + local power=copyall(color) + local lx=pos.x + local ly=pos.y local setTile=function(x,y) if x>0 and y>0 and x<=map.width and y<=map.height then - local dtsq=(pos.x-x)*(pos.x-x)+(pos.y-y)*(pos.y-y) + local dtsq=(lx-x)*(lx-x)+(ly-y)*(ly-y) + local dt=math.sqrt(dtsq) local tile=x+y*map.width - local ncol=f(color,dtsq,radius) + local ocol=self.lightMap[tile] or {r=0,g=0,b=0} - ncol=blend(ncol,ocol) + local ncol=blend(power,ocol) self.lightMap[tile]=ncol - - return self.ocupancy[tile] + local v=self.ocupancy[tile] + if dtsq>0 then + power.r=power.r*(v.r^dt) + power.g=power.g*(v.g^dt) + power.b=power.b*(v.b^dt) + end + lx=x + ly=y + local pwsq=power.r*power.r+power.g*power.g+power.b*power.b + return pwsq>levelDim*levelDim end return false end @@ -240,14 +251,21 @@ function LightOverlay:buildOcupancy() local pos={x=i+vp.x1-1,y=j+vp.y1-1,z=vp.z} local tile=i+j*map.width local tt=dfhack.maps.getTileType(pos) - + local t1=dfhack.maps.getTileFlags(pos) if tt then local shape=tile_attrs[tt].shape - self.ocupancy[tile]=lightPassable(shape) + if not lightPassable(shape) then + self.ocupancy[tile]={r=0,g=0,b=0} + else + if t1 and not t1.liquid_type and t1.flow_size>2 then + self.ocupancy[tile]={r=0.5,g=0.5,b=0.7} + else + self.ocupancy[tile]={r=0.8,g=0.8,b=0.8} + end + end end end end - end function LightOverlay:makeLightMap() self.lightMap={}