X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fhost.cpp;h=93c537ea104fae71d27977f7486feca149821ebd;hb=HEAD;hp=c18f117ba11d3dc360328ad0eb539c3d4e8939ed;hpb=cc29ebb178d4695573f10a829534cb660e14e79d;p=netvis.git diff --git a/source/host.cpp b/source/host.cpp index c18f117..93c537e 100644 --- a/source/host.cpp +++ b/source/host.cpp @@ -19,17 +19,15 @@ Distributed unter the GPL using namespace std; using namespace Msp; -Host::Host(NetVis &nv, unsigned a): +Host::Host(NetVis &nv, const Address &a): netvis(nv), addr(a), + name(addr.str()), + short_name(name), local(false), active(true), throttle(0) { - in_addr ina; - ina.s_addr = htonl(addr); - name = inet_ntoa(ina); - short_name = name; } void Host::set_name(const string &n) @@ -38,15 +36,15 @@ void Host::set_name(const string &n) if(local) { - unsigned dot = name.find('.'); + string::size_type dot = name.find('.'); short_name = name.substr(0, dot); } else { - unsigned dot = name.size(); + string::size_type dot = name.size(); for(unsigned i=0; (dot>0 && dot!=string::npos); ++i) { - unsigned prev = name.rfind('.', dot-1); + string::size_type prev = name.rfind('.', dot-1); if(prev+151) break; dot = prev; @@ -99,10 +97,11 @@ void Host::tick(const Msp::Time::TimeDelta &td) if(!active) return; - const map &hosts = netvis.get_hosts(); - float fx = -pos.x*0.1; - float fy = -pos.y*0.1; - for(map::const_iterator i=hosts.begin(); i!=hosts.end(); ++i) + const map &hosts = netvis.get_hosts(); + float center_force = (local ? 0.5 : 0.1); + float fx = -pos.x*center_force; + float fy = -pos.y*center_force; + for(map::const_iterator i=hosts.begin(); i!=hosts.end(); ++i) { if(i->second!=this) { @@ -112,10 +111,7 @@ void Host::tick(const Msp::Time::TimeDelta &td) float d2 = dx*dx+dy*dy; float d = sqrt(d2); - unsigned other_addr = i->second->get_address(); - unsigned matching_bits = 0; - for(unsigned j=32; (j-- && !((addr^other_addr)>>j));) - ++matching_bits; + unsigned matching_bits = addr.common_prefix_length(i->second->get_address()); float optimal_dist = 100+(24-min(matching_bits, 24U))*12; float f = 5000.0*(1.0/optimal_dist-1.0/d); @@ -136,8 +132,8 @@ void Host::render() const if(!active) return; - GL::PushMatrix push_; - GL::translate(static_cast(pos.x), static_cast(pos.y), 0); + GL::MatrixStack::Push push_(GL::MatrixStack::modelview()); + GL::MatrixStack::modelview() *= GL::Matrix::translation(static_cast(pos.x), static_cast(pos.y), 0); GL::Immediate imm((GL::COLOR4_UBYTE, GL::TEXCOORD2, GL::VERTEX2)); imm.begin(GL::QUADS); @@ -149,10 +145,9 @@ void Host::render() const imm.end(); const GL::Font &font = netvis.get_font(); - GL::translate(-static_cast(font.get_string_width(short_name)*5), 6, 0); - GL::scale_uniform(10); + GL::MatrixStack::modelview() *= GL::Matrix::translation(-static_cast(font.get_string_width(short_name)*5), 6, 0); + GL::MatrixStack::modelview() *= GL::Matrix::scaling(10); - imm.color(1.0f, 1.0f, 1.0f); - font.draw_string(short_name, imm); + font.draw_string(short_name); GL::Texture::unbind(); }