00001 /*========================================================================= 00002 UberSim Source Code Release 00003 ------------------------------------------------------------------------- 00004 Copyright (C) 2002 Manuela Veloso, Brett Browning, Mike Bowling, 00005 James Bruce; {mmv, brettb, mhb, jbruce}@cs.cmu.edu 00006 Erick Tryzelaar {erickt}@andrew.cmu.edu 00007 School of Computer Science, Carnegie Mellon University 00008 ------------------------------------------------------------------------- 00009 This software is distributed under the GNU General Public License, 00010 version 2. If you do not have a copy of this licence, visit 00011 www.gnu.org, or write: Free Software Foundation, 59 Temple Place, 00012 Suite 330 Boston, MA 02111-1307 USA. This program is distributed 00013 in the hope that it will be useful, but WITHOUT ANY WARRANTY, 00014 including MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00015 -------------------------------------------------------------------------*/ 00016 00017 #ifndef __SIM_RIGIDBODY_H__ 00018 #define __SIM_RIGIDBODY_H__ 00019 00020 #include "nommgr.h" 00021 #include <ode/ode.h> 00022 #include "mmgr.h" 00023 00024 #include "MotionController.h" 00031 class Island; 00032 class RigidBodyCollider; 00033 class Surface; 00034 00035 class RigidBody : public MotionController 00036 { 00037 public: 00038 RigidBody (); 00039 virtual ~RigidBody (); 00040 00041 public: 00042 dBodyID& getBody (); 00043 00044 virtual Island* getIsland (); 00045 00046 RigidBodyCollider* getRigidBodyCollider (); 00047 00048 Vector3 getAppliedForce (); 00049 Vector3 getAppliedTorque (); 00050 00051 void setBody (dBodyID& body); 00052 virtual void setIsland (Island* island); 00053 00054 void setRigidBodyCollider (RigidBodyCollider* rigidBodyCollider); 00055 00056 void setAppliedForce (const Vector3& force); 00057 void setAppliedTorque (const Vector3& torque); 00058 00059 void setRollingMu (const Real rollingMu); 00060 00061 virtual void setLocalPosition (const Vector3& localPosition); 00062 virtual void setLocalRotation (const Matrix33& localRotation); 00063 virtual void setLocalVelocity (const Vector3& localVelocity); 00064 virtual void setLocalAngularVelocity (const Vector3& localAngularVelocity); 00065 virtual void setLocalAcceleration (const Vector3& localAcceleration); 00066 virtual void setLocalAngularAcceleration (const Vector3& localAngularAcceleration); 00067 00068 virtual void setWorldPosition (const Vector3& worldPosition); 00069 virtual void setWorldRotation (const Matrix33& worldRotation); 00070 virtual void setWorldVelocity (const Vector3& worldVelocity); 00071 virtual void setWorldAngularVelocity (const Vector3& worldAngularVelocity); 00072 virtual void setWorldAcceleration (const Vector3& worldAcceleration); 00073 virtual void setWorldAngularAcceleration (const Vector3& worldAngularAcceleration); 00074 00075 public: 00076 void addForce (const Vector3& force); 00077 void addTorque (const Vector3& torque); 00078 00079 public: 00080 virtual void update (Real deltaTime); 00081 00082 protected: 00083 Island* island; 00084 00085 dBodyID body; 00086 Real rollingMu; 00087 00088 RigidBodyCollider* rigidBodyCollider; 00089 }; 00090 00091 #endif