Changeset 2178 for code/branches/physics/src/orxonox
- Timestamp:
- Nov 11, 2008, 10:30:49 PM (16 years ago)
- Location:
- code/branches/physics/src/orxonox
- Files:
-
- 2 added
- 4 deleted
- 11 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
code/branches/physics/src/orxonox/OrxonoxPrereqs.h
r2151 r2178 203 203 } 204 204 205 // Bullet Physics Engine 206 207 class btRigidBody; 208 class btCollisionObject; 209 class btGhostObject; 210 class btCollisionShape; 211 class btSphereShape; 212 213 205 214 struct lua_State; 206 215 -
code/branches/physics/src/orxonox/OrxonoxStableHeaders.h
r2087 r2178 48 48 #include <CEGUI.h> 49 49 #include "ois/OIS.h" 50 //#include "btBulletCollisionCommon.h" 51 //#include "btBulletDynamicsCommon.h" 50 52 #include <boost/thread/recursive_mutex.hpp> 51 53 //#include <boost/thread/mutex.hpp> … … 97 99 #include "network/Synchronisable.h" 98 100 99 #include "Settings.h"101 //#include "Settings.h" 100 102 101 103 //#endif /* ifdef NDEBUG */ -
code/branches/physics/src/orxonox/objects/HelloBullet.cc
r2177 r2178 34 34 #include <OgreEntity.h> 35 35 36 // #include "ogreode/OgreOde_Core.h"37 // #include "ogreode/OgreOdeGeometry.h"38 36 #include "util/Convert.h" 39 37 #include "core/CoreIncludes.h" … … 52 50 : BaseObject(creator) 53 51 { 54 55 56 52 RegisterObject(HelloBullet); 53 COUT(0) << "HelloBullet loaded" << std::endl ; 54 int maxProxies = 1024; 57 55 58 56 … … 68 66 // dynamicsWorld = new btDiscreteDynamicsWorld(dispatcher,broadphase,solver,collisionConfiguration); 69 67 70 dynamicsWorld = creator->getScene()->getPhysicalWorld(); 71 dynamicsWorld-> setGravity(btVector3(0,-10,0)); 68 dynamicsWorld = getCreator()->getScene()->getPhysicalWorld(); 72 69 73 70 … … 94 91 95 92 96 97 //load floor mash 93 //load floor mash 98 94 Ogre::SceneManager* sceneMgr = creator->getScene()->getSceneManager(); 99 95 … … 119 115 120 116 121 // crate117 // crate 122 118 123 119 entity_ = sceneMgr->createEntity("crate","crate.mesh"); … … 127 123 entity_->setNormaliseNormals(true); 128 124 entity_->setCastShadows(true); 129 sceneNode_ -> setPosition(Vector3(0,100,0)); 130 131 132 133 134 125 sceneNode_ -> setPosition(Vector3(0,100,0)); 135 126 } 136 127 … … 181 172 void HelloBullet::tick(float dt) 182 173 { 183 dynamicsWorld->stepSimulation(dt,10); 184 btTransform trans; 185 fallRigidBody->getMotionState()->getWorldTransform(trans); 186 // COUT(0) << "sphere height: " << trans.getOrigin().getY() << std::endl; 187 sceneNode_ -> setPosition(Vector3(0,trans.getOrigin().getY(),0)); 188 // msleep(20); 189 190 174 dynamicsWorld->stepSimulation(dt,10); 175 btTransform trans; 176 fallRigidBody->getMotionState()->getWorldTransform(trans); 177 // COUT(0) << "sphere height: " << trans.getOrigin().getY() << std::endl; 178 sceneNode_ -> setPosition(Vector3(0,trans.getOrigin().getY(),0)); 179 // msleep(20); 191 180 } 192 193 181 } -
code/branches/physics/src/orxonox/objects/HelloBullet.h
r2124 r2178 33 33 #include "core/BaseObject.h" 34 34 35 #include "ogrebullet/Dynamics/OgreBulletDynamics.h" 35 #include "btBulletCollisionCommon.h" 36 #include "btBulletDynamicsCommon.h" 36 37 37 38 #include "Tickable.h" -
code/branches/physics/src/orxonox/objects/Scene.cc
r2150 r2178 62 62 this->rootSceneNode_ = 0; 63 63 } 64 // create bullet world; bullet solver etc. 64 } 65 else 66 { 67 // create a dummy SceneManager of our own since we don't have Ogre::Root. 68 this->sceneManager_ = new Ogre::DefaultSceneManager(""); 69 this->rootSceneNode_ = this->sceneManager_->getRootSceneNode(); 70 } 71 72 ///////////// 73 // Physics // 74 ///////////// 75 76 // create bullet world; bullet solver etc. 65 77 66 78 // int maxProxies = 1024; … … 70 82 bt32BitAxisSweep3* broadphase = new bt32BitAxisSweep3(worldAabbMin,worldAabbMax); 71 83 72 84 this -> collisionConfiguration_ = new btDefaultCollisionConfiguration(); 73 85 this -> dispatcher_ = new btCollisionDispatcher(collisionConfiguration_); 74 86 … … 77 89 this -> dynamicsWorld_ = new btDiscreteDynamicsWorld(dispatcher_,broadphase,solver_,collisionConfiguration_); 78 90 79 // dynamicsWorld->setGravity(btVector3(0,-10,0));91 dynamicsWorld_->setGravity(btVector3(0,-10,0)); 80 92 81 }82 else83 {84 // create a dummy SceneManager of our own since we don't have Ogre::Root.85 this->sceneManager_ = new Ogre::DefaultSceneManager("");86 this->rootSceneNode_ = this->sceneManager_->getRootSceneNode();87 }88 93 89 94 // test test test … … 108 113 if (Ogre::Root::getSingletonPtr()) 109 114 { 110 // this->sceneManager_->destroySceneNode(this->rootSceneNode_->getName()); // TODO: remove getName() for newer versions of Ogre111 115 Ogre::Root::getSingleton().destroySceneManager(this->sceneManager_); 112 116 } -
code/branches/physics/src/orxonox/objects/worldentities/ControllableEntity.cc
r2087 r2178 44 44 CreateFactory(ControllableEntity); 45 45 46 ControllableEntity::ControllableEntity(BaseObject* creator) : WorldEntity(creator)46 ControllableEntity::ControllableEntity(BaseObject* creator) : MovableEntity(creator) 47 47 { 48 48 RegisterObject(ControllableEntity); -
code/branches/physics/src/orxonox/objects/worldentities/ControllableEntity.h
r2087 r2178 32 32 #include "OrxonoxPrereqs.h" 33 33 34 #include " WorldEntity.h"34 #include "MovableEntity.h" 35 35 #include "objects/Tickable.h" 36 36 37 37 namespace orxonox 38 38 { 39 class _OrxonoxExport ControllableEntity : public WorldEntity, public Tickable39 class _OrxonoxExport ControllableEntity : public MovableEntity, public Tickable 40 40 { 41 41 public: -
code/branches/physics/src/orxonox/objects/worldentities/MovableEntity.cc
r2087 r2178 32 32 #include "core/CoreIncludes.h" 33 33 #include "core/XMLPort.h" 34 #include "core/Executor.h"35 #include "tools/Timer.h"36 34 37 35 namespace orxonox 38 36 { 39 static const float MAX_RESYNCHRONIZE_TIME = 3.0f;40 41 CreateFactory(MovableEntity);42 43 37 MovableEntity::MovableEntity(BaseObject* creator) : WorldEntity(creator) 44 38 { 45 39 RegisterObject(MovableEntity); 46 47 this->velocity_ = Vector3::ZERO;48 this->acceleration_ = Vector3::ZERO;49 this->rotationAxis_ = Vector3::ZERO;50 this->rotationRate_ = 0;51 this->momentum_ = 0;52 53 this->overwrite_position_ = Vector3::ZERO;54 this->overwrite_orientation_ = Quaternion::IDENTITY;55 40 56 41 this->registerVariables(); … … 64 49 { 65 50 SUPER(MovableEntity, XMLPort, xmlelement, mode); 66 67 XMLPortParamTemplate(MovableEntity, "velocity", setVelocity, getVelocity, xmlelement, mode, const Vector3&);68 XMLPortParamTemplate(MovableEntity, "rotationaxis", setRotationAxis, getRotationAxis, xmlelement, mode, const Vector3&);69 XMLPortParamTemplate(MovableEntity, "rotationrate", setRotationRate, getRotationRate, xmlelement, mode, const Degree&);70 }71 72 void MovableEntity::tick(float dt)73 {74 if (this->isActive())75 {76 this->velocity_ += (dt * this->acceleration_);77 this->node_->translate(dt * this->velocity_);78 79 this->rotationRate_ += (dt * this->momentum_);80 this->node_->rotate(this->rotationAxis_, this->rotationRate_ * dt);81 }82 51 } 83 52 84 53 void MovableEntity::registerVariables() 85 54 { 86 REGISTERDATA(this->velocity_.x, network::direction::toclient);87 REGISTERDATA(this->velocity_.y, network::direction::toclient);88 REGISTERDATA(this->velocity_.z, network::direction::toclient);89 90 REGISTERDATA(this->rotationAxis_.x, network::direction::toclient);91 REGISTERDATA(this->rotationAxis_.y, network::direction::toclient);92 REGISTERDATA(this->rotationAxis_.z, network::direction::toclient);93 94 REGISTERDATA(this->rotationRate_, network::direction::toclient);95 96 REGISTERDATA(this->overwrite_position_, network::direction::toclient, new network::NetworkCallback<MovableEntity>(this, &MovableEntity::overwritePosition));97 REGISTERDATA(this->overwrite_orientation_, network::direction::toclient, new network::NetworkCallback<MovableEntity>(this, &MovableEntity::overwriteOrientation));98 }99 100 void MovableEntity::overwritePosition()101 {102 this->node_->setPosition(this->overwrite_position_);103 }104 105 void MovableEntity::overwriteOrientation()106 {107 this->node_->setOrientation(this->overwrite_orientation_);108 }109 110 void MovableEntity::clientConnected(unsigned int clientID)111 {112 new Timer<MovableEntity>(rnd() * MAX_RESYNCHRONIZE_TIME, false, this, createExecutor(createFunctor(&MovableEntity::resynchronize)), true);113 }114 115 void MovableEntity::clientDisconnected(unsigned int clientID)116 {117 }118 119 void MovableEntity::resynchronize()120 {121 this->overwrite_position_ = this->getPosition();122 this->overwrite_orientation_ = this->getOrientation();123 }124 125 void MovableEntity::setPosition(const Vector3& position)126 {127 this->node_->setPosition(position);128 this->overwrite_position_ = this->node_->getPosition();129 }130 131 void MovableEntity::translate(const Vector3& distance, Ogre::Node::TransformSpace relativeTo)132 {133 this->node_->translate(distance, relativeTo);134 this->overwrite_position_ = this->node_->getPosition();135 }136 137 void MovableEntity::setOrientation(const Quaternion& orientation)138 {139 this->node_->setOrientation(orientation);140 this->overwrite_orientation_ = this->node_->getOrientation();141 }142 143 void MovableEntity::rotate(const Quaternion& rotation, Ogre::Node::TransformSpace relativeTo)144 {145 this->node_->rotate(rotation, relativeTo);146 this->overwrite_orientation_ = this->node_->getOrientation();147 }148 149 void MovableEntity::yaw(const Degree& angle, Ogre::Node::TransformSpace relativeTo)150 {151 this->node_->yaw(angle, relativeTo);152 this->overwrite_orientation_ = this->node_->getOrientation();153 }154 155 void MovableEntity::pitch(const Degree& angle, Ogre::Node::TransformSpace relativeTo)156 {157 this->node_->pitch(angle, relativeTo);158 this->overwrite_orientation_ = this->node_->getOrientation();159 }160 161 void MovableEntity::roll(const Degree& angle, Ogre::Node::TransformSpace relativeTo)162 {163 this->node_->roll(angle, relativeTo);164 this->overwrite_orientation_ = this->node_->getOrientation();165 }166 167 void MovableEntity::lookAt(const Vector3& target, Ogre::Node::TransformSpace relativeTo, const Vector3& localDirectionVector)168 {169 this->node_->lookAt(target, relativeTo, localDirectionVector);170 this->overwrite_orientation_ = this->node_->getOrientation();171 }172 173 void MovableEntity::setDirection(const Vector3& direction, Ogre::Node::TransformSpace relativeTo, const Vector3& localDirectionVector)174 {175 this->node_->setDirection(direction, relativeTo, localDirectionVector);176 this->overwrite_orientation_ = this->node_->getOrientation();177 55 } 178 56 } -
code/branches/physics/src/orxonox/objects/worldentities/MovableEntity.h
r2087 r2178 38 38 namespace orxonox 39 39 { 40 class _OrxonoxExport MovableEntity : public WorldEntity , public Tickable, public network::ClientConnectionListener40 class _OrxonoxExport MovableEntity : public WorldEntity 41 41 { 42 42 public: … … 45 45 46 46 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 47 virtual void tick(float dt);48 47 void registerVariables(); 49 48 50 using WorldEntity::setPosition; 51 using WorldEntity::translate; 52 using WorldEntity::setOrientation; 53 using WorldEntity::rotate; 54 using WorldEntity::yaw; 55 using WorldEntity::pitch; 56 using WorldEntity::roll; 57 using WorldEntity::lookAt; 58 using WorldEntity::setDirection; 49 private: 59 50 60 void setPosition(const Vector3& position); 61 void translate(const Vector3& distance, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL); 62 void setOrientation(const Quaternion& orientation); 63 void rotate(const Quaternion& rotation, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL); 64 void yaw(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL); 65 void pitch(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL); 66 void roll(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL); 67 void lookAt(const Vector3& target, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z); 68 void setDirection(const Vector3& direction, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z); 51 //void attachPhysicalObject(WorldEntity* object); 69 52 70 inline void setVelocity(const Vector3& velocity) 71 { this->velocity_ = velocity; } 72 inline void setVelocity(float x, float y, float z) 73 { this->velocity_.x = x; this->velocity_.y = y; this->velocity_.z = z; } 74 inline const Vector3& getVelocity() const 75 { return this->velocity_; } 53 //// Bullet btMotionState related 54 //void setWorldTransform(const btTransform& worldTrans) 55 //{ 56 // this->node_->setPosition(worldTrans.getOrigin().x(), worldTrans.getOrigin().y(), worldTrans.getOrigin().z()); 57 // this->node_->setOrientation(worldTrans.getRotation().w(), worldTrans.getRotation().x(), worldTrans.getRotation().y(), worldTrans.getRotation().z()); 58 // //this->velocity_.x = this->physicalBody_-> 59 //} 76 60 77 inline void setAcceleration(const Vector3& acceleration) 78 { this->acceleration_ = acceleration; } 79 inline void setAcceleration(float x, float y, float z) 80 { this->acceleration_.x = x; this->acceleration_.y = y; this->acceleration_.z = z; } 81 inline const Vector3& getAcceleration() const 82 { return this->acceleration_; } 83 84 inline void setRotationAxis(const Vector3& axis) 85 { this->rotationAxis_ = axis; this->rotationAxis_.normalise(); } 86 inline void setRotationAxis(float x, float y, float z) 87 { this->rotationAxis_.x = x; this->rotationAxis_.y = y; this->rotationAxis_.z = z; rotationAxis_.normalise(); } 88 inline const Vector3& getRotationAxis() const 89 { return this->rotationAxis_; } 90 91 inline void setRotationRate(const Degree& angle) 92 { this->rotationRate_ = angle; } 93 inline void setRotationRate(const Radian& angle) 94 { this->rotationRate_ = angle; } 95 inline const Degree& getRotationRate() const 96 { return this->rotationRate_; } 97 98 inline void setMomentum(const Degree& angle) 99 { this->momentum_ = angle; } 100 inline void setMomentum(const Radian& angle) 101 { this->momentum_ = angle; } 102 inline const Degree& getMomentum() const 103 { return this->momentum_; } 104 105 private: 106 void clientConnected(unsigned int clientID); 107 void clientDisconnected(unsigned int clientID); 108 void resynchronize(); 109 110 void overwritePosition(); 111 void overwriteOrientation(); 112 113 Vector3 velocity_; 114 Vector3 acceleration_; 115 Vector3 rotationAxis_; 116 Degree rotationRate_; 117 Degree momentum_; 118 119 Vector3 overwrite_position_; 120 Quaternion overwrite_orientation_; 61 //// Bullet btMotionState related 62 //void getWorldTransform(btTransform& worldTrans) const 63 //{ 64 // worldTrans.setOrigin(btVector3(node_->getPosition().x, node_->getPosition().y, node_->getPosition().z)); 65 // worldTrans.setRotation(btQuaternion(node_->getOrientation().w, node_->getOrientation().x, node_->getOrientation().y, node_->getOrientation().z)); 66 //} 121 67 }; 122 68 } -
code/branches/physics/src/orxonox/objects/worldentities/PositionableEntity.cc
r2151 r2178 28 28 29 29 #include "OrxonoxStableHeaders.h" 30 #include " StaticEntity.h"30 #include "PositionableEntity.h" 31 31 #include "core/CoreIncludes.h" 32 32 33 33 namespace orxonox 34 34 { 35 CreateFactory( StaticEntity);35 CreateFactory(PositionableEntity); 36 36 37 StaticEntity::StaticEntity(BaseObject* creator) : WorldEntity(creator)37 PositionableEntity::PositionableEntity(BaseObject* creator) : MovableEntity(creator) 38 38 { 39 RegisterObject( StaticEntity);39 RegisterObject(PositionableEntity); 40 40 41 41 this->registerVariables(); 42 42 } 43 43 44 StaticEntity::~StaticEntity()44 PositionableEntity::~PositionableEntity() 45 45 { 46 46 } 47 47 48 void StaticEntity::registerVariables()48 void PositionableEntity::registerVariables() 49 49 { 50 50 REGISTERDATA(this->getPosition().x, network::direction::toclient); … … 57 57 REGISTERDATA(this->getOrientation().z, network::direction::toclient); 58 58 } 59 60 //void PositionableEntity::attachPhysicalObject(WorldEntity* object) 61 //{ 62 //} 59 63 } -
code/branches/physics/src/orxonox/objects/worldentities/PositionableEntity.h
r2151 r2178 27 27 */ 28 28 29 #ifndef _ StaticEntity_H__30 #define _ StaticEntity_H__29 #ifndef _PositionableEntity_H__ 30 #define _PositionableEntity_H__ 31 31 32 32 #include "OrxonoxPrereqs.h" 33 #include " WorldEntity.h"33 #include "MovableEntity.h" 34 34 35 35 namespace orxonox 36 36 { 37 class _OrxonoxExport StaticEntity : public WorldEntity37 class _OrxonoxExport PositionableEntity : public MovableEntity 38 38 { 39 39 public: 40 StaticEntity(BaseObject* creator);41 virtual ~ StaticEntity();40 PositionableEntity(BaseObject* creator); 41 virtual ~PositionableEntity(); 42 42 43 43 void registerVariables(); … … 71 71 inline void setDirection(const Vector3& direction, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z) 72 72 { this->node_->setDirection(direction, relativeTo, localDirectionVector); } 73 74 private: 75 //void attachPhysicalObject(WorldEntity* object); 73 76 }; 74 77 } 75 78 76 #endif /* _ StaticEntity_H__ */79 #endif /* _PositionableEntity_H__ */ -
code/branches/physics/src/orxonox/objects/worldentities/WorldEntity.cc
r2087 r2178 32 32 #include <cassert> 33 33 #include <OgreSceneManager.h> 34 #include "BulletCollision/CollisionShapes/btSphereShape.h" 34 35 35 36 #include "core/CoreIncludes.h" … … 63 64 this->node_->setOrientation(Quaternion::IDENTITY); 64 65 66 // Default behaviour does not include physics 67 this->bAddedToPhysicalWorld_ = false; 68 this->physicalBody_ = 0; 69 65 70 this->registerVariables(); 66 71 } … … 73 78 if (this->getScene()->getSceneManager()) 74 79 this->getScene()->getSceneManager()->destroySceneNode(this->node_->getName()); 80 81 // Physics is not guaranteed, so check first 82 if (this->physicalBody_) 83 { 84 if (this->bAddedToPhysicalWorld_) 85 this->getScene()->getPhysicalWorld()->removeRigidBody(this->physicalBody_); 86 if (this->physicalBody_->getCollisionShape()) 87 delete this->physicalBody_->getCollisionShape(); 88 delete this->physicalBody_; 89 } 75 90 } 76 91 } … … 89 104 XMLPortParamTemplate(WorldEntity, "scale3D", setScale3D, getScale3D, xmlelement, mode, const Vector3&); 90 105 XMLPortParam(WorldEntity, "scale", setScale, getScale, xmlelement, mode); 106 XMLPortParam(WorldEntity, "collisionRadius", setcollisionRadius, getcollisionRadius, xmlelement, mode); 91 107 92 108 XMLPortObject(WorldEntity, WorldEntity, "attached", attach, getAttachedObject, xmlelement, mode); … … 127 143 object->parent_ = this; 128 144 object->parentID_ = this->getObjectID(); 145 146 // Do the physical connection if required 147 this->attachPhysicalObject(object); 129 148 } 130 149 … … 150 169 return 0; 151 170 } 171 172 void WorldEntity::createPhysicalBody() 173 { 174 // Note: The motion state will be configured in a derived class. 175 btRigidBody::btRigidBodyConstructionInfo bodyConstructionInfo(0, this, 0, btVector3(0,0,0)); 176 this->physicalBody_ = new btRigidBody(bodyConstructionInfo); 177 this->getScene()->getPhysicalWorld()->addRigidBody(this->physicalBody_); 178 this->bAddedToPhysicalWorld_ = true; 179 } 180 181 void WorldEntity::setcollisionRadius(float radius) 182 { 183 if (!this->physicalBody_) 184 createPhysicalBody(); 185 186 // destroy old onw first 187 btCollisionShape* oldShape = this->physicalBody_->getCollisionShape(); 188 if (oldShape) 189 delete oldShape; 190 191 this->physicalBody_->setCollisionShape(new btSphereShape(btScalar(radius))); 192 } 193 194 float WorldEntity::getcollisionRadius() 195 { 196 if (this->physicalBody_) 197 { 198 btSphereShape* sphere = dynamic_cast<btSphereShape*>(this->physicalBody_->getCollisionShape()); 199 if (sphere) 200 return (float)sphere->getRadius(); 201 } 202 return 0.0f; 203 } 152 204 } -
code/branches/physics/src/orxonox/objects/worldentities/WorldEntity.h
r2087 r2178 33 33 34 34 #define OGRE_FORCE_ANGLE_TYPES 35 #include <OgreSceneNode.h> 35 36 36 #include <OgreSceneNode.h> 37 #include "LinearMath/btMotionState.h" 38 #include "BulletDynamics/Dynamics/btRigidBody.h" 37 39 38 40 #include "network/Synchronisable.h" … … 42 44 namespace orxonox 43 45 { 44 class _OrxonoxExport WorldEntity : public BaseObject, public network::Synchronisable 46 class _OrxonoxExport WorldEntity : public BaseObject, public network::Synchronisable, public btMotionState 45 47 { 46 48 public: … … 125 127 { this->node_->scale(scale, scale, scale); } 126 128 129 void setcollisionRadius(float radius); 130 float getcollisionRadius(); 131 132 bool hasPhysics() { return this->physicalBody_; } 133 bool isKinematic() { return this->physicalBody_ && this->physicalBody_->isKinematicObject(); } 134 bool isDynamic() { return this->physicalBody_ && !this->physicalBody_->isStaticOrKinematicObject(); } 135 127 136 void attach(WorldEntity* object); 128 137 void detach(WorldEntity* object); … … 139 148 140 149 protected: 150 //virtual btCollisionShape* getCollisionShape() = 0; 151 152 void createPhysicalBody(); 153 virtual void attachPhysicalObject(WorldEntity* object) { } 154 141 155 Ogre::SceneNode* node_; 156 bool bAddedToPhysicalWorld_; 157 btRigidBody* physicalBody_; 142 158 143 159 private: … … 155 171 { this->roll(angle); } 156 172 173 // Bullet btMotionState related 174 virtual void setWorldTransform(const btTransform& worldTrans) 175 { 176 } 177 178 // Bullet btMotionState related 179 virtual void getWorldTransform(btTransform& worldTrans) const 180 { 181 } 182 157 183 WorldEntity* parent_; 158 184 unsigned int parentID_;
Note: See TracChangeset
for help on using the changeset viewer.