delete *i;
}
-void Track3D::get_bounds(float angle, Vector &minp, Vector &maxp) const
+void Track3D::get_bounds(const Angle &angle, Vector &minp, Vector &maxp) const
{
type.get_bounds(angle-track.get_rotation(), minp, maxp);
- float c = cos(-angle);
- float s = sin(-angle);
-
- const Vector &pos = track.get_position();
- minp.x += c*pos.x-s*pos.y;
- maxp.x += c*pos.x-s*pos.y;
- minp.y += s*pos.x+c*pos.y;
- maxp.y += s*pos.x+c*pos.y;
- minp.z += pos.z;
- maxp.z += pos.z;
+ Vector pos = rotated_vector(track.get_position(), -angle);
+ minp += pos;
+ maxp += pos;
float slope = track.get_slope();
if(slope>0)
Vector Track3D::get_node() const
{
- const Vector &pos = track.get_position();
Vector minp;
Vector maxp;
- type.get_bounds(0, minp, maxp);
- float rot = track.get_rotation();
- float c = cos(rot);
- float s = sin(rot);
+ type.get_bounds(Angle::zero(), minp, maxp);
- Vector center((minp.x+maxp.x)/2, (minp.y+maxp.y)/2, 0);
- return Vector(pos.x+c*center.x-s*center.y, pos.y+s*center.x+c*center.y, pos.z+0.02);
+ return track.get_position()+rotated_vector((minp+maxp)/2.0f, track.get_rotation())+Vector(0, 0, 0.02);
}
GL::Matrix Track3D::create_matrix() const
{
- const Vector &pos = track.get_position();
- float rot = track.get_rotation();
-
GL::Matrix matrix;
- matrix.translate(pos.x, pos.y, pos.z);
- matrix.rotate(rot, 0, 0, 1);
+ matrix.translate(track.get_position());
+ matrix.rotate(track.get_rotation(), 0, 0, 1);
matrix.rotate(track.get_slope()/track.get_type().get_total_length(), 0, -1, 0);
return matrix;