#include <cmath>
#include <GL/gl.h>
#include <msp/gl/misc.h>
+#include "libmarklin/tracktype.h"
#include "track.h"
using namespace std;
{
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();
}
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())