]> git.tdb.fi Git - r2c2.git/blobdiff - source/engineer/trainview.cpp
Make use of the mspmath library
[r2c2.git] / source / engineer / trainview.cpp
index 79f9c946f82a51eef1865ea90a0433949d69f22f..dffa04dde651be1768bda8b6ee20ed9cf4840ab6 100644 (file)
@@ -86,26 +86,26 @@ void TrainView::prepare()
 {
        const Vehicle &veh = train.get_vehicle(0);
        const Vector &pos = veh.get_position();
-       float angle = veh.get_rotation();
+       Angle angle = veh.get_rotation();
        if(!forward)
-               angle += M_PI;
-       float c = cos(angle);
-       float s = sin(angle);
+               angle += Angle::half_turn();
+       Vector fwd_vec = rotated_vector(Vector(1, 0, 0), angle);
+       Vector side_vec = rotated_vector(Vector(0, -1, 0), angle);
        float l = veh.get_type().get_length();
 
        switch(mode)
        {
        case ROOF:
-               camera.set_position(GL::Vector3(pos.x-l*c, pos.y-l*s, pos.z+0.07));
-               camera.set_look_direction(GL::Vector3(c, s, -0.2));
+               camera.set_position(pos-l*fwd_vec+Vector(0, 0, 0.07));
+               camera.set_look_direction(fwd_vec-Vector(0, 0, -0.2));
                break;
        case SIDE:
-               camera.set_position(GL::Vector3(pos.x-l*0.8*c+0.05*s, pos.y-l*0.8*s-0.05*c, pos.z+0.03));
-               camera.set_look_direction(GL::Vector3(c-0.2*s, s+0.2*c, 0));
+               camera.set_position(pos-0.8f*fwd_vec+0.05f*side_vec+Vector(0, 0, 0.03));
+               camera.set_look_direction(fwd_vec-side_vec*0.2f);
                break;
        case HEAD:
-               camera.set_position(GL::Vector3(pos.x+l*0.55*c, pos.y+l*0.55*s, pos.z+0.03));
-               camera.set_look_direction(GL::Vector3(c, s, 0));
+               camera.set_position(pos+fwd_vec*(l*0.55f)+Vector(0, 0, 0.03));
+               camera.set_look_direction(fwd_vec);
                break;
        }