Changeset 11071 for code/trunk/src/orxonox/worldentities/WorldEntity.cc
- Timestamp:
- Jan 17, 2016, 10:29:21 PM (8 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
-
code/trunk/src/orxonox/worldentities/WorldEntity.cc
r10624 r11071 37 37 #include <OgreSceneNode.h> 38 38 #include <BulletDynamics/Dynamics/btRigidBody.h> 39 #include <boost/static_assert.hpp>40 39 41 40 #include "util/OrxAssert.h" … … 57 56 58 57 // Be sure we don't do bad conversions 59 BOOST_STATIC_ASSERT((int)Ogre::Node::TS_LOCAL == (int)WorldEntity::Local);60 BOOST_STATIC_ASSERT((int)Ogre::Node::TS_PARENT == (int)WorldEntity::Parent);61 BOOST_STATIC_ASSERT((int)Ogre::Node::TS_WORLD == (int)WorldEntity::World);58 static_assert((int)Ogre::Node::TS_LOCAL == (int)WorldEntity::TransformSpace::Local, "check enum"); 59 static_assert((int)Ogre::Node::TS_PARENT == (int)WorldEntity::TransformSpace::Parent, "check enum"); 60 static_assert((int)Ogre::Node::TS_WORLD == (int)WorldEntity::TransformSpace::World, "check enum"); 62 61 63 62 RegisterAbstractClass(WorldEntity).inheritsFrom<BaseObject>().inheritsFrom<Synchronisable>(); … … 77 76 this->node_ = this->getScene()->getRootSceneNode()->createChildSceneNode(); 78 77 79 this->parent_ = 0;78 this->parent_ = nullptr; 80 79 this->parentID_ = OBJECTID_UNKNOWN; 81 80 this->bDeleteWithParent_ = true; … … 90 89 91 90 // Default behaviour does not include physics 92 this->physicalBody_ = 0;91 this->physicalBody_ = nullptr; 93 92 this->bPhysicsActive_ = false; 94 93 this->bPhysicsActiveSynchronised_ = false; … … 96 95 this->collisionShape_ = new WorldEntityCollisionShape(this->getContext()); 97 96 this->collisionShape_->setWorldEntityOwner(this); 98 this->collisionType_ = None;99 this->collisionTypeSynchronised_ = None;97 this->collisionType_ = CollisionType::None; 98 this->collisionTypeSynchronised_ = CollisionType::None; 100 99 this->mass_ = 1.0f; 101 100 this->childrenMass_ = 0; … … 208 207 registerVariable(this->bCollisionResponseActive_, 209 208 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionResponseActivityChanged)); 210 registerVariable( (int&)this->collisionTypeSynchronised_,209 registerVariable(this->collisionTypeSynchronised_, 211 210 VariableDirection::ToClient, new NetworkCallback<WorldEntity>(this, &WorldEntity::collisionTypeChanged)); 212 211 registerVariable(this->bPhysicsActiveSynchronised_, … … 234 233 235 234 // iterate over all children and change their activity as well 236 for ( std::set<WorldEntity*>::const_iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); it++)235 for (WorldEntity* object : this->getAttachedObjects()) 237 236 { 238 237 if(!this->isActive()) 239 238 { 240 (*it)->bActiveMem_ = (*it)->isActive();241 (*it)->setActive(this->isActive());239 object->bActiveMem_ = object->isActive(); 240 object->setActive(this->isActive()); 242 241 } 243 242 else 244 243 { 245 (*it)->setActive((*it)->bActiveMem_);244 object->setActive(object->bActiveMem_); 246 245 } 247 246 } … … 260 259 { 261 260 // iterate over all children and change their visibility as well 262 for ( std::set<WorldEntity*>::const_iterator it = this->getAttachedObjects().begin(); it != this->getAttachedObjects().end(); it++)261 for (WorldEntity* object : this->getAttachedObjects()) 263 262 { 264 263 if(!this->isVisible()) 265 264 { 266 (*it)->bVisibleMem_ = (*it)->isVisible();267 (*it)->setVisible(this->isVisible());265 object->bVisibleMem_ = object->isVisible(); 266 object->setVisible(this->isVisible()); 268 267 } 269 268 else 270 269 { 271 (*it)->setVisible((*it)->bVisibleMem_);270 object->setVisible(object->bVisibleMem_); 272 271 } 273 272 } … … 323 322 void WorldEntity::collisionTypeChanged() 324 323 { 325 if (this->collisionTypeSynchronised_ != Dynamic &&326 this->collisionTypeSynchronised_ != Kinematic &&327 this->collisionTypeSynchronised_ != Static &&328 this->collisionTypeSynchronised_ != None)324 if (this->collisionTypeSynchronised_ != CollisionType::Dynamic && 325 this->collisionTypeSynchronised_ != CollisionType::Kinematic && 326 this->collisionTypeSynchronised_ != CollisionType::Static && 327 this->collisionTypeSynchronised_ != CollisionType::None) 329 328 { 330 329 orxout(internal_error) << "Error when collsion Type was received over network. Unknown enum value:" << this->collisionTypeSynchronised_ << endl; … … 498 497 void WorldEntity::notifyDetached() 499 498 { 500 this->parent_ = 0;499 this->parent_ = nullptr; 501 500 this->parentID_ = OBJECTID_UNKNOWN; 502 501 … … 519 518 { 520 519 unsigned int i = 0; 521 for ( std::set<WorldEntity*>::const_iterator it = this->children_.begin(); it != this->children_.end(); ++it)520 for (WorldEntity* child : this->children_) 522 521 { 523 522 if (i == index) 524 return (*it);523 return child; 525 524 ++i; 526 525 } 527 return 0;526 return nullptr; 528 527 } 529 528 … … 563 562 void WorldEntity::detachOgreObject(Ogre::MovableObject* object) 564 563 { 565 object->setUserAny(Ogre::Any(static_cast<OrxonoxClass*>( NULL)));564 object->setUserAny(Ogre::Any(static_cast<OrxonoxClass*>(nullptr))); 566 565 this->node_->detachObject(object); 567 566 } … … 660 659 { 661 660 // If physics is enabled scale the attached CollisionShape. 662 /*if (this->hasPhysics() && this->collisionShape_ != NULL)661 /*if (this->hasPhysics() && this->collisionShape_ != nullptr) 663 662 { 664 663 this->collisionShape_->setScale3D(scale); … … 682 681 switch (relativeTo) 683 682 { 684 case WorldEntity::Local:683 case TransformSpace::Local: 685 684 // position is relative to parent so transform downwards 686 685 this->setPosition(this->getPosition() + this->getOrientation() * distance); 687 686 break; 688 case WorldEntity::Parent:687 case TransformSpace::Parent: 689 688 this->setPosition(this->getPosition() + distance); 690 689 break; 691 case WorldEntity::World:690 case TransformSpace::World: 692 691 // position is relative to parent so transform upwards 693 692 if (this->node_->getParent()) … … 712 711 switch(relativeTo) 713 712 { 714 case WorldEntity::Local:713 case TransformSpace::Local: 715 714 this->setOrientation(this->getOrientation() * rotation); 716 715 break; 717 case WorldEntity::Parent:716 case TransformSpace::Parent: 718 717 // Rotations are normally relative to local axes, transform up 719 718 this->setOrientation(rotation * this->getOrientation()); 720 719 break; 721 case WorldEntity::World:720 case TransformSpace::World: 722 721 // Rotations are normally relative to local axes, transform up 723 722 this->setOrientation(this->getOrientation() * this->getWorldOrientation().Inverse() … … 742 741 switch (relativeTo) 743 742 { 744 case WorldEntity::Local:743 case TransformSpace::Local: 745 744 origin = Vector3::ZERO; 746 745 break; 747 case WorldEntity::Parent:746 case TransformSpace::Parent: 748 747 origin = this->getPosition(); 749 748 break; 750 case WorldEntity::World:749 case TransformSpace::World: 751 750 origin = this->getWorldPosition(); 752 751 break; … … 832 831 833 832 // Check whether we have to create or destroy. 834 if (type != None && this->collisionType_ ==None)833 if (type != CollisionType::None && this->collisionType_ == CollisionType::None) 835 834 { 836 835 /* … … 850 849 this->physicalBody_->setActivationState(DISABLE_DEACTIVATION); 851 850 } 852 else if (type == None && this->collisionType_ !=None)851 else if (type == CollisionType::None && this->collisionType_ != CollisionType::None) 853 852 { 854 853 // Destroy rigid body … … 856 855 deactivatePhysics(); 857 856 delete this->physicalBody_; 858 this->physicalBody_ = 0;859 this->collisionType_ = None;860 this->collisionTypeSynchronised_ = None;857 this->physicalBody_ = nullptr; 858 this->collisionType_ = CollisionType::None; 859 this->collisionTypeSynchronised_ = CollisionType::None; 861 860 return; 862 861 } … … 865 864 switch (type) 866 865 { 867 case Dynamic:866 case CollisionType::Dynamic: 868 867 this->physicalBody_->setCollisionFlags(this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_STATIC_OBJECT & !btCollisionObject::CF_KINEMATIC_OBJECT); 869 868 break; 870 case Kinematic:869 case CollisionType::Kinematic: 871 870 this->physicalBody_->setCollisionFlags((this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_STATIC_OBJECT) | btCollisionObject::CF_KINEMATIC_OBJECT); 872 871 break; 873 case Static:872 case CollisionType::Static: 874 873 this->physicalBody_->setCollisionFlags((this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_KINEMATIC_OBJECT) | btCollisionObject::CF_STATIC_OBJECT); 875 874 break; 876 case None:875 case CollisionType::None: 877 876 assert(false); // Doesn't happen 878 877 return; … … 896 895 CollisionType type; 897 896 if (typeStrLower == "dynamic") 898 type = Dynamic;897 type = CollisionType::Dynamic; 899 898 else if (typeStrLower == "static") 900 type = Static;899 type = CollisionType::Static; 901 900 else if (typeStrLower == "kinematic") 902 type = Kinematic;901 type = CollisionType::Kinematic; 903 902 else if (typeStrLower == "none") 904 type = None;903 type = CollisionType::None; 905 904 else 906 905 ThrowException(ParseError, std::string("Attempting to set an unknown collision type: '") + typeStr + "'."); … … 913 912 switch (this->getCollisionType()) 914 913 { 915 case Dynamic:914 case CollisionType::Dynamic: 916 915 return "dynamic"; 917 case Kinematic:916 case CollisionType::Kinematic: 918 917 return "kinematic"; 919 case Static:918 case CollisionType::Static: 920 919 return "static"; 921 case None:920 case CollisionType::None: 922 921 return "none"; 923 922 default: … … 939 938 // Recalculate mass 940 939 this->childrenMass_ = 0.0f; 941 for ( std::set<WorldEntity*>::const_iterator it = this->children_.begin(); it != this->children_.end(); ++it)942 this->childrenMass_ += (*it)->getMass();940 for (WorldEntity* child : this->children_) 941 this->childrenMass_ += child->getMass(); 943 942 recalculateMassProps(); 944 943 // Notify parent WE
Note: See TracChangeset
for help on using the changeset viewer.