]> git.tdb.fi Git - r2c2.git/blob - source/3d/axle.cpp
Create a common base class for Vehicle3D parts
[r2c2.git] / source / 3d / axle.cpp
1 #include "axle.h"
2 #include "vehicle.h"
3 #include "vehicletype.h"
4
5 using namespace Msp;
6
7 namespace R2C2 {
8
9 Axle3D::Axle3D(const Vehicle3D &v, unsigned a):
10         VehiclePart3D(v, *v.get_type().get_fixed_axle_object(a)),
11         bogie(0),
12         axle(vehicle.get_vehicle().get_fixed_axle(a))
13 { }
14
15 Axle3D::Axle3D(const Vehicle3D &v, unsigned b, unsigned a):
16         VehiclePart3D(v, *v.get_type().get_bogie_axle_object(b, a)),
17         bogie(&vehicle.get_vehicle().get_bogie(b)),
18         axle(bogie->axles[a])
19 { }
20
21 void Axle3D::update_matrix()
22 {
23         matrix = vehicle.Object3D::get_matrix();
24
25         if(bogie)
26         {
27                 matrix.translate(bogie->type->position, 0, 0);
28                 matrix.rotate(bogie->direction, 0, 0, 1);
29         }
30
31         matrix.translate(axle.type->position, 0, axle.type->wheel_dia/2);
32         matrix.rotate(axle.angle, 0, 1, 0);
33 }
34
35 } // namespace R2C2