time_of_day tod_manager::time_of_day_at(const unit_map& units,const map_location& loc, const gamemap& map) const { int lighten = std::max<int>(map.get_terrain_info(map.get_terrain(loc)).light_modification() , 0); int darken = std::min<int>(map.get_terrain_info(map.get_terrain(loc)).light_modification() , 0); time_of_day tod = get_time_of_day(lighten + darken,loc); if(loc.valid()) { map_location locs[7]; locs[0] = loc; get_adjacent_tiles(loc,locs+1); for(int i = 0; i != 7; ++i) { const unit_map::const_iterator itor = units.find(locs[i]); if(itor != units.end() && itor->second.get_ability_bool("illuminates") && !itor->second.incapacitated()) { unit_ability_list illum = itor->second.get_abilities("illuminates"); unit_abilities::effect illum_effect(illum,lighten,false); int mod = illum_effect.get_composite_value(); if(mod + tod.lawful_bonus > illum.highest("max_value").first) { mod = illum.highest("max_value").first - tod.lawful_bonus; } lighten = std::max<int>(mod, lighten); darken = std::min<int>(mod, darken); } } } tod = get_time_of_day(lighten + darken,loc); return tod; }
gamemap editor_map::mask_to(const gamemap& target) const { if (target.w() != w() || target.h() != h()) { throw editor_action_exception(_("The size of the target map is different from the current map")); } gamemap mask(target); map_location iter; for (iter.x = -border_size(); iter.x < w() + border_size(); ++iter.x) { for (iter.y = -border_size(); iter.y < h() + border_size(); ++iter.y) { if (target.get_terrain(iter) == get_terrain(iter)) { mask.set_terrain(iter, t_translation::FOGGED); } } } return mask; }
/** * Create a tile info -- the constructor grabs required data from the map */ tile_info(const gamemap& map, const map_location& offset) : offset(offset), terrain(map.get_terrain(offset)) { }