Index: code/branches/physics/src/ogrebullet/Dynamics/CMakeLists.txt
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/CMakeLists.txt	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/CMakeLists.txt	(revision 1985)
@@ -0,0 +1,18 @@
+SET( OGREBULLET_DYNAMICS_SRC_FILES
+  OgreBulletDynamicsConstraint.cpp
+  OgreBulletDynamicsObjectState.cpp
+  OgreBulletDynamicsRigidBody.cpp
+  OgreBulletDynamicsWorld.cpp
+  
+  Constraints/OgreBulletDynamics6DofConstraint.cpp
+  Constraints/OgreBulletDynamicsConeTwistConstraint.cpp
+  Constraints/OgreBulletDynamicsHingeConstraint.cpp
+  Constraints/OgreBulletDynamicsPoint2pointConstraint.cpp
+  Constraints/OgreBulletDynamicsRaycastVehicle.cpp
+  
+  Prefab/OgreBulletDynamicsRagDoll.cpp
+)
+
+INCLUDE_DIRECTORIES(.)
+
+ADD_LIBRARY(ogrebullet_dynamics_orxonox STATIC ${OGREBULLET_DYNAMICS_SRC_FILES})
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.cpp	(revision 1985)
@@ -0,0 +1,91 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+#include "Constraints/OgreBulletDynamics6DofConstraint.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    SixDofConstraint::SixDofConstraint(RigidBody * rbA, RigidBody * rbB, 
+        const Vector3& FrameInAVector3, const Quaternion& FrameInAOrientation,
+        const Vector3& FrameInBVector3, const Quaternion& FrameInBOrientation):
+    TypedConstraint(rbA, rbB)
+    {
+        btTransform frameInA (OgreBulletCollisions::OgreBtConverter::to (FrameInAOrientation), 
+                              OgreBulletCollisions::OgreBtConverter::to (FrameInAVector3));
+        btTransform frameInB (OgreBulletCollisions::OgreBtConverter::to (FrameInBOrientation),
+                              OgreBulletCollisions::OgreBtConverter::to (FrameInBVector3));
+
+        mConstraint = new btGeneric6DofConstraint(
+            *rbA->getBulletRigidBody (),
+            *rbB->getBulletRigidBody (), 
+            frameInA,
+            frameInB,
+			true); // Eric added this because Bullet 2.61 has a new argument (useLinearReferenceFrameA)
+    }
+    // -------------------------------------------------------------------------
+    SixDofConstraint::~SixDofConstraint()
+    {
+	}
+	// -------------------------------------------------------------------------
+	void	 SixDofConstraint::setLinearLowerLimit(const Ogre::Vector3& linearLower)
+	{
+		static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (linearLower));
+	}
+	// -------------------------------------------------------------------------
+	void	 SixDofConstraint::setLinearUpperLimit(const Ogre::Vector3& linearUpper)
+	{
+		static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (linearUpper));
+	}
+	// -------------------------------------------------------------------------
+	void	 SixDofConstraint::setAngularLowerLimit(const Ogre::Vector3& angularLower)
+	{
+		static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (angularLower));
+	}
+	// -------------------------------------------------------------------------
+	void	 SixDofConstraint::setAngularUpperLimit(const Ogre::Vector3& angularUpper)
+	{
+		static_cast<btGeneric6DofConstraint* > (mConstraint)->setLinearLowerLimit(OgreBulletCollisions::OgreBtConverter::to (angularUpper));
+	}
+	// -------------------------------------------------------------------------
+	void	 SixDofConstraint::setLimit(const int axis, const Ogre::Real lo, const Ogre::Real hi)
+	{
+		static_cast<btGeneric6DofConstraint* > (mConstraint)->setLimit(axis, lo, hi);
+	}
+	// -------------------------------------------------------------------------
+	bool	 SixDofConstraint::isLimited(int limitIndex)
+	{
+		return static_cast<btGeneric6DofConstraint* > (mConstraint)->isLimited(limitIndex);
+	}
+}
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamics6DofConstraint.h	(revision 1985)
@@ -0,0 +1,65 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+#ifndef _OGREBULLETDYNAMICS_SixDofConstraint_H
+#define _OGREBULLETDYNAMICS_SixDofConstraint_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // SixDofConstraint  class
+    class SixDofConstraint : public TypedConstraint
+    {
+    public:
+        SixDofConstraint(RigidBody * rbA, RigidBody * rbB, 
+            const Ogre::Vector3& FrameInAVector, const Ogre::Quaternion& FrameInAOrientation,
+            const Ogre::Vector3& FrameInBVector, const Ogre::Quaternion& FrameInBOrientation);
+
+		void	setLinearLowerLimit(const Ogre::Vector3& linearLower);
+		void	setLinearUpperLimit(const Ogre::Vector3& linearUpper);
+		void	setAngularLowerLimit(const Ogre::Vector3& angularLower);
+		void	setAngularUpperLimit(const Ogre::Vector3& angularUpper);
+
+		void	setLimit(const int axis, const Ogre::Real lo, const Ogre::Real hi);
+		//! Test limit
+		/*!
+		- free means upper < lower,
+		- locked means upper == lower
+		- limited means upper > lower
+		- limitIndex: first 3 are linear, next 3 are angular
+		*/
+		bool	 isLimited(int limitIndex);
+
+        virtual ~SixDofConstraint();
+
+    };
+}
+#endif //_OGREBULLETDYNAMICS_SixDofConstraint_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.cpp	(revision 1985)
@@ -0,0 +1,59 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper) For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+    file added by rtti (at) elane2k (dot) com
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GPL General Public License with runtime exception as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+----------------------------------------------------------------------------
+-
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+#include "Constraints/OgreBulletDynamicsConeTwistConstraint.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    ConeTwistConstraint::ConeTwistConstraint(RigidBody * rbA, RigidBody * rbB,
+        const Vector3& FrameInAVector3, const Quaternion& FrameInAOrientation,
+        const Vector3& FrameInBVector3, const Quaternion& FrameInBOrientation):
+    TypedConstraint(rbA, rbB)
+    {
+        btTransform frameInA (OgreBulletCollisions::OgreBtConverter::to(FrameInAOrientation),
+                              OgreBulletCollisions::OgreBtConverter::to(FrameInAVector3));
+        btTransform frameInB (OgreBulletCollisions::OgreBtConverter::to(FrameInBOrientation),
+                              OgreBulletCollisions::OgreBtConverter::to(FrameInBVector3));
+
+        mConstraint = new btConeTwistConstraint(
+            *rbA->getBulletRigidBody (),
+            *rbB->getBulletRigidBody (),
+            frameInA,
+            frameInB);
+    }
+    //-------------------------------------------------------------------------
+    ConeTwistConstraint::~ConeTwistConstraint()
+    {
+    }
+   
+    void ConeTwistConstraint::setLimit(Ogre::Real a, Ogre::Real b, Ogre::Real c)
+    {
+        dynamic_cast<btConeTwistConstraint*>(mConstraint)->setLimit(a,b,c);
+    }
+   
+}
+
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsConeTwistConstraint.h	(revision 1985)
@@ -0,0 +1,43 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper) For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+    file added by rtti (at) elane2k (dot) com
+
+This program is free software; you can redistribute it and/or modify it under the terms of the GPL General Public License with runtime exception as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA, or go to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+----------------------------------------------------------------------------
+-
+*/
+#ifndef _OGREBULLETDYNAMICS_ConeTwistConstraint_H
+#define _OGREBULLETDYNAMICS_ConeTwistConstraint_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+
+
+namespace OgreBulletDynamics
+{
+    //-------------------------------------------------------------------------
+    // ConeTwistConstraint  class
+    class ConeTwistConstraint : public TypedConstraint
+    {
+    public:
+        ConeTwistConstraint(RigidBody * rbA, RigidBody * rbB,
+            const Ogre::Vector3& FrameInAVector, const Ogre::Quaternion& FrameInAOrientation,
+            const Ogre::Vector3& FrameInBVector, const Ogre::Quaternion& FrameInBOrientation);
+
+        virtual ~ConeTwistConstraint();
+       
+        void setLimit(Ogre::Real a, Ogre::Real b, Ogre::Real c);
+
+    };
+}
+#endif //_OGREBULLETDYNAMICS_ConeTwistConstraint_H
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.cpp	(revision 1985)
@@ -0,0 +1,84 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+#include "OgreBulletDynamicsConstraint.h"
+#include "Constraints/OgreBulletDynamicsHingeConstraint.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    HingeConstraint::HingeConstraint(RigidBody * rbA, RigidBody * rbB, const Vector3& pivotInA,
+        const Vector3& pivotInB, const Vector3& axisInA, const Vector3& axisInB):
+        TypedConstraint(rbA, rbB)
+    {
+        btVector3 vec[4];
+        vec[0] = OgreBulletCollisions::OgreBtConverter::to(pivotInA);
+        vec[1] = OgreBulletCollisions::OgreBtConverter::to(pivotInB);
+        vec[2] = OgreBulletCollisions::OgreBtConverter::to(axisInA);
+        vec[3] = OgreBulletCollisions::OgreBtConverter::to(axisInB);
+       
+        mConstraint = new btHingeConstraint(
+            *rbA->getBulletRigidBody (),
+            *rbB->getBulletRigidBody (),
+            vec[0], vec[1], vec[2], vec[3]);
+/*
+        mConstraint = new btHingeConstraint(
+            *rbA->getBulletRigidBody (),
+            *rbB->getBulletRigidBody (), 
+            OgreBulletCollisions::OgreBtConverter::to(pivotInA),
+            OgreBulletCollisions::OgreBtConverter::to(pivotInB), 
+            OgreBulletCollisions::OgreBtConverter::to(axisInA), 
+            OgreBulletCollisions::OgreBtConverter::to(axisInB));*/
+    }
+    // -------------------------------------------------------------------------
+        HingeConstraint::HingeConstraint(RigidBody * rbA, 
+            const Vector3& pivotInA, 
+            const Vector3&  axisInA):
+    TypedConstraint(rbA)
+    {
+        btVector3 vec[2];
+        vec[0] = OgreBulletCollisions::OgreBtConverter::to(pivotInA);
+        vec[1] = OgreBulletCollisions::OgreBtConverter::to(axisInA);
+
+        mConstraint = new btHingeConstraint(*rbA->getBulletRigidBody (),
+            vec[0], vec[1]);
+
+/*
+        mConstraint = new btHingeConstraint(*rbA->getBulletRigidBody (),
+            OgreBulletCollisions::OgreBtConverter::to(pivotInA),
+            OgreBulletCollisions::OgreBtConverter::to(axisInA));*/
+    }
+    // -------------------------------------------------------------------------
+    HingeConstraint::~HingeConstraint()
+    {
+    }
+}
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsHingeConstraint.h	(revision 1985)
@@ -0,0 +1,57 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+#ifndef _OGREBULLETDYNAMICS_HingeConstraint_H
+#define _OGREBULLETDYNAMICS_HingeConstraint_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // HingeConstraint  class
+    class HingeConstraint : public TypedConstraint
+    {
+    public:
+        HingeConstraint(RigidBody * rbA, 
+                            RigidBody * rbB, 
+                            const Ogre::Vector3& pivotInA,
+                            const Ogre::Vector3& pivotInB, 
+                            const Ogre::Vector3& axisInA, 
+                            const Ogre::Vector3& axisInB);
+        HingeConstraint(RigidBody * rbA, 
+            const Ogre::Vector3& pivotInA, 
+            const Ogre::Vector3&  axisInA);
+
+
+        virtual ~HingeConstraint();
+
+    };
+}
+#endif //_OGREBULLETDYNAMICS_HingeConstraint_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.cpp	(revision 1985)
@@ -0,0 +1,81 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+#include "OgreBulletDynamicsConstraint.h"
+#include "Constraints/OgreBulletDynamicsPoint2pointConstraint.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    PointToPointConstraint::PointToPointConstraint(RigidBody *body, const Vector3 &pivot) :
+        TypedConstraint(body)
+    {
+        mConstraint = new btPoint2PointConstraint(*(body->getBulletRigidBody ()), 
+            OgreBulletCollisions::OgreBtConverter::to(pivot));
+    }
+    // -------------------------------------------------------------------------
+    PointToPointConstraint::~PointToPointConstraint()
+    {
+    }
+    // -------------------------------------------------------------------------
+    void	PointToPointConstraint::setPivotA(const Ogre::Vector3& pivotA)
+    {
+        getBulletPoint2PointConstraint()->setPivotA(
+            OgreBulletCollisions::OgreBtConverter::to(pivotA));
+    }
+    // -------------------------------------------------------------------------
+    void	PointToPointConstraint::setPivotB(const Ogre::Vector3& pivotB)
+    {
+        getBulletPoint2PointConstraint()->setPivotB(
+            OgreBulletCollisions::OgreBtConverter::to(pivotB));
+    }
+    // -------------------------------------------------------------------------
+    void PointToPointConstraint::setTau (float tau) 
+    {
+        getBulletPoint2PointConstraint()->m_setting.m_tau = tau;
+    };
+    // -------------------------------------------------------------------------
+    void PointToPointConstraint::setDamping (float damping) 
+    {
+        getBulletPoint2PointConstraint()->m_setting.m_damping = damping;
+    };
+    // -------------------------------------------------------------------------
+    float PointToPointConstraint::getTau () const 
+    {
+        return getBulletPoint2PointConstraint()->m_setting.m_tau;
+    };
+    // -------------------------------------------------------------------------
+    float PointToPointConstraint::getDamping () const 
+    {
+        return getBulletPoint2PointConstraint()->m_setting.m_damping;
+    };
+}
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsPoint2pointConstraint.h	(revision 1985)
@@ -0,0 +1,67 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+#ifndef _OGREBULLETDYNAMICS_PointTopointConstraint_H
+#define _OGREBULLETDYNAMICS_PointTopointConstraint_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // PointTopointConstraint  class
+    class PointToPointConstraint : public TypedConstraint
+    {
+    public:
+	    PointToPointConstraint(RigidBody *body, const Ogre::Vector3 &pivot);
+
+	    virtual ~PointToPointConstraint();
+
+        inline btPoint2PointConstraint * getBulletPoint2PointConstraint () const;
+
+        void setTau (float tau);
+        void setDamping (float damping);
+
+        float getTau () const;
+        float getDamping () const;
+
+
+        void	setPivotA(const Ogre::Vector3& pivotA);
+        void	setPivotB(const Ogre::Vector3& pivotB);
+
+    };
+    // -------------------------------------------------------------------------
+    // inline PointTopointConstraint  class methods
+    // -------------------------------------------------------------------------
+    inline btPoint2PointConstraint * PointToPointConstraint::getBulletPoint2PointConstraint () const 
+    {
+        return static_cast <btPoint2PointConstraint *> (mConstraint);
+    }
+}
+#endif //_OGREBULLETDYNAMICS_PointTopointConstraint_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.cpp	(revision 1985)
@@ -0,0 +1,183 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+#include "OgreBulletDynamicsConstraint.h"
+#include "Constraints/OgreBulletDynamicsRaycastVehicle.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    VehicleRayCaster::VehicleRayCaster(DynamicsWorld *world)
+    {
+        mBulletVehicleRayCaster = new btDefaultVehicleRaycaster(world->getBulletDynamicsWorld ());
+    }
+    // -------------------------------------------------------------------------
+    VehicleRayCaster::~VehicleRayCaster()
+    {
+        delete mBulletVehicleRayCaster;
+    }   
+    // -------------------------------------------------------------------------
+    VehicleTuning::VehicleTuning(const Ogre::Real suspensionStiffness,
+				const Ogre::Real suspensionCompression,
+				const Ogre::Real suspensionDamping,
+				const Ogre::Real maxSuspensionTravelCm,
+				const Ogre::Real frictionSlip)
+    {
+        mBulletTuning = new btRaycastVehicle::btVehicleTuning();
+
+        mBulletTuning->m_suspensionStiffness =  suspensionStiffness;
+        mBulletTuning->m_suspensionCompression = suspensionCompression;
+        mBulletTuning->m_suspensionDamping = suspensionDamping;
+        mBulletTuning->m_maxSuspensionTravelCm = maxSuspensionTravelCm;
+        mBulletTuning->m_frictionSlip = frictionSlip;
+    }
+    // -------------------------------------------------------------------------
+    VehicleTuning::~VehicleTuning()
+    {
+    }
+    // -------------------------------------------------------------------------
+    RaycastVehicle::RaycastVehicle(WheeledRigidBody *body,  
+                                VehicleTuning *vt,
+                                VehicleRayCaster *caster) :
+        TypedConstraint(body),
+        mTuning(vt),
+        mRayCaster(caster)
+    {
+        if (mRayCaster == 0)
+            mRayCaster = new VehicleRayCaster(mWorld);
+
+        btRaycastVehicle *v = new btRaycastVehicle(
+                *(mTuning->getBulletTuning()),
+                body->getBulletRigidBody (), 
+                mRayCaster->getBulletVehicleRayCaster()
+                );
+        mConstraint = v;
+        mWorld->addVehicle(this);
+        body->setVehicle (this);
+    }
+    // -------------------------------------------------------------------------
+    RaycastVehicle::~RaycastVehicle()
+    {
+    }
+    // -------------------------------------------------------------------------
+    void RaycastVehicle::setCoordinateSystem(int rightIndex,int upIndex,int forwardIndex)
+    {
+        getBulletVehicle()->setCoordinateSystem(rightIndex, upIndex, forwardIndex);
+    }
+    // -------------------------------------------------------------------------
+    void RaycastVehicle::addWheel(SceneNode *node,
+                                  const Ogre::Vector3 &connectionPoint,
+                                  const Ogre::Vector3 &wheelDirection,
+                                  const Ogre::Vector3 &wheelAxle,
+
+                                  const Ogre::Real suspensionRestLength,
+                                  const Ogre::Real wheelRadius,
+                                  const bool isFrontWheel,
+                                  
+                                  const Ogre::Real wheelFriction,
+                                  const Ogre::Real rollInfluence)
+    {
+        btRaycastVehicle *v = static_cast<btRaycastVehicle *> (mConstraint);
+
+        mWheelsInfo.push_back (
+            &v->addWheel(OgreBulletCollisions::OgreBtConverter::to(connectionPoint),
+                        OgreBulletCollisions::OgreBtConverter::to(wheelDirection),
+                        OgreBulletCollisions::OgreBtConverter::to(wheelAxle),
+                        suspensionRestLength,
+                        wheelRadius, 
+                        *(mTuning->getBulletTuning ()),
+                        isFrontWheel));
+
+        {
+            const size_t wheelCurrent = mWheelsInfo.size() - 1;
+            mWheelsInfo[wheelCurrent]->m_suspensionStiffness = mTuning->getBulletTuning()->m_suspensionStiffness;
+            mWheelsInfo[wheelCurrent]->m_wheelsDampingRelaxation = mTuning->getBulletTuning()->m_suspensionDamping;
+            mWheelsInfo[wheelCurrent]->m_wheelsDampingCompression = mTuning->getBulletTuning()->m_suspensionCompression;
+
+            mWheelsInfo[wheelCurrent]->m_frictionSlip = wheelFriction;
+            mWheelsInfo[wheelCurrent]->m_rollInfluence = rollInfluence;
+        }
+
+        // create wheel scene Node
+        {
+            node->setPosition (connectionPoint);
+
+            mWheelNodes.push_back ( node);
+            const size_t wheelCurrent = mWheelsInfo.size() - 1;
+
+            //mWheelsInfo[wheelCurrent]->
+        }
+    }
+    // -------------------------------------------------------------------------
+    void RaycastVehicle::setWheelsAttached()
+    {
+        btRaycastVehicle *v = static_cast<btRaycastVehicle *> (mConstraint);
+        for (int i=0; i < v->getNumWheels(); i++)
+        {
+            btWheelInfo& wheel = v->getWheelInfo(i);
+
+            wheel.m_suspensionStiffness = mTuning->getBulletTuning()->m_suspensionStiffness;
+            wheel.m_wheelsDampingRelaxation = mTuning->getBulletTuning()->m_suspensionDamping;
+            wheel.m_wheelsDampingCompression = mTuning->getBulletTuning()->m_suspensionCompression;
+
+            //wheel.m_frictionSlip = mBulletTuning->getBulletTuning()->m_wheelFriction;
+            //wheel.m_rollInfluence = mBulletTuning->getBulletTuning()->m_rollInfluence;
+        }
+    }
+    // -------------------------------------------------------------------------
+    void RaycastVehicle::setTransform()
+    {
+        //should update wheels as well ?
+        for (int i=0; i < getBulletVehicle()->getNumWheels(); i++)
+        {
+            //synchronize the wheels with the (interpolated) chassis world transform
+            getBulletVehicle()->updateWheelTransform(i, true);
+            //draw wheels (cylinders)
+            const btTransform &w = getBulletVehicle()->getWheelInfo(i).m_worldTransform;
+
+            mWheelNodes[i]->setPosition (w.getOrigin()[0], w.getOrigin()[1], w.getOrigin()[2]);
+            mWheelNodes[i]->setOrientation (w.getRotation().getW(), w.getRotation().getX(), w.getRotation().getY(), w.getRotation().getZ());
+
+        }
+    }
+    // -------------------------------------------------------------------------
+    void RaycastVehicle::applyEngineForce (float engineForce, int wheel)
+    {
+        getBulletVehicle()->applyEngineForce (engineForce, wheel);
+    }
+    // -------------------------------------------------------------------------
+    void RaycastVehicle::setSteeringValue(float steering, int wheel)
+    {
+        getBulletVehicle()->setSteeringValue (steering, wheel);
+    }
+    // -------------------------------------------------------------------------
+}
Index: code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Constraints/OgreBulletDynamicsRaycastVehicle.h	(revision 1985)
@@ -0,0 +1,132 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+#ifndef _OGREBULLETDYNAMICS_RaycastVehicle_H
+#define _OGREBULLETDYNAMICS_RaycastVehicle_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+
+
+namespace OgreBulletDynamics
+{
+
+    // -------------------------------------------------------------------------
+    // VehicleRayCaster  class
+    class VehicleRayCaster
+    {
+    public:
+        VehicleRayCaster(DynamicsWorld *world);
+        virtual ~VehicleRayCaster();
+        
+        btVehicleRaycaster *getBulletVehicleRayCaster()
+        {return static_cast <btVehicleRaycaster*> (mBulletVehicleRayCaster);};
+         
+    private:
+        btDefaultVehicleRaycaster *mBulletVehicleRayCaster;        
+    };
+    // -------------------------------------------------------------------------
+    // VehicleTuning  class
+    class VehicleTuning
+    {
+    public:
+        VehicleTuning(
+            const Ogre::Real suspensionStiffness,
+            const Ogre::Real suspensionCompression,
+            const Ogre::Real suspensionDamping,
+            const Ogre::Real maxSuspensionTravelCm,
+            const Ogre::Real frictionSlip);
+        virtual ~VehicleTuning();
+        
+        btRaycastVehicle::btVehicleTuning *getBulletTuning()
+        {return mBulletTuning;};
+        
+    private:
+        btRaycastVehicle::btVehicleTuning *mBulletTuning;        
+    };
+    // -------------------------------------------------------------------------
+    // RaycastVehicle  class
+    class WheelInfo
+    {
+    public:
+        WheelInfo(btWheelInfo &w): 
+          mWheel(&w)
+          {};
+        virtual ~WheelInfo(){};
+
+        btWheelInfo *getBulletWheelInfo(){return static_cast<btWheelInfo *> (mWheel);}
+       
+    protected:
+        btWheelInfo                   *mWheel;
+    };
+    // -------------------------------------------------------------------------
+    // RaycastVehicle  class
+    class RaycastVehicle : public TypedConstraint
+    {
+    public:
+        RaycastVehicle(WheeledRigidBody *body,  
+            VehicleTuning        *vt,
+            VehicleRayCaster     *caster = 0);
+
+        virtual ~RaycastVehicle();
+
+        btRaycastVehicle *getBulletVehicle()
+        {return static_cast<btRaycastVehicle *> (mConstraint);};
+        void setCoordinateSystem(int rightIndex,int upIndex,int forwardIndex);
+
+        void addWheel(
+            Ogre::SceneNode *node,
+            const Ogre::Vector3 &connectionPoint,
+            const Ogre::Vector3 &wheelDirection,
+            const Ogre::Vector3 &wheelAxle,
+            const Ogre::Real suspensionRestLength,
+            const Ogre::Real wheelRadius,
+            const bool isFrontWheel,
+            const Ogre::Real wheelFriction,
+            const Ogre::Real rollInfluence);
+
+        // when all wheels are attached, make vehicle aware of it
+        void setWheelsAttached();
+        // update wheels when needed.
+        void setTransform();
+
+        void applyEngineForce (float engineForce, int wheel);
+        void setSteeringValue(float steering, int wheel);
+
+     protected:
+         VehicleTuning                   *mTuning;
+         VehicleRayCaster                *mRayCaster;
+    
+         std::vector<btWheelInfo *>         mWheelsInfo;
+         std::vector<Ogre::SceneNode *>      mWheelNodes;
+
+         WheeledRigidBody* mChassisBody;
+         Ogre::SceneNode *mNode;
+         
+    };
+}
+#endif //_OGREBULLETDYNAMICS_RaycastVehicle_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamics.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamics.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamics.h	(revision 1985)
@@ -0,0 +1,50 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _OGREBULLETDYNAMICS_H
+#define _OGREBULLETDYNAMICS_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#ifdef _PRECOMP
+
+    #include "OgreBulletDynamicsRigidBody.h"
+    #include "OgreBulletDynamicsObjectState.h"
+
+    #include "OgreBulletDynamicsConstraint.h"
+    #include "Constraints/OgreBulletDynamics6DofConstraint.h"
+    #include "Constraints/OgreBulletDynamicsHingeConstraint.h"
+    #include "Constraints/OgreBulletDynamicsPoint2pointConstraint.h"
+	#include "Constraints/OgreBulletDynamicsConeTwistConstraint.h"
+
+	#include "Constraints/OgreBulletDynamicsRaycastVehicle.h"
+	#include "Prefab/OgreBulletDynamicsRagDoll.h"
+
+    #include "OgreBulletDynamicsWorld.h"
+
+#endif //_PRECOMP
+ 
+#endif //_OGREBULLETDYNAMICS_H
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.cpp	(revision 1985)
@@ -0,0 +1,78 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsConstraint.h"
+
+#include "OgreBulletDynamicsWorld.h"
+
+#include "OgreBulletDynamicsRigidBody.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    TypedConstraint::TypedConstraint(DynamicsWorld *world) :
+            mConstraint (0),
+            mWorld (world),
+            mBodyA (0),
+            mBodyB (0)
+    {
+    }
+    // -------------------------------------------------------------------------
+    TypedConstraint::TypedConstraint(RigidBody *bodyA) :
+            mConstraint(0),
+            mWorld(bodyA->getDynamicsWorld()),
+            mBodyA (bodyA),
+            mBodyB (0)
+    {
+            mBodyA = bodyA;
+    }
+    // -------------------------------------------------------------------------
+    TypedConstraint::TypedConstraint(RigidBody *bodyA, RigidBody *bodyB) :
+            mConstraint(0),
+            mWorld(bodyA->getDynamicsWorld()),
+            mBodyA (bodyA),
+            mBodyB (bodyB)
+    {
+        assert (bodyA->getDynamicsWorld() == bodyB->getDynamicsWorld());
+        mBodyA = bodyA;
+        mBodyB = bodyB;
+    }
+    // -------------------------------------------------------------------------
+    TypedConstraint::~TypedConstraint()
+    {
+        if (mConstraint)
+        {
+            assert (mWorld->isConstraintRegistered (this) == false);
+            delete mConstraint;
+        }
+    }
+    // -------------------------------------------------------------------------
+
+}
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsConstraint.h	(revision 1985)
@@ -0,0 +1,58 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+#ifndef _OGREBULLETDYNAMICS_TypedConstraint_H
+#define _OGREBULLETDYNAMICS_TypedConstraint_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletCollisionsObject.h"
+
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // basic constraint class
+    class TypedConstraint
+    {
+    public:
+        TypedConstraint(DynamicsWorld *world);
+        TypedConstraint(RigidBody *bodyA);
+        TypedConstraint(RigidBody *bodyA, RigidBody *bodyB);
+
+	    virtual ~TypedConstraint();
+
+
+        inline btTypedConstraint* getBulletTypedConstraint() const {return static_cast <btTypedConstraint*> (mConstraint);};
+
+    protected:
+        btTypedConstraint       *mConstraint;
+
+        DynamicsWorld           *mWorld;
+        RigidBody               *mBodyA;
+        RigidBody               *mBodyB;
+    };
+}
+#endif //_OGREBULLETDYNAMICS_TypedConstraint_H
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.cpp	(revision 1985)
@@ -0,0 +1,65 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletDynamicsObjectState.h"
+#include "OgreBulletDynamicsRigidBody.h"
+
+using namespace Ogre;
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    PhysicState::PhysicState(RigidBody *parent)
+        :	
+      btMotionState(),
+        mObject(parent)
+    {
+    }
+    // -------------------------------------------------------------------------
+    PhysicState::~PhysicState()
+    {
+    }
+    // -------------------------------------------------------------------------
+    void PhysicState::getWorldTransform(btTransform& worldTrans ) const
+    {
+        assert (mObject);
+        
+        worldTrans.setOrigin(OgreBulletCollisions::OgreBtConverter::to(mObject->getWorldPosition()));
+        worldTrans.setRotation(OgreBulletCollisions::OgreBtConverter::to(mObject->getWorldOrientation()));
+        
+    }
+    // -------------------------------------------------------------------------
+    void PhysicState::setWorldTransform(const btTransform& worldTrans)
+    {
+        assert (mObject);
+
+        mObject->setPosition(OgreBulletCollisions::BtOgreConverter::to(worldTrans.getOrigin()));
+        mObject->setOrientation(OgreBulletCollisions::BtOgreConverter::to(worldTrans.getRotation()));
+        
+    }
+}
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsObjectState.h	(revision 1985)
@@ -0,0 +1,51 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _OGREBULLETDYNAMICS_PhysicState_H
+#define _OGREBULLETDYNAMICS_PhysicState_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // Object transforms
+    class PhysicState : public btMotionState
+    {
+    public:
+	    PhysicState(RigidBody *parent);
+	    ~PhysicState();
+
+	    virtual void getWorldTransform(btTransform& worldTrans ) const;
+	    virtual void setWorldTransform(const btTransform& worldTrans);	
+    
+    protected:
+        RigidBody *mObject;
+    };
+}
+#endif //_OGREBULLETDYNAMICS_PhysicState_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsPreRequisites.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsPreRequisites.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsPreRequisites.h	(revision 1985)
@@ -0,0 +1,58 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _OGREBULLETDYNAMICS_PREREQUISITES_H
+#define _OGREBULLETDYNAMICS_PREREQUISITES_H
+
+#include "btBulletCollisionCommon.h"
+#include "btBulletDynamicsCommon.h"
+
+#include "Ogre.h"
+#include "OgreBulletCollisions.h"
+
+
+namespace OgreBulletDynamics
+{
+    class RigidBody;
+    class PhysicState;
+    class DynamicsWorld;
+
+    class TypedConstraint;
+    class HingeConstraint;
+    class SixDofConstraint;
+    class PointToPointConstraint;
+	class ConeTwistConstraint;
+
+    class WheeledRigidBody;
+    class VehicleRayCaster;
+    class VehicleTuning;
+    class RaycastVehicle;
+    class WheelInfo;
+
+	class RagDoll;
+}
+
+#endif //_OGREBULLETDYNAMICS_PREREQUISITES_H
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsPrecompiled.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsPrecompiled.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsPrecompiled.cpp	(revision 1985)
@@ -0,0 +1,27 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.cpp	(revision 1985)
@@ -0,0 +1,224 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletCollisionsShape.h"
+#include "OgreBulletCollisionsObject.h"
+#include "OgreBulletCollisionsWorld.h"
+#include "OgreBulletCollisionsObjectState.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+#include "OgreBulletDynamicsObjectState.h"
+
+using namespace Ogre;
+using namespace OgreBulletCollisions;
+
+namespace OgreBulletDynamics
+{
+
+    // -------------------------------------------------------------------------
+    RigidBody::RigidBody(const String &name, DynamicsWorld *world, const short collisionGroup, const short collisionMask)
+        :	
+        Object(name, world, false)
+    {
+		mCollisionGroup = collisionGroup;
+		mCollisionMask = collisionMask;
+    }
+    // -------------------------------------------------------------------------
+    RigidBody::~RigidBody()
+    {
+    }  
+    // -------------------------------------------------------------------------
+    void RigidBody::setShape(Ogre::SceneNode *node,  
+        OgreBulletCollisions::CollisionShape *shape,                          
+        const float      bodyRestitution,
+        const float      bodyFriction,
+        const float      bodyMass,
+        const Vector3 &pos, 
+        const Quaternion &quat)
+    {
+
+        mState = new ObjectState(this);
+
+        mRootNode = node;
+        mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
+        mShapeNode->attachObject(this);
+
+        node->setPosition (pos);
+        node->setOrientation (quat);
+
+        mShape = shape;
+        showDebugShape(mWorld->getShowDebugShapes());
+
+        btVector3 localInertiaTensor = btVector3(0,0,0);
+		if (bodyMass > 0.0)
+	        mShape->getBulletShape ()->calculateLocalInertia(bodyMass, localInertiaTensor);
+
+        btRigidBody *body = new btRigidBody(bodyMass, mState, mShape->getBulletShape (), localInertiaTensor);
+        body->setRestitution(bodyRestitution);
+        body->setFriction(bodyFriction);
+
+        mObject = body;
+
+		getDynamicsWorld()->addRigidBody(this, mCollisionGroup, mCollisionMask);
+    }
+
+    // -------------------------------------------------------------------------
+    void RigidBody::setStaticShape(Ogre::SceneNode *node, 
+        OgreBulletCollisions::CollisionShape *shape,
+        const float      bodyRestitution,
+        const float      bodyFriction,
+        const Vector3 &pos, 
+        const Quaternion &quat)
+    {
+        mState = new ObjectState(this);
+
+        mRootNode = node;
+
+        mShapeNode = mRootNode->createChildSceneNode(mName + "Node");
+        mShapeNode->attachObject(this);
+
+        node->setPosition (pos);
+        node->setOrientation (quat);
+
+        mShape = shape;
+        showDebugShape(mWorld->getShowDebugShapes());
+
+        btRigidBody *body = new btRigidBody(0.0, mState, mShape->getBulletShape ());
+
+        body->setRestitution(bodyRestitution);
+        body->setFriction(bodyFriction);
+
+        body->getWorldTransform().setOrigin(btVector3(pos.x, pos.y, pos.z));
+        body->getWorldTransform().setRotation(btQuaternion(quat.x, quat.y, quat.z, quat.w));
+
+        mObject = body;
+		getDynamicsWorld()->addRigidBody(this, mCollisionGroup, mCollisionMask);
+    }
+    // -------------------------------------------------------------------------
+    void RigidBody::setStaticShape(OgreBulletCollisions::CollisionShape *shape,
+        const float      bodyRestitution,
+        const float      bodyFriction,
+        const Vector3 &pos, 
+        const Quaternion &quat)
+    {
+        //mState = new ObjectState(this);
+
+        mShape = shape;
+        btRigidBody *body = new btRigidBody(0.0, 0, mShape->getBulletShape ());
+
+        body->setRestitution(bodyRestitution);
+        body->setFriction(bodyFriction);
+
+        body->getWorldTransform().setOrigin(btVector3(pos.x, pos.y, pos.z));
+        body->getWorldTransform().setRotation(btQuaternion(quat.x, quat.y, quat.z, quat.w));
+
+        mObject = body;
+		getDynamicsWorld()->addRigidBody(this, mCollisionGroup, mCollisionMask);
+	}
+	// -------------------------------------------------------------------------
+	void RigidBody::setKinematicObject(bool isKinematic) {
+		if (this->isKinematicObject() != isKinematic) {
+			//flip kinematic state
+			getBulletRigidBody()->setCollisionFlags(
+				getBulletRigidBody()->getCollisionFlags() ^ btCollisionObject::CF_KINEMATIC_OBJECT);
+		}
+	} 
+    // -------------------------------------------------------------------------
+    void RigidBody::setLinearVelocity( const Ogre::Vector3 &vel )
+    {
+        getBulletRigidBody()->setLinearVelocity (btVector3(vel.x, vel.y, vel.z));
+    }
+    // -------------------------------------------------------------------------
+    void RigidBody::setLinearVelocity( const Ogre::Real x, const Ogre::Real y, const Ogre::Real z )
+    {
+        getBulletRigidBody()->setLinearVelocity (btVector3(x, y, z));
+    }
+    // -------------------------------------------------------------------------
+	Ogre::Vector3 RigidBody::getLinearVelocity()
+	{
+		const btVector3 lv = getBulletRigidBody()->getLinearVelocity();
+		return BtOgreConverter::to(lv);
+	}
+    // -------------------------------------------------------------------------
+    void RigidBody::applyImpulse( const Ogre::Vector3 &impulse, const Ogre::Vector3 &position )
+    {
+        getBulletRigidBody()->applyImpulse (OgreBtConverter::to(impulse), OgreBtConverter::to(position));
+    }
+    // -------------------------------------------------------------------------
+    void RigidBody::applyForce( const Ogre::Vector3 &impulse, const Ogre::Vector3 &position )
+    {
+        getBulletRigidBody()->applyForce(OgreBtConverter::to(impulse), OgreBtConverter::to(position));
+    }
+    // -------------------------------------------------------------------------
+    Ogre::Vector3 RigidBody::getCenterOfMassPivot( const Ogre::Vector3 &pivotPosition ) const
+    {
+        const btVector3 centerOfMassPivot(getCenterOfMassTransform().inverse()* OgreBtConverter::to(pivotPosition));
+        return BtOgreConverter::to(centerOfMassPivot);
+    }
+    // -------------------------------------------------------------------------
+    void RigidBody::setDeactivationTime( const float ftime )
+    {
+        getBulletRigidBody()->setDeactivationTime( ftime );
+    }
+    // -------------------------------------------------------------------------
+    void RigidBody::setDamping( const Ogre::Real linearDamping, const Ogre::Real angularDamping )
+    {
+        getBulletRigidBody()->setDamping( linearDamping,  angularDamping);
+    }
+    // -------------------------------------------------------------------------
+    // -------------------------------------------------------------------------
+    // -------------------------------------------------------------------------
+    void WheeledRigidBody::setPosition(const btVector3 &pos)
+    { 
+        //should update wheels as well ?
+        mRootNode->setPosition(pos[0], pos[1], pos[2]);
+    };
+    // -------------------------------------------------------------------------
+    void WheeledRigidBody::setOrientation(const btQuaternion &quat)
+    { 
+        mRootNode->setOrientation(quat.getW(),quat.getX(), quat.getY(), quat.getZ());
+    };
+    // -------------------------------------------------------------------------
+    void WheeledRigidBody::setTransform(const btVector3 &pos, const btQuaternion &quat)
+    {
+        mRootNode->setPosition(pos[0], pos[1], pos[2]);
+        mRootNode->setOrientation(quat.getW(),quat.getX(), quat.getY(), quat.getZ());
+
+        mVehicle->setTransform();
+    }
+    // -------------------------------------------------------------------------
+    void WheeledRigidBody::setTransform(const btTransform& worldTrans)
+    { 
+        mRootNode->setPosition(worldTrans.getOrigin()[0], worldTrans.getOrigin()[1],worldTrans.getOrigin()[2]);
+        mRootNode->setOrientation(worldTrans.getRotation().getW(),worldTrans.getRotation().getX(), worldTrans.getRotation().getY(), worldTrans.getRotation().getZ());
+
+        mVehicle->setTransform();
+    }
+}
+
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsRigidBody.h	(revision 1985)
@@ -0,0 +1,197 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _OGREBULLETDYNAMICS_RigidObject_H
+#define _OGREBULLETDYNAMICS_RigidObject_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletCollisionsObject.h"
+#include "OgreBulletCollisionsWorld.h"
+#include "Utils/OgreBulletConverter.h"
+
+#include "OgreBulletDynamicsWorld.h"
+
+#include "Constraints/OgreBulletDynamicsRaycastVehicle.h"
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // basic rigid body class
+    class RigidBody : public OgreBulletCollisions::Object
+    {
+    public:
+	    RigidBody(const Ogre::String &name, 
+				  DynamicsWorld *world,
+				  const short collisionGroup = 0,
+				  const short collisionMask = 0);
+
+	    virtual ~RigidBody();
+
+        void setShape(Ogre::SceneNode *node, 
+            OgreBulletCollisions::CollisionShape *shape,
+            const float      bodyRestitution,
+            const float      bodyFriction,
+            const float      bodyMass,
+            const Ogre::Vector3 &pos = Ogre::Vector3::ZERO, 
+            const Ogre::Quaternion &quat = Ogre::Quaternion::IDENTITY);
+
+        void setStaticShape(Ogre::SceneNode *node,
+            OgreBulletCollisions::CollisionShape *shape,
+            const float      bodyRestitution,
+            const float      bodyFriction,
+            const Ogre::Vector3 &pos = Ogre::Vector3::ZERO, 
+            const Ogre::Quaternion &quat = Ogre::Quaternion::IDENTITY);
+
+        void setStaticShape(OgreBulletCollisions::CollisionShape *shape,
+            const float      bodyRestitution,
+            const float      bodyFriction,
+            const Ogre::Vector3 &pos = Ogre::Vector3::ZERO, 
+            const Ogre::Quaternion &quat = Ogre::Quaternion::IDENTITY);
+
+
+        void setLinearVelocity(const Ogre::Vector3 &vel);
+        void setLinearVelocity(const Ogre::Real x, const Ogre::Real y, const Ogre::Real z);
+		Ogre::Vector3 getLinearVelocity();
+        void applyImpulse(const Ogre::Vector3 &impulse, const Ogre::Vector3 &position);
+        void applyForce(const Ogre::Vector3 &impulse, const Ogre::Vector3 &position);
+
+
+        inline btRigidBody*         getBulletRigidBody() const;
+        inline btDynamicsWorld*     getBulletDynamicsWorld() const;
+        inline DynamicsWorld*       getDynamicsWorld();
+
+        Ogre::SceneNode*  getSceneNode() const {return mRootNode;};
+
+        inline bool isStaticObject() const;
+        inline bool isKinematicObject() const;
+
+		void setKinematicObject(bool isKinematic);
+
+        inline void disableDeactivation();
+        inline void enableActiveState ();
+        inline void forceActivationState();
+        void setDeactivationTime(const float ftime);
+
+        inline const btTransform &getCenterOfMassTransform() const;
+        inline Ogre::Quaternion    getCenterOfMassOrientation () const;
+        inline Ogre::Vector3 getCenterOfMassPosition() const;
+
+        Ogre::Vector3       getCenterOfMassPivot (const Ogre::Vector3 &pivotPosition) const;
+        
+        void setDamping( const Ogre::Real linearDamping, const Ogre::Real angularDamping );
+	protected:
+		short mCollisionGroup;
+		short mCollisionMask;
+    };
+    // -------------------------------------------------------------------------
+    // basic rigid body class
+    class WheeledRigidBody : public RigidBody
+    {
+    public:
+        WheeledRigidBody(const Ogre::String &name, DynamicsWorld *world): 
+            RigidBody(name, world),
+                mVehicle(0)
+        {
+        };
+
+        
+        void setVehicle(RaycastVehicle *v){mVehicle = v;};
+
+       virtual void setPosition(const btVector3 &pos);
+       virtual void setOrientation(const btQuaternion &quat);
+       virtual void setTransform(const btVector3 &pos, const btQuaternion &quat);
+       virtual void setTransform(const btTransform& worldTrans);
+
+        virtual ~WheeledRigidBody(){};
+
+    protected:
+		RaycastVehicle *mVehicle;
+
+    };
+    // -------------------------------------------------------------------------
+    // basic rigid body class inline methods
+    // -------------------------------------------------------------------------
+    inline btRigidBody*  RigidBody::getBulletRigidBody() const 
+    {
+        return static_cast <btRigidBody* > (mObject);
+    };
+    // -------------------------------------------------------------------------
+    inline btDynamicsWorld*     RigidBody::getBulletDynamicsWorld() const 
+    { 
+        return static_cast <btDynamicsWorld * > (mWorld->getBulletCollisionWorld ());
+    };
+    // -------------------------------------------------------------------------
+    inline DynamicsWorld*       RigidBody::getDynamicsWorld() 
+    { 
+        return static_cast <DynamicsWorld* > (mWorld);
+    };
+    // -------------------------------------------------------------------------
+    inline bool RigidBody::isStaticObject() const 
+    {
+        return getBulletRigidBody()->isStaticObject();
+    }
+    // -------------------------------------------------------------------------
+    inline bool RigidBody::isKinematicObject() const 
+    {
+        return getBulletRigidBody()->isKinematicObject();
+    };
+    // -------------------------------------------------------------------------
+    inline void RigidBody::disableDeactivation()
+    {
+        getBulletRigidBody()->setActivationState(DISABLE_DEACTIVATION);
+    }
+    // -------------------------------------------------------------------------
+    inline void RigidBody::enableActiveState()
+    {
+        getBulletRigidBody()->setActivationState(ACTIVE_TAG);
+    }
+    // -------------------------------------------------------------------------
+    inline void RigidBody::forceActivationState()
+    {
+        getBulletRigidBody()->forceActivationState(ACTIVE_TAG);
+    }
+    // -------------------------------------------------------------------------
+    // -------------------------------------------------------------------------
+    inline const btTransform &RigidBody::getCenterOfMassTransform() const
+    {
+        return getBulletRigidBody()->getCenterOfMassTransform();
+    }
+    // -------------------------------------------------------------------------
+    inline Ogre::Quaternion RigidBody::getCenterOfMassOrientation() const
+    {
+        return OgreBulletCollisions::BtOgreConverter::to(getCenterOfMassTransform().getRotation ());
+    }
+    // -------------------------------------------------------------------------
+    inline Ogre::Vector3 RigidBody::getCenterOfMassPosition() const
+    {
+        return OgreBulletCollisions::BtOgreConverter::to(getBulletRigidBody()->getCenterOfMassPosition());
+    }
+    // -------------------------------------------------------------------------   
+    
+}
+#endif //_OGREBULLETDYNAMICS_RigidObject_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsWorld.cpp	(revision 1985)
@@ -0,0 +1,160 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletCollisionsShape.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsObjectState.h"
+#include "OgreBulletDynamicsRigidBody.h"
+#include "OgreBulletDynamicsConstraint.h"
+
+#include "Constraints/OgreBulletDynamicsRaycastVehicle.h"
+
+#include "BulletCollision/GIMPACT/btGImpactShape.h"
+#include "BulletCollision/GIMPACT/btGImpactCollisionAlgorithm.h"
+
+using namespace Ogre;
+using namespace OgreBulletCollisions;
+
+namespace OgreBulletDynamics
+{
+
+    DynamicsWorld::DynamicsWorld(Ogre::SceneManager *mgr, 
+                const Ogre::AxisAlignedBox &bounds,  
+                const Ogre::Vector3 &gravity,
+                bool init) :
+        CollisionsWorld(mgr, bounds, false),
+            mDebugDrawer(0)
+    {
+        //btSequentialImpulseConstraintSolver
+        //btSequentialImpulseConstraintSolver3
+        mConstraintsolver = new btSequentialImpulseConstraintSolver();
+
+        //only if init is true, otherwise you have to create mWorld manually later on
+        if (init) {
+            mWorld = new btDiscreteDynamicsWorld(mDispatcher, mBroadphase, mConstraintsolver, &mDefaultCollisionConfiguration);
+			static_cast <btDiscreteDynamicsWorld *> (mWorld)->setGravity(btVector3(gravity.x,gravity.y,gravity.z));
+
+			btCollisionDispatcher * dispatcher = static_cast<btCollisionDispatcher *>(mWorld->getDispatcher());
+			btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher);
+		}
+
+    }
+    // -------------------------------------------------------------------------
+    DynamicsWorld::~DynamicsWorld()
+    {
+        delete mConstraintsolver;
+    }
+
+    // -------------------------------------------------------------------------
+    void DynamicsWorld::addRigidBody (RigidBody *rb, short collisionGroup, short collisionMask)
+    {
+        mObjects.push_back (static_cast <Object *> (rb));
+
+		if (collisionGroup == 0 && collisionMask == 0)
+		{
+			// use default collision group/mask values (dynamic/kinematic/static)
+			static_cast <btDiscreteDynamicsWorld *> (mWorld)->addRigidBody(rb->getBulletRigidBody());      
+		}
+		else
+		{
+			static_cast <btDiscreteDynamicsWorld *> (mWorld)->addRigidBody(rb->getBulletRigidBody(), collisionGroup, collisionMask);      
+		}
+    }
+    // -------------------------------------------------------------------------
+    void DynamicsWorld::stepSimulation(const Ogre::Real elapsedTime, int maxSubSteps, const Ogre::Real fixedTimestep)
+    {
+        // Reset Debug Lines
+        if (mDebugDrawer) 
+            mDebugDrawer->clear ();
+
+        static_cast <btDiscreteDynamicsWorld *> (mWorld)->stepSimulation(elapsedTime, maxSubSteps, fixedTimestep);
+
+        if (mDebugDrawer) 
+        {
+            // draw lines that step Simulation sent.
+            mDebugDrawer->draw();
+
+            const bool drawFeaturesText = (mDebugDrawer->getDebugMode () & btIDebugDraw::DBG_DrawFeaturesText) != 0;
+            if (drawFeaturesText)
+            {
+                // on all bodies we have
+                // we get all shapes and draw more information
+                //depending on mDebugDrawer mode.
+                std::deque<Object*>::iterator it = mObjects.begin();
+                while (it != mObjects.end())
+                {
+                    //(*it)->drawFeaturesText();
+                    ++it;
+                }
+            }
+        }
+    }
+    // -------------------------------------------------------------------------
+    void DynamicsWorld::removeConstraint(TypedConstraint *constraint)
+    {
+        getBulletDynamicsWorld()->removeConstraint(constraint->getBulletTypedConstraint());
+        std::deque <TypedConstraint*>::iterator it = mConstraints.begin();
+        while (it != mConstraints.end())
+        {
+            if ((*it) == constraint)
+            {
+                mConstraints.erase (it);
+                break;
+            }
+            ++it;
+        }
+    }
+    // -------------------------------------------------------------------------
+    void DynamicsWorld::addConstraint(TypedConstraint *constraint)
+    {
+        getBulletDynamicsWorld()->addConstraint(constraint->getBulletTypedConstraint());
+        mConstraints.push_back(constraint);
+    }
+    // -------------------------------------------------------------------------
+    void DynamicsWorld::addVehicle(RaycastVehicle *v)
+    {
+        getBulletDynamicsWorld()->addVehicle(v->getBulletVehicle ());
+        mConstraints.push_back(static_cast <TypedConstraint *> (v));
+
+        //mVehicles.push_back(v);
+    }
+    // -------------------------------------------------------------------------
+    bool DynamicsWorld::isConstraintRegistered(TypedConstraint *constraint) const
+    {
+        std::deque <TypedConstraint*>::const_iterator it = mConstraints.begin();
+        while (it != mConstraints.end())
+        {
+            if ((*it) == constraint)
+                return true;
+            ++it;
+        }
+        return false;
+    }
+}
+
Index: code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/OgreBulletDynamicsWorld.h	(revision 1985)
@@ -0,0 +1,85 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com (Use it Freely, even Statically, but have to contribute any changes)
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GPL General Public License with runtime exception as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GPL General Public License with runtime exception for more details.
+
+You should have received a copy of the GPL General Public License with runtime exception along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+-----------------------------------------------------------------------------
+*/
+
+#ifndef _OGREBULLETDYNAMICS_DynamicWorld_H
+#define _OGREBULLETDYNAMICS_DynamicWorld_H
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+#include "OgreBulletCollisionsWorld.h"
+#include "Debug/OgreBulletCollisionsDebugDrawer.h"
+
+namespace OgreBulletDynamics
+{
+    // -------------------------------------------------------------------------
+    // basic rigid body class
+    class DynamicsWorld : public OgreBulletCollisions::CollisionsWorld
+    {
+    public:
+        DynamicsWorld(Ogre::SceneManager *mgr, 
+            const Ogre::AxisAlignedBox &bounds,  
+            const Ogre::Vector3 &gravity,
+            bool init = true);
+
+	    ~DynamicsWorld();
+
+        template <class BTDNYWORLDCLASS>
+            void createBtDynamicsWorld(BTDNYWORLDCLASS *&createdWorld)
+            {
+				createdWorld = new BTDNYWORLDCLASS(mDispatcher, mBroadphase, mConstraintsolver, &mDefaultCollisionConfiguration);
+                mWorld = createdWorld;
+            }
+
+        void stepSimulation(const Ogre::Real elapsedTime, int maxSubSteps = 1, const Ogre::Real fixedTimestep = 1./60.);
+
+        void addRigidBody (RigidBody *rb, short collisionGroup, short collisionMask);
+
+        void setDebugDrawer(OgreBulletCollisions::DebugDrawer *debugdrawer)
+        {
+            mDebugDrawer = debugdrawer;
+            (static_cast <btDiscreteDynamicsWorld *> (mWorld))->setDebugDrawer(mDebugDrawer);
+        };
+
+        OgreBulletCollisions::DebugDrawer *getDebugDrawer(){return mDebugDrawer;};
+
+        inline btDynamicsWorld * getBulletDynamicsWorld() const {return static_cast<btDynamicsWorld *> (mWorld);};
+
+        void removeConstraint(TypedConstraint *constraint);
+        void addConstraint(TypedConstraint *constraint);
+        bool isConstraintRegistered(TypedConstraint *constraint) const;
+
+        void addVehicle(RaycastVehicle *v);
+
+    private:
+        OgreBulletCollisions::DebugDrawer                 *mDebugDrawer;
+
+        btConstraintSolver                                *mConstraintsolver;
+
+        std::deque <TypedConstraint *>                    mConstraints;
+    };
+}
+#endif //_OGREBULLETDYNAMICS_DynamicWorld_H
+
Index: code/branches/physics/src/ogrebullet/Dynamics/Prefab/OgreBulletDynamicsRagDoll.cpp
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Prefab/OgreBulletDynamicsRagDoll.cpp	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Prefab/OgreBulletDynamicsRagDoll.cpp	(revision 1985)
@@ -0,0 +1,151 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+#include "OgreBulletDynamics.h"
+
+#include "OgreBulletCollisionsShape.h"
+#include "OgreBulletCollisionsObject.h"
+#include "OgreBulletCollisionsWorld.h"
+#include "OgreBulletCollisionsObjectState.h"
+
+#include "OgreBulletDynamicsWorld.h"
+#include "OgreBulletDynamicsRigidBody.h"
+#include "Prefab/OgreBulletDynamicsRagDoll.h"
+
+using namespace Ogre;
+using namespace OgreBulletCollisions;
+
+namespace OgreBulletDynamics
+{
+
+	// -------------------------------------------------------------------------
+	RagDoll::RagDoll (btDynamicsWorld* ownerWorld, const btVector3& positionOffset)
+		: 
+		m_ownerWorld (ownerWorld)
+	{
+		// Setup all the rigid bodies
+		btTransform offset; offset.setIdentity();
+		offset.setOrigin(positionOffset);
+
+
+		btTransform transform;
+
+		// for
+		{
+			transform.setIdentity();
+			transform.setOrigin(btVector3(btScalar(0.), btScalar(1.), btScalar(0.)));
+			m_bodies.push_back(
+				localCreateRigidBody(btScalar(1.), 
+										offset*transform, 
+										new btCapsuleShape(btScalar(0.15), btScalar(0.20))
+										)
+									);
+		}
+
+		// Setup some damping on the m_bodies
+		for(std::vector<btRigidBody* >::iterator i=m_bodies.begin();
+			i!=m_bodies.end();
+			++i) 
+		{
+			(*i)->setDamping(0.05, 0.85);
+			(*i)->setDeactivationTime(0.8);
+			(*i)->setSleepingThresholds(1.6, 2.5);
+		}
+
+		// Now setup the constraints
+		btHingeConstraint* hingeC;
+		btConeTwistConstraint* coneC;
+		btTransform localA, localB;
+
+		// for
+		{
+			localA.setIdentity(); localB.setIdentity();
+			localA.getBasis().setEulerZYX(0, Ogre::Math::TWO_PI,0); 
+			localA.setOrigin(btVector3(btScalar(0.), btScalar(0.15), btScalar(0.)));
+			localB.getBasis().setEulerZYX(0,Ogre::Math::TWO_PI,0); 
+			localB.setOrigin(btVector3(btScalar(0.), btScalar(-0.15), btScalar(0.)));
+			hingeC =  new btHingeConstraint(*m_bodies[0], *m_bodies[1], 
+				localA, localB);
+			hingeC->setLimit(btScalar(-Ogre::Math::TWO_PI*2), btScalar(Ogre::Math::TWO_PI));
+			m_joints.push_back(hingeC);
+			m_ownerWorld->addConstraint(hingeC, true);
+		}
+
+	}
+    // -------------------------------------------------------------------------
+	RagDoll::~RagDoll ()
+	{
+		std::vector<btCollisionShape* >  m_shapes;
+		std::vector<btRigidBody* >		 m_bodies;
+		std::vector<btTypedConstraint* > m_joints;
+		// Remove all constraints
+		for(std::vector<btTypedConstraint* >::iterator i=m_joints.begin();
+			i!=m_joints.end();
+			++i) 
+		{
+			m_ownerWorld->removeConstraint(*i);
+			delete *i;
+		}
+
+		// Remove all bodies and shapes
+		for(std::vector<btRigidBody* >::iterator i=m_bodies.begin();
+			i!=m_bodies.end();
+			++i) 
+		{
+			m_ownerWorld->removeRigidBody(*i);
+
+			delete (*i)->getMotionState();
+			delete *i;
+		}
+		for(std::vector<btCollisionShape* >::iterator i=m_shapes.begin();
+			i!=m_shapes.end();
+			++i) 
+		{
+			delete *i;
+		}
+	}
+	// -------------------------------------------------------------------------
+	btRigidBody* RagDoll::localCreateRigidBody (btScalar mass, 
+		const btTransform& startTransform, 
+		btCollisionShape* shape)
+	{
+		bool isDynamic = (mass != 0.f);
+
+		btVector3 localInertia(0,0,0);
+		if (isDynamic)
+			shape->calculateLocalInertia(mass,localInertia);
+
+		btDefaultMotionState* myMotionState = new btDefaultMotionState(startTransform);
+
+		btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,shape,localInertia);
+		btRigidBody* body = new btRigidBody(rbInfo);
+
+		m_ownerWorld->addRigidBody(body);
+
+		return body;
+	}
+}
+
Index: code/branches/physics/src/ogrebullet/Dynamics/Prefab/OgreBulletDynamicsRagDoll.h
===================================================================
--- code/branches/physics/src/ogrebullet/Dynamics/Prefab/OgreBulletDynamicsRagDoll.h	(revision 1985)
+++ code/branches/physics/src/ogrebullet/Dynamics/Prefab/OgreBulletDynamicsRagDoll.h	(revision 1985)
@@ -0,0 +1,82 @@
+/***************************************************************************
+
+This source file is part of OGREBULLET
+(Object-oriented Graphics Rendering Engine Bullet Wrapper)
+For the latest info, see http://www.ogre3d.org/phpBB2addons/viewforum.php?f=10
+
+Copyright (c) 2007 tuan.kuranes@gmail.com
+
+
+
+This program is free software; you can redistribute it and/or modify it under
+the terms of the GNU Lesser General Public License as published by the Free Software
+Foundation; either version 2 of the License, or (at your option) any later
+version.
+
+This program is distributed in the hope that it will be useful, but WITHOUT
+ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
+
+You should have received a copy of the GNU Lesser General Public License along with
+this program; if not, write to the Free Software Foundation, Inc., 59 Temple
+Place - Suite 330, Boston, MA 02111-1307, USA, or go to
+http://www.gnu.org/copyleft/lesser.txt.
+-----------------------------------------------------------------------------
+*/
+
+
+#ifndef _OGREBULLETCOLLISIONS_RagDoll_H
+#define _OGREBULLETCOLLISIONS_RagDoll_H
+
+
+#include "OgreBulletDynamicsPreRequisites.h"
+
+
+namespace OgreBulletDynamics
+{
+	// -------------------------------------------------------------------------
+	// basic CollisionWorld
+	class RagDoll 
+	{
+	public:
+		RagDoll (btDynamicsWorld* ownerWorld, 
+				const btVector3& positionOffset);
+
+		virtual	~RagDoll ();
+
+		// Make ragdoll  active.
+		void ragdollEnable(bool doEnable);
+		// is ragdoll active.
+		bool isRagdollEnabled();
+
+		// Make constraint between body part active.
+		void constraintEnable(bool value);
+		// are constraint between body part active ?
+		bool isConstraintEnabled();
+
+		// Make it collidable or not.
+		void collisionEnable(bool value);
+		// if shapes can collide
+		bool isCollisionEnabled();
+
+		// Make it fixed in a pose or not.
+		void rigidityEnable(bool value);
+		// is it fixed on a pose?
+		bool isRigidityEnable();
+
+
+	protected:
+		btDynamicsWorld* m_ownerWorld;
+
+		std::vector<btCollisionShape* >  m_shapes;
+		std::vector<btRigidBody* >		 m_bodies;
+		std::vector<btTypedConstraint* > m_joints;
+
+		btRigidBody* localCreateRigidBody (btScalar mass, 
+			const btTransform& startTransform, 
+			btCollisionShape* shape);
+
+	};
+}
+#endif //_OGREBULLETCOLLISIONS_CollisionWorld_H
+
