float map::ambient_light_at( const tripoint &p ) const { if( !inbounds( p ) ) { return 0.0f; } return get_cache_ref( p.z ).lm[p.x][p.y]; }
bool map::pl_line_of_sight( const tripoint &t, const int max_range ) const { if( !inbounds( t ) ) { return false; } if( max_range >= 0 && square_dist( t, g->u.pos() ) > max_range ) { // Out of range! return false; } const auto &map_cache = get_cache_ref( t.z ); // Any epsilon > 0 is fine - it means lightmap processing visited the point return map_cache.seen_cache[t.x][t.y] > 0.0f; }
bool map::pl_sees( const tripoint &t, const int max_range ) const { if( !inbounds( t ) ) { return false; } if( max_range >= 0 && square_dist( t, g->u.pos() ) > max_range ) { return false; // Out of range! } const auto &map_cache = get_cache_ref( t.z ); return map_cache.seen_cache[t.x][t.y] > LIGHT_TRANSPARENCY_SOLID + 0.1 && ( map_cache.seen_cache[t.x][t.y] * map_cache.lm[t.x][t.y] > g->u.get_vision_threshold( map_cache.lm[g->u.posx()][g->u.posy()] ) || map_cache.sm[t.x][t.y] > 0.0 ); }
lit_level map::light_at( const tripoint &p ) const { if( !inbounds( p ) ) { return LL_DARK; // Out of bounds } const auto &map_cache = get_cache_ref( p.z ); const auto &lm = map_cache.lm; const auto &sm = map_cache.sm; if (sm[p.x][p.y] >= LIGHT_SOURCE_BRIGHT) { return LL_BRIGHT; } if (lm[p.x][p.y] >= LIGHT_AMBIENT_LIT) { return LL_LIT; } if (lm[p.x][p.y] >= LIGHT_AMBIENT_LOW) { return LL_LOW; } return LL_DARK; }
float map::light_transparency( const tripoint &p ) const { return get_cache_ref( p.z ).transparency_cache[p.x][p.y]; }