X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Ftrack.cpp;h=9d5c5df783bcdae26d78e5145230f1ef9793464f;hb=25b79ab38c2be2e5c89b8240504f641fd9c4899c;hp=e64f42ed3dde6394fde1749979f24e163f57ba5a;hpb=6c61179fe09af2f5366d50f10aadbf5f83438087;p=r2c2.git diff --git a/source/3d/track.cpp b/source/3d/track.cpp index e64f42e..9d5c5df 100644 --- a/source/3d/track.cpp +++ b/source/3d/track.cpp @@ -1,6 +1,7 @@ #include #include #include +#include "libmarklin/tracktype.h" #include "track.h" using namespace std; @@ -51,11 +52,11 @@ void Track3D::get_bounds(float angle, Point &minp, Point &maxp) const } } -void Track3D::render() +void Track3D::render() const { prepare_render(); - glPushName((unsigned)this); + glPushName(reinterpret_cast(this)); varray.apply(); glColor4f(0.25*color.r, 0.25*color.g, 0.25*color.b, 1); @@ -70,35 +71,35 @@ void Track3D::render() glPopMatrix(); } -void Track3D::render_endpoints() +void Track3D::render_endpoints() const { 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 &endpoints=track.get_type().get_endpoints(); + for(unsigned i=0; ilink); - 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(); } glPopMatrix(); } -void Track3D::render_route(int route) +void Track3D::render_route(int route) const { prepare_render(); @@ -114,7 +115,7 @@ void Track3D::render_route(int route) glPopMatrix(); } -void Track3D::prepare_render() +void Track3D::prepare_render() const { const Point &pos=track.get_position(); float rot=track.get_rotation(); @@ -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 &parts=track.get_type().get_parts(); unsigned index=0; - for(Track::PartSeq::const_iterator i=parts.begin(); i!=parts.end(); ++i) + for(vector::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 profile; if(profile.empty()) @@ -174,7 +175,7 @@ void Track3D::build_part(const Track::Part &part, GL::VertexArrayBuilder &va_bui unsigned nsegs; if(radius) { - nsegs=(unsigned)(part.length*(1<(part.length*(1<