unordered_set<pos_t> scanner::getCircle(const pos_t ¢er, unsigned int radius) { unordered_set<pos_t> result; if(r!=radius) update_circle(radius); for(auto i:circle) result.insert(center+i); return move(result); }
static gint timeout_callback (gpointer data) { double dt; int i; dt = (double)UPDATE_FREQ / 1000.0; for (i = 0; i < NUM_CIRCLES; ++i) { update_circle(circles + i, dt); } GtkWidget *darea = (GtkWidget*)data; gtk_widget_queue_draw (darea); return TRUE; }
list<pos_t> scanner::scanlistThroughWalls(pos_t center, const pixelshade_map &scanmap, unsigned int radius) { list<pos_t> cups; if(r!=radius) update_circle(radius); for(auto i:circle) { try { if( WSPACE_IS_CUP(scanmap.const_coordVal(center+i))) { cups.push_back(center+i); } } catch (const std::out_of_range& oor) {(void)oor;} } return move(cups); }
size_t scanner::scan(pos_t center, const pixelshade_map &scanmap, unsigned int radius) { size_t number_of_cups = 0; if(r!=radius) update_circle(radius); for(auto i:circle) { try { if( WSPACE_IS_CUP(scanmap.const_coordVal(center+i))) { ++number_of_cups; } } catch (const std::out_of_range& oor) {(void)oor;} } return number_of_cups; }
list<pos_t> scanner::scanlistAroundWalls(pos_t center, const pixelshade_map &scanmap, unsigned int radius) { list<pos_t> cups; if(r!=radius) update_circle(radius); list<pos_t> reachables = scanmap.getReachables(getCircle(center),center); for(auto i:reachables) { try { if( WSPACE_IS_CUP(scanmap.const_coordVal(i))) { cups.push_back(i); } } catch (const std::out_of_range& oor) {(void)oor;} } return move(cups); }
scanner::scanner(unsigned int radius) { update_circle(radius); }