]> git.tdb.fi Git - r2c2.git/blobdiff - source/3d/overlay.cpp
Emit various signals from Train when it's loaded
[r2c2.git] / source / 3d / overlay.cpp
index bc206f987ac6c930275edbce4c9700e29dc1896d..3f2d621d6b8aade208f8517488a0f3585f2117fc 100644 (file)
@@ -30,17 +30,17 @@ Overlay3D::~Overlay3D()
 {
        for(map<string, GL::Mesh *>::iterator i=graphics.begin(); i!=graphics.end(); ++i)
                delete i->second;
-       for(map<const Track3D *, Icon *>::iterator i=icons.begin(); i!=icons.end(); ++i)
+       for(map<const Object3D *, Icon *>::iterator i=icons.begin(); i!=icons.end(); ++i)
                delete i->second;
 }
 
-void Overlay3D::set_label(const Track3D &track, const string &label)
+void Overlay3D::set_label(const Object3D &track, const string &label)
 {
        get_icon(track).label = label;
        update_icon(get_icon(track));
 }
 
-void Overlay3D::add_graphic(const Track3D &track, const string &grf_name)
+void Overlay3D::add_graphic(const Object3D &track, const string &grf_name)
 {
        const GL::Mesh *grf = get_graphic(grf_name);
        if(!grf)
@@ -53,7 +53,7 @@ void Overlay3D::add_graphic(const Track3D &track, const string &grf_name)
        update_icon(icon);
 }
 
-void Overlay3D::remove_graphic(const Track3D &track, const string &grf_name)
+void Overlay3D::remove_graphic(const Object3D &track, const string &grf_name)
 {
        const GL::Mesh *grf = get_graphic(grf_name);
        Icon &icon = get_icon(track);
@@ -62,15 +62,15 @@ void Overlay3D::remove_graphic(const Track3D &track, const string &grf_name)
        update_icon(icon);
 }
 
-void Overlay3D::clear_graphics(const Track3D &track)
+void Overlay3D::clear_graphics(const Object3D &track)
 {
        get_icon(track).graphics.clear();
        update_icon(get_icon(track));
 }
 
-void Overlay3D::clear(const Track3D &track)
+void Overlay3D::clear(const Object3D &track)
 {
-       map<const Track3D *, Icon *>::iterator i = icons.find(&track);
+       map<const Object3D *, Icon *>::iterator i = icons.find(&track);
        if(i!=icons.end())
        {
                delete i->second;
@@ -96,21 +96,12 @@ void Overlay3D::render(const GL::Tag &tag) const
                float spacing = round(size*1.1)/size;
                float baseline = round((0.5-font.get_ascent()*0.5-font.get_descent()*0.5)*size)/size;
 
-               for(map<const Track3D *, Icon *>::const_iterator i=icons.begin(); i!=icons.end(); ++i)
+               for(map<const Object3D *, Icon *>::const_iterator i=icons.begin(); i!=icons.end(); ++i)
                {
                        const Icon &icon = *i->second;
 
-                       const Point &pos = i->first->get_track().get_position();
-                       Point minp;
-                       Point maxp;
-                       i->first->get_type().get_bounds(0, minp, maxp);
-                       float rot = i->first->get_track().get_rotation();
-                       float c = cos(rot);
-                       float s = sin(rot);
-
-                       GL::Vector3 p((minp.x+maxp.x)/2, (minp.y+maxp.y)/2, 0);
-                       p = GL::Vector3(pos.x+c*p.x-s*p.y, pos.y+s*p.x+c*p.y, pos.z+0.02);
-                       p = camera.project(p);
+                       Point node = i->first->get_node();
+                       GL::Vector3 p = camera.project(GL::Vector3(node.x, node.y, node.z));
 
                        GL::PushMatrix push_mat;
                        p.x = int(p.x*0.5*window.get_width()-icon.width*size/2);
@@ -139,7 +130,7 @@ void Overlay3D::render(const GL::Tag &tag) const
        }
 }
 
-Overlay3D::Icon &Overlay3D::get_icon(const Track3D &track)
+Overlay3D::Icon &Overlay3D::get_icon(const Object3D &track)
 {
        Icon *&icon = icons[&track];
        if(!icon)