]> git.tdb.fi Git - r2c2.git/blobdiff - source/3d/track.cpp
Major code refactoring:
[r2c2.git] / source / 3d / track.cpp
index e64f42ed3dde6394fde1749979f24e163f57ba5a..d9370844e8ae24cb0f061777dd1e00d0381fce0e 100644 (file)
@@ -1,6 +1,7 @@
 #include <cmath>
 #include <GL/gl.h>
 #include <msp/gl/misc.h>
+#include "libmarklin/tracktype.h"
 #include "track.h"
 
 using namespace std;
@@ -74,24 +75,24 @@ void Track3D::render_endpoints()
 {
        prepare_render();
 
-       const Point &pos=track.get_position();
-       const Track::EndpointSeq &endpoints=track.get_endpoints();
-       for(Track::EndpointSeq::const_iterator i=endpoints.begin(); i!=endpoints.end(); ++i)
+       const vector<Endpoint> &endpoints=track.get_type().get_endpoints();
+       for(unsigned i=0; i<endpoints.size(); ++i)
        {
-               GL::set(GL_CULL_FACE, i->link);
-               if(i->link)
+               const Endpoint &ep=endpoints[i];
+               GL::set(GL_CULL_FACE, track.get_link(i));
+               if(track.get_link(i))
                        glColor4f(0.5, 0, 1, 0.5);
                else
                        glColor4f(1, 0, 0.5, 0.5);
 
-               float c=cos(i->rot);
-               float s=sin(i->rot);
+               float c=cos(ep.dir);
+               float s=sin(ep.dir);
 
                glBegin(GL_QUADS);
-               glVertex3f(i->pos.x-s*0.025, i->pos.y+c*0.025, 0);
-               glVertex3f(i->pos.x+s*0.025, i->pos.y-c*0.025, 0);
-               glVertex3f(i->pos.x+s*0.025, i->pos.y-c*0.025, pos.z+i->pos.z+0.02);
-               glVertex3f(i->pos.x-s*0.025, i->pos.y+c*0.025, pos.z+i->pos.z+0.02);
+               glVertex3f(ep.x-s*0.025, ep.y+c*0.025, 0);
+               glVertex3f(ep.x+s*0.025, ep.y-c*0.025, 0);
+               glVertex3f(ep.x+s*0.025, ep.y-c*0.025, 0.02);
+               glVertex3f(ep.x-s*0.025, ep.y+c*0.025, 0.02);
                glEnd();
        }
 
@@ -132,15 +133,15 @@ void Track3D::build_object()
        base_seq.clear();
        rail_seq.clear();
        route_seq.clear();
-       route_seq.resize(track.get_n_routes());
+       route_seq.resize(track.get_type().get_n_routes());
 
-       const Track::PartSeq &parts=track.get_parts();
+       const vector<TrackPart> &parts=track.get_type().get_parts();
        unsigned index=0;
-       for(Track::PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i)
+       for(vector<TrackPart>::const_iterator i=parts.begin(); i!=parts.end(); ++i)
                build_part(*i, *builder, index);
 }
 
-void Track3D::build_part(const Track::Part &part, GL::VertexArrayBuilder &va_builder, unsigned &base_index)
+void Track3D::build_part(const TrackPart &part, GL::VertexArrayBuilder &va_builder, unsigned &base_index)
 {
        static vector<Point> profile;
        if(profile.empty())