diff --git a/plugins/rendermax/renderer_light.cpp b/plugins/rendermax/renderer_light.cpp index 320aef0b2..935f30ac8 100644 --- a/plugins/rendermax/renderer_light.cpp +++ b/plugins/rendermax/renderer_light.cpp @@ -2,12 +2,14 @@ #include #include +#include #include "Types.h" #include "modules/Gui.h" #include "modules/Screen.h" #include "modules/Maps.h" +#include "modules/Units.h" #include "df/graphic.h" #include "df/viewscreen_dwarfmodest.h" @@ -275,13 +277,16 @@ void lightingEngineViewscreen::initRawSpecific() static size_t max_list_size = 100000; // Avoid iterating over huge lists void lightingEngineViewscreen::doOcupancyAndLights() { - lightSource sun(lightCell(1,1,1),15); + // TODO better curve (+red dawn ?) + float daycol = abs((*df::global::cur_year_tick % 1200) - 600.0) / 600.0; + lightCell sky_col(daycol, daycol, daycol); + lightSource sky(sky_col, 15); + lightSource lava(lightCell(0.8f,0.2f,0.2f),5); lightSource candle(lightCell(0.96f,0.84f,0.03f),5); lightSource torch(lightCell(0.9f,0.75f,0.3f),8); rect2d vp=getMapViewport(); - - + int window_x=*df::global::window_x; int window_y=*df::global::window_y; int window_z=*df::global::window_z; @@ -299,7 +304,7 @@ void lightingEngineViewscreen::doOcupancyAndLights() for(int block_x = 0; block_x < 16; block_x++) for(int block_y = 0; block_y < 16; block_y++) { - cellArray[block_x][block_y] = lightCell(1,1,1); + cellArray[block_x][block_y] = sky_col; } int totalBlank = 0; int topLevel = df::global::world->map.z_count-1; @@ -321,13 +326,17 @@ void lightingEngineViewscreen::doOcupancyAndLights() { cellArray[block_x][block_y]=lightCell(0,0,0); } - else if(basic_shape==df::tiletype_shape_basic::Floor || basic_shape==df::tiletype_shape_basic::Ramp || basic_shape==df::tiletype_shape_basic::Stair) + else if(basic_shape==df::tiletype_shape_basic::Floor || basic_shape==df::tiletype_shape_basic::Ramp || shape==df::tiletype_shape::STAIR_UP) { if(ZZ!=window_z) { cellArray[block_x][block_y]=lightCell(0,0,0); } } + else if(shape==df::tiletype_shape::STAIR_DOWN || shape==df::tiletype_shape::STAIR_UPDOWN) + { + cellArray[block_x][block_y]*=lightCell(0.9,0.9,0.9); + } if(d.bits.liquid_type == df::enums::tile_liquid::Water && d.bits.flow_size) { cellArray[block_x][block_y] *= (lightCell(1,1,1) - (lightCell(1,1,1) - lightCell(0.63f,0.63f,0.75f))*((float)d.bits.flow_size/7.0f)); @@ -369,7 +378,7 @@ void lightingEngineViewscreen::doOcupancyAndLights() if(!type) { //unallocated, do sky - addLight(tile,sun); + addLight(tile,sky); continue; } df::tiletype_shape shape = ENUM_ATTR(tiletype,shape,*type); @@ -460,7 +469,7 @@ void lightingEngineViewscreen::doOcupancyAndLights() } if(d->bits.outside && d->bits.flow_size==0) { - addLight(tile,sun); + addLight(tile,sky); } } @@ -527,4 +536,15 @@ void lightingEngineViewscreen::doOcupancyAndLights() int tile=getIndex(wx,wy); addLight(tile,cursor); } -} \ No newline at end of file + lightSource citizen(lightCell(0.80f,0.80f,0.90f),6); + for (int i=0;iunits.active.size();++i) + { + df::unit *u = df::global::world->units.active[i]; + if (u->pos.z != window_z || + (u->pos.x < window_x || u->pos.x >= window_x+vpW) || + (u->pos.y < window_y || u->pos.y >= window_y+vpH)) + continue; + if (DFHack::Units::isCitizen(u) && !u->counters.unconscious) + addLight(getIndex(u->pos.x-window_x+1, u->pos.y-window_y+1),citizen); + } +}