- Timestamp:
- Jan 1, 2009, 7:34:44 PM (16 years ago)
- Location:
- code/branches/presentation/src/orxonox/objects/worldentities
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentation/src/orxonox/objects/worldentities/WorldEntity.cc
r2540 r2562 42 42 43 43 #include "objects/Scene.h" 44 #include "objects/collisionshapes/WorldEntityCollisionShape.h" 44 45 45 46 namespace orxonox … … 57 58 All the default values are being set here. 58 59 */ 59 WorldEntity::WorldEntity(BaseObject* creator) : BaseObject(creator), Synchronisable(creator) , collisionShape_(0)60 WorldEntity::WorldEntity(BaseObject* creator) : BaseObject(creator), Synchronisable(creator) 60 61 { 61 62 RegisterObject(WorldEntity); … … 74 75 75 76 // Default behaviour does not include physics 76 // Note: CompoundCollisionShape is a Synchronisable, but must not be synchronised.77 // All objects will get attached on the client anyway, so we don't need synchronisation.78 this->collisionShape_.setWorldEntityParent(this);79 77 this->physicalBody_ = 0; 80 78 this->bPhysicsActive_ = false; 81 79 this->bPhysicsActiveSynchronised_ = false; 82 80 this->bPhysicsActiveBeforeAttaching_ = false; 81 this->collisionShape_ = new WorldEntityCollisionShape(this); 83 82 this->collisionType_ = None; 84 83 this->collisionTypeSynchronised_ = None; … … 115 114 delete this->physicalBody_; 116 115 } 116 delete this->collisionShape_; 117 117 118 118 this->node_->detachAllObjects(); … … 291 291 this->children_.insert(object); 292 292 293 this->attachCollisionShape( &object->collisionShape_);293 this->attachCollisionShape(object->collisionShape_); 294 294 // mass 295 295 this->childrenMass_ += object->getMass(); … … 345 345 346 346 // apply transform to collision shape 347 this->collisionShape_ .setPosition(this->getPosition());348 this->collisionShape_ .setOrientation(this->getOrientation());347 this->collisionShape_->setPosition(this->getPosition()); 348 this->collisionShape_->setOrientation(this->getOrientation()); 349 349 // TODO: Scale 350 350 … … 365 365 366 366 // collision shapes 367 this->detachCollisionShape( &object->collisionShape_);367 this->detachCollisionShape(object->collisionShape_); 368 368 369 369 // mass … … 390 390 391 391 // reset orientation of the collisionShape (cannot be set within a WE usually) 392 this->collisionShape_ .setPosition(Vector3::ZERO);393 this->collisionShape_ .setOrientation(Quaternion::IDENTITY);392 this->collisionShape_->setPosition(Vector3::ZERO); 393 this->collisionShape_->setOrientation(Quaternion::IDENTITY); 394 394 // TODO: Scale 395 395 … … 451 451 void WorldEntity::attachCollisionShape(CollisionShape* shape) 452 452 { 453 this->collisionShape_ .attach(shape);453 this->collisionShape_->attach(shape); 454 454 // Note: this->collisionShape_ already notifies us of any changes. 455 455 } … … 458 458 void WorldEntity::detachCollisionShape(CollisionShape* shape) 459 459 { 460 this->collisionShape_.detach(shape); 460 // Note: The collision shapes may not be detached with this function! 461 this->collisionShape_->detach(shape); 461 462 // Note: this->collisionShape_ already notifies us of any changes. 462 463 } … … 465 466 CollisionShape* WorldEntity::getAttachedCollisionShape(unsigned int index) 466 467 { 467 return this->collisionShape_ .getAttachedShape(index);468 return this->collisionShape_->getAttachedShape(index); 468 469 } 469 470 … … 718 719 */ 719 720 // Create new rigid body 720 btRigidBody::btRigidBodyConstructionInfo bodyConstructionInfo(0, this, this->collisionShape_ .getCollisionShape());721 btRigidBody::btRigidBodyConstructionInfo bodyConstructionInfo(0, this, this->collisionShape_->getCollisionShape()); 721 722 this->physicalBody_ = new btRigidBody(bodyConstructionInfo); 722 723 this->physicalBody_->setUserPointer(this); … … 851 852 { 852 853 this->deactivatePhysics(); 853 this->physicalBody_->setCollisionShape(this->collisionShape_ .getCollisionShape());854 this->physicalBody_->setCollisionShape(this->collisionShape_->getCollisionShape()); 854 855 this->activatePhysics(); 855 856 } 856 857 else 857 this->physicalBody_->setCollisionShape(this->collisionShape_ .getCollisionShape());858 this->physicalBody_->setCollisionShape(this->collisionShape_->getCollisionShape()); 858 859 } 859 860 recalculateMassProps(); … … 865 866 // Store local inertia for faster access. Evaluates to (0,0,0) if there is no collision shape. 866 867 float totalMass = this->mass_ + this->childrenMass_; 867 this->collisionShape_ .calculateLocalInertia(totalMass, this->localInertia_);868 this->collisionShape_->calculateLocalInertia(totalMass, this->localInertia_); 868 869 if (this->hasPhysics()) 869 870 { … … 878 879 CCOUT(4) << "Warning: Setting the internal physical mass to 1.0 because mass_ is 0.0" << std::endl; 879 880 btVector3 inertia(0, 0, 0); 880 this->collisionShape_ .calculateLocalInertia(1.0f, inertia);881 this->collisionShape_->calculateLocalInertia(1.0f, inertia); 881 882 this->physicalBody_->setMassProps(1.0f, inertia); 882 883 } -
code/branches/presentation/src/orxonox/objects/worldentities/WorldEntity.h
r2540 r2562 43 43 #include "core/BaseObject.h" 44 44 #include "network/synchronisable/Synchronisable.h" 45 #include "objects/collisionshapes/CompoundCollisionShape.h"46 45 47 46 namespace orxonox … … 69 68 You can get more information at the corresponding set function. 70 69 71 Collision shapes: These are controlled by the internal CompoundCollisionShape. @see CompoundCollisionShape.70 Collision shapes: These are controlled by the internal WorldEntityCollisionShape. @see WorldEntityCollisionShape. 72 71 */ 73 72 class _OrxonoxExport WorldEntity : public BaseObject, public Synchronisable, public btMotionState … … 399 398 //! When attaching objects hierarchically this variable tells this object (as child) whether physics was activated before attaching (because the deactivate physics while being attached). 400 399 bool bPhysicsActiveBeforeAttaching_; 401 CompoundCollisionShapecollisionShape_; //!< Attached collision shapes go here400 WorldEntityCollisionShape* collisionShape_; //!< Attached collision shapes go here 402 401 btScalar mass_; //!< @see setMass 403 402 btVector3 localInertia_; //!< @see getLocalInertia
Note: See TracChangeset
for help on using the changeset viewer.