X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2F3d%2Fvehicle.cpp;h=0bd57e95da2b80d276fdf82cef0015649dc1d53d;hb=a993f204ba2cd282637814caec3ab115040fc0cc;hp=41bb26259da3b2a769c7a93e427acfb76ab1fe0b;hpb=7ff28ec88dedc3a2327feb4a507ae622cb953113;p=r2c2.git diff --git a/source/3d/vehicle.cpp b/source/3d/vehicle.cpp index 41bb262..0bd57e9 100644 --- a/source/3d/vehicle.cpp +++ b/source/3d/vehicle.cpp @@ -1,26 +1,60 @@ -/* $Id$ - -This file is part of the MSP Märklin suite -Copyright © 2010 Mikkosoft Productions, Mikko Rasa -Distributed under the GPL -*/ - #include #include +#include +#include "axle.h" +#include "bogie.h" #include "layout.h" +#include "rod.h" #include "vehicle.h" #include "vehicletype.h" using namespace std; using namespace Msp; -namespace Marklin { +namespace R2C2 { Vehicle3D::Vehicle3D(Layout3D &l, Vehicle &v): + GL::ObjectInstance(*l.get_catalogue().get_vehicle(v.get_type()).get_body_object()), layout(l), vehicle(v), type(layout.get_catalogue().get_vehicle(vehicle.get_type())) { + unsigned n_axles = vehicle.get_type().get_fixed_axles().size(); + for(unsigned i=0; i::iterator i=axles.begin(); i!=axles.end(); ++i) + delete *i; + for(vector::iterator i=bogies.begin(); i!=bogies.end(); ++i) + delete *i; + for(vector::iterator i=rods.begin(); i!=rods.end(); ++i) + delete *i; } -Point Vehicle3D::get_node() const +Vector Vehicle3D::get_node() const { - Point p = vehicle.get_position(); - return Point(p.x, p.y, p.z+0.01+vehicle.get_type().get_height()); + Vector p = vehicle.get_position(); + return Vector(p.x, p.y, p.z+0.01+vehicle.get_type().get_height()); } -void Vehicle3D::render(const GL::Tag &tag) const +bool Vehicle3D::is_visible() const { - if(tag==0) - { - GL::PushMatrix push_mat; + return vehicle.get_track(); +} - const Point &pos = vehicle.get_position(); - GL::translate(pos.x, pos.y, pos.z+0.01); - GL::rotate(vehicle.get_direction()*180/M_PI, 0, 0, 1); +void Vehicle3D::render(GL::Renderer &renderer, const GL::Tag &tag) const +{ + if(!vehicle.get_track()) + return; - if(type.get_body_object()) - type.get_body_object()->render(tag); + ObjectInstance::render(renderer, tag); +} - const vector &bogies = vehicle.get_type().get_bogies(); - for(unsigned i=0; irender(tag); - } - } +void Vehicle3D::setup_render(GL::Renderer &renderer, const GL::Tag &) const +{ + GL::Matrix matrix; + const Vector &pos = vehicle.get_position(); + matrix.translate(pos.x, pos.y, pos.z); + float dir = vehicle.get_direction(); + if(vehicle.get_type().get_rotate_object()) + dir += M_PI; + matrix.rotate(dir, 0, 0, 1); + renderer.matrix_stack() *= matrix; } -} // namespace Marklin +} // namespace R2C2