diff --git a/src/animations/three_d_animation.cpp b/src/animations/three_d_animation.cpp index 865c00faf..694ed92d1 100644 --- a/src/animations/three_d_animation.cpp +++ b/src/animations/three_d_animation.cpp @@ -68,7 +68,7 @@ void ThreeDAnimation::createPhysicsBody(const std::string &shape) float radius = 0.5f*std::max(extend.getY(), extend.getZ()); m_collision_shape = new btConeShapeX(radius, extend.getX()); } - else if(shape=="coneY") + else if(shape=="coneY" || shape=="cone") { float radius = 0.5f*std::max(extend.getX(), extend.getZ()); m_collision_shape = new btConeShape(radius, extend.getY()); diff --git a/src/physics/physical_object.cpp b/src/physics/physical_object.cpp index 7f67cd85d..680b1c6e2 100644 --- a/src/physics/physical_object.cpp +++ b/src/physics/physical_object.cpp @@ -51,7 +51,9 @@ PhysicalObject::PhysicalObject(const XMLNode &xml_node) xml_node.get("shape", &shape ); m_body_type = MP_NONE; - if (shape=="cone" ) m_body_type = MP_CONE; + if (shape=="cone"||shape=="coneY") m_body_type = MP_CONE; + else if(shape=="coneX" ) m_body_type = MP_CONE_X; + else if(shape=="coneZ" ) m_body_type = MP_CONE_Z; else if(shape=="box" ) m_body_type = MP_BOX; else if(shape=="sphere" ) m_body_type = MP_SPHERE; else fprintf(stderr, "Unknown shape type : %s\n", shape.c_str()); @@ -93,6 +95,20 @@ void PhysicalObject::init() m_shape = new btConeShape(m_radius, extend.getY()); break; } + case MP_CONE_X: { + if(m_radius<0) + m_radius = 0.5f*sqrt(extend.getY()*extend.getY() + + extend.getZ()*extend.getZ()); + m_shape = new btConeShapeX(m_radius, extend.getY()); + break; + } + case MP_CONE_Z: { + if(m_radius<0) + m_radius = 0.5f*sqrt(extend.getX()*extend.getX() + + extend.getY()*extend.getY()); + m_shape = new btConeShapeZ(m_radius, extend.getY()); + break; + } case MP_BOX: m_shape = new btBoxShape(0.5*extend); break; case MP_SPHERE: { diff --git a/src/physics/physical_object.hpp b/src/physics/physical_object.hpp index e8f460bb4..17c17274a 100644 --- a/src/physics/physical_object.hpp +++ b/src/physics/physical_object.hpp @@ -36,7 +36,10 @@ class XMLNode; class PhysicalObject : public TrackObject { public: - enum bodyTypes {MP_NONE, MP_CONE, MP_BOX, MP_SPHERE}; + /** The supported collision shapes. */ + enum bodyTypes {MP_NONE, + MP_CONE, MP_CONE_X, MP_CONE_Z, + MP_BOX, MP_SPHERE}; protected: /** The shape of this object. */