+ Debug::ProfilingScope s(profiler, "tick");
+
+ resolver->tick();
+
+ float min_activity = numeric_limits<float>::max();
+ for(map<unsigned, Host *>::iterator i=hosts.begin(); i!=hosts.end(); ++i)
+ {
+ i->second->tick(dt);
+ min_activity = min(min_activity, i->second->get_activity());
+ }
+ float del_limit = pow(10, 6-0.1*(max_hosts-hosts.size()-disabled_hosts.size()));
+ for(map<unsigned, Host *>::iterator i=disabled_hosts.begin(); i!=disabled_hosts.end();)
+ {
+ i->second->tick(dt);
+
+ if(i->second->get_activity()>min_activity)
+ {
+ i->second->set_active(true);
+ hosts.insert(*i);
+ disabled_hosts.erase(i++);
+ }
+ else if(i->second->get_activity()<del_limit)
+ {
+ delete i->second;
+ disabled_hosts.erase(i++);
+ }
+ else
+ ++i;
+ }
+
+ if(hosts.size()>max_visible_hosts)
+ {
+ list<float> activity;
+ for(map<unsigned, Host *>::iterator i=hosts.begin(); i!=hosts.end(); ++i)
+ activity.push_back(i->second->get_activity());
+ activity.sort();
+
+ list<float>::iterator j = activity.begin();
+ advance(j, activity.size()-max_visible_hosts);
+ float limit = *j;
+
+ for(map<unsigned, Host *>::iterator i=hosts.begin(); i!=hosts.end();)
+ {
+ if(i->second->get_activity()<limit)
+ {
+ i->second->set_active(false);
+ disabled_hosts.insert(*i);
+ hosts.erase(i++);
+ }
+ else
+ ++i;
+ }
+ }
+
+ for(list<Packet *>::iterator i=packets.begin(); i!=packets.end();)