Sirikata
libspace/plugins/physics/BulletRigidBodyObject.hpp
Go to the documentation of this file.
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_