Sirikata
|
00001 // Copyright (c) 2011 Sirikata Authors. All rights reserved. 00002 // Use of this source code is governed by a BSD-style license that can 00003 // be found in the LICENSE file. 00004 00005 #ifndef _SIRIKATA_BULLET_PHYSICS_RIGID_BODY_OBJECT_HPP_ 00006 #define _SIRIKATA_BULLET_PHYSICS_RIGID_BODY_OBJECT_HPP_ 00007 00008 #include "BulletObject.hpp" 00009 #include "btBulletDynamicsCommon.h" 00010 00011 namespace Sirikata { 00012 00013 class SirikataMotionState; 00014 00018 class BulletRigidBodyObject : public BulletObject { 00019 public: 00020 BulletRigidBodyObject(BulletPhysicsService* parent, const UUID& uuid, bulletObjTreatment treatment = BULLET_OBJECT_TREATMENT_IGNORE, bulletObjBBox bb = BULLET_OBJECT_BOUNDS_SPHERE, float32 mass = 1.f); 00021 virtual ~BulletRigidBodyObject(); 00022 00023 virtual bool fixed() { return mFixed; } 00024 virtual bulletObjTreatment treatment() { return mTreatment; } 00025 virtual bulletObjBBox bbox() { return mBBox; } 00026 virtual float32 mass() { return mMass; } 00027 00028 virtual void load(Mesh::MeshdataPtr mesh); 00029 virtual void unload(); 00030 virtual void internalTick(const Time& t); 00031 virtual void deactivationTick(const Time& t); 00032 00033 00034 virtual bool applyRequestedLocation(const TimedMotionVector3f& loc, uint64 epoch); 00035 virtual bool applyRequestedOrientation(const TimedMotionQuaternion& orient, uint64 epoch); 00036 virtual void applyForcedLocation(const TimedMotionVector3f& loc, uint64 epoch); 00037 virtual void applyForcedOrientation(const TimedMotionQuaternion& orient, uint64 epoch); 00038 00039 00040 // Updates from SirikataMotionState 00041 void updateBulletFromObject(btTransform& worldTrans); 00042 void updateObjectFromBullet(const btTransform& worldTrans); 00043 00044 private: 00045 void addRigidBody(); 00046 void removeRigidBody(); 00047 00048 UUID mID; 00049 // Bullet specific data. First some basic properties: 00050 bool mFixed; 00051 bulletObjTreatment mTreatment; 00052 bulletObjBBox mBBox; 00053 float32 mMass; 00054 // And then some implementation data: 00055 btCollisionShape* mObjShape; 00056 SirikataMotionState* mObjMotionState; 00057 btRigidBody* mObjRigidBody; 00058 00059 }; // class BulletRigidBodyObject 00060 00061 } // namespace Sirikata 00062 00063 #endif //_SIRIKATA_BULLET_PHYSICS_OBJECT_HPP_