- Timestamp:
- Dec 22, 2008, 10:23:29 PM (16 years ago)
- Location:
- code/branches/presentation/src/orxonox/objects/collisionshapes
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/presentation/src/orxonox/objects/collisionshapes/CollisionShape.cc
r2515 r2527 62 62 // Detach from parent 63 63 if (this->isInitialized() && this->parent_) 64 this->parent_-> removeChildShape(this);64 this->parent_->detach(this); 65 65 } 66 66 … … 87 87 CompoundCollisionShape* parent = dynamic_cast<CompoundCollisionShape*>(Synchronisable::getSynchronisable(this->parentID_)); 88 88 if (parent) 89 parent->a ddChildShape(this);89 parent->attach(this); 90 90 } 91 91 … … 93 93 { 94 94 if (this->parent_) 95 this->parent_->update ChildShape(this);95 this->parent_->updateAttachedShape(this); 96 96 } 97 97 -
code/branches/presentation/src/orxonox/objects/collisionshapes/CompoundCollisionShape.cc
r2514 r2527 55 55 { 56 56 // Delete all children 57 for (std::map<CollisionShape*, btCollisionShape*>::iterator it = this-> childShapes_.begin();58 it != this-> childShapes_.end(); ++it)57 for (std::map<CollisionShape*, btCollisionShape*>::iterator it = this->attachedShapes_.begin(); 58 it != this->attachedShapes_.end(); ++it) 59 59 { 60 60 // make sure that the child doesn't want to detach itself --> speedup because of the missing update … … 71 71 SUPER(CompoundCollisionShape, XMLPort, xmlelement, mode); 72 72 // Attached collision shapes 73 XMLPortObject(CompoundCollisionShape, CollisionShape, "", a ddChildShape, getChildShape, xmlelement, mode);73 XMLPortObject(CompoundCollisionShape, CollisionShape, "", attach, detach, xmlelement, mode); 74 74 } 75 75 … … 82 82 } 83 83 84 void CompoundCollisionShape::a ddChildShape(CollisionShape* shape)84 void CompoundCollisionShape::attach(CollisionShape* shape) 85 85 { 86 86 if (!shape || static_cast<CollisionShape*>(this) == shape) 87 87 return; 88 if (this-> childShapes_.find(shape) != this->childShapes_.end())88 if (this->attachedShapes_.find(shape) != this->attachedShapes_.end()) 89 89 { 90 90 CCOUT(2) << "Warning: Attaching a CollisionShape twice is not yet supported." << std::endl; 91 91 return; 92 92 } 93 this-> childShapes_[shape] = shape->getCollisionShape();93 this->attachedShapes_[shape] = shape->getCollisionShape(); 94 94 95 95 if (shape->getCollisionShape()) … … 113 113 } 114 114 115 void CompoundCollisionShape:: removeChildShape(CollisionShape* shape)116 { 117 if (this-> childShapes_.find(shape) != this->childShapes_.end())115 void CompoundCollisionShape::detach(CollisionShape* shape) 116 { 117 if (this->attachedShapes_.find(shape) != this->attachedShapes_.end()) 118 118 { 119 119 shape->setParent(0, OBJECTID_UNKNOWN); 120 this-> childShapes_.erase(shape);120 this->attachedShapes_.erase(shape); 121 121 if (shape->getCollisionShape()) 122 122 this->compoundShape_->removeChildShape(shape->getCollisionShape()); … … 124 124 this->updatePublicShape(); 125 125 } 126 } 127 128 void CompoundCollisionShape::removeAllChildShapes() 129 { 130 while (this->childShapes_.size() > 0) 131 this->removeChildShape(this->childShapes_.begin()->first); 132 } 133 134 void CompoundCollisionShape::updateChildShape(CollisionShape* shape) 126 else 127 CCOUT(2) << "Warning: Cannot detach non child collision shape" << std::endl; 128 } 129 130 void CompoundCollisionShape::detachAll() 131 { 132 while (this->attachedShapes_.size() > 0) 133 this->detach(this->attachedShapes_.begin()->first); 134 } 135 136 void CompoundCollisionShape::updateAttachedShape(CollisionShape* shape) 135 137 { 136 138 if (!shape) 137 139 return; 138 std::map<CollisionShape*, btCollisionShape*>::iterator it = this-> childShapes_.find(shape);139 if (it == this-> childShapes_.end())140 std::map<CollisionShape*, btCollisionShape*>::iterator it = this->attachedShapes_.find(shape); 141 if (it == this->attachedShapes_.end()) 140 142 { 141 143 CCOUT(2) << "Warning: Cannot update child shape: Instance not a child." << std::endl; … … 162 164 bool bPrimitive = true; 163 165 bool bEmpty = true; 164 for (std::map<CollisionShape*, btCollisionShape*>::const_iterator it = this-> childShapes_.begin(); it != this->childShapes_.end(); ++it)166 for (std::map<CollisionShape*, btCollisionShape*>::const_iterator it = this->attachedShapes_.begin(); it != this->attachedShapes_.end(); ++it) 165 167 { 166 168 if (it->second) … … 198 200 { 199 201 if (this->parent_) 200 this->parent_->update ChildShape(this);202 this->parent_->updateAttachedShape(this); 201 203 if (this->worldEntityParent_) 202 204 this->worldEntityParent_->notifyCollisionShapeChanged(); … … 209 211 } 210 212 211 CollisionShape* CompoundCollisionShape::get ChildShape(unsigned int index) const213 CollisionShape* CompoundCollisionShape::getAttachedShape(unsigned int index) const 212 214 { 213 215 unsigned int i = 0; 214 for (std::map<CollisionShape*, btCollisionShape*>::const_iterator it = this-> childShapes_.begin(); it != this->childShapes_.end(); ++it)216 for (std::map<CollisionShape*, btCollisionShape*>::const_iterator it = this->attachedShapes_.begin(); it != this->attachedShapes_.end(); ++it) 215 217 { 216 218 if (i == index) -
code/branches/presentation/src/orxonox/objects/collisionshapes/CompoundCollisionShape.h
r2514 r2527 46 46 virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); 47 47 48 void a ddChildShape(CollisionShape* shape);49 void removeChildShape(CollisionShape* shape);50 void removeAllChildShapes();51 CollisionShape* get ChildShape(unsigned int index) const;48 void attach(CollisionShape* shape); 49 void detach(CollisionShape* shape); 50 void detachAll(); 51 CollisionShape* getAttachedShape(unsigned int index) const; 52 52 53 void update ChildShape(CollisionShape* shape);53 void updateAttachedShape(CollisionShape* shape); 54 54 55 55 void setWorldEntityParent(WorldEntity* parent); … … 65 65 66 66 btCompoundShape* compoundShape_; 67 std::map<CollisionShape*, btCollisionShape*> childShapes_;67 std::map<CollisionShape*, btCollisionShape*> attachedShapes_; 68 68 WorldEntity* worldEntityParent_; 69 69 };
Note: See TracChangeset
for help on using the changeset viewer.