MCPcopy Create free account
hub / github.com/DFHack/dfhack / doOcupancyAndLights

Method doOcupancyAndLights

plugins/rendermax/renderer_light.cpp:609–901  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

607 }
608}
609void lightingEngineViewscreen::doOcupancyAndLights()
610{
611 float daycol;
612 if(dayHour<0)
613 {
614 int length=1200/daySpeed;
615 daycol= (*df::global::cur_year_tick % length)/ (float)length;
616 }
617 else
618 daycol= fmod(dayHour,24.0f)/24.0f; //1->12h 0->24h
619
620 rgbf sky_col=getSkyColor(daycol);
621 lightSource sky(sky_col, -1);//auto calculate best size
622
623 MapExtras::MapCache cache;
624 doSun(sky,cache);
625
626 int window_x=*df::global::window_x;
627 int window_y=*df::global::window_y;
628 coord2d window2d(window_x,window_y);
629 int window_z=*df::global::window_z;
630 rect2d vp=getMapViewport();
631 coord2d vpSize=rect_size(vp);
632 rect2d blockVp;
633 blockVp.first=coord2d(window_x,window_y)/16;
634 blockVp.second=(window2d+vpSize)/16;
635 blockVp.second.x=std::min(blockVp.second.x,(int16_t)df::global::world->map.x_count_block);
636 blockVp.second.y=std::min(blockVp.second.y,(int16_t)df::global::world->map.y_count_block);
637
638 for(int blockX=blockVp.first.x;blockX<=blockVp.second.x;blockX++)
639 for(int blockY=blockVp.first.y;blockY<=blockVp.second.y;blockY++)
640 {
641 MapExtras::Block* b=cache.BlockAt(DFCoord(blockX,blockY,window_z));
642 MapExtras::Block* bDown=cache.BlockAt(DFCoord(blockX,blockY,window_z-1));
643 if(!b)
644 continue; //empty blocks fixed by sun propagation
645
646 for(int block_x = 0; block_x < 16; block_x++)
647 for(int block_y = 0; block_y < 16; block_y++)
648 {
649 df::coord2d pos;
650 pos.x = blockX*16+block_x;
651 pos.y = blockY*16+block_y;
652 df::coord2d gpos=pos;
653 pos=worldToViewportCoord(pos,vp,window2d);
654 if(!isInRect(pos,vp))
655 continue;
656 int tile=getIndex(pos.x,pos.y);
657 rgbf& curCell=ocupancy[tile];
658 curCell=matAmbience.transparency;
659
660
661 df::tiletype type = b->tiletypeAt(gpos);
662 df::tile_designation d = b->DesignationAt(gpos);
663 if(d.bits.hidden )
664 {
665 curCell=rgbf(0,0,0);
666 continue; // do not process hidden stuff, TODO other hidden stuff

Callers

nothing calls this directly

Calls 9

getMapViewportFunction · 0.85
rect_sizeFunction · 0.85
isInRectFunction · 0.85
rgbfClass · 0.85
BlockAtMethod · 0.80
tiletypeAtMethod · 0.80
getTypeMethod · 0.80
makeSourceMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected