- Timestamp:
- Jun 20, 2009, 9:20:47 AM (16 years ago)
- Location:
- code/trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
code/trunk
- Property svn:mergeinfo changed
/code/branches/pch (added) merged: 3114-3118,3124-3125,3127-3131,3133,3138-3194
- Property svn:mergeinfo changed
-
code/trunk/src/orxonox/objects/worldentities/WorldEntity.cc
r3110 r3196 30 30 #include "WorldEntity.h" 31 31 32 #include <cassert> 32 #include <OgreBillboardSet.h> 33 #include <OgreCamera.h> 34 #include <OgreEntity.h> 35 #include <OgreParticleSystem.h> 36 #include <OgreSceneManager.h> 33 37 #include <OgreSceneNode.h> 34 #include <OgreSceneManager.h> 35 #include "BulletDynamics/Dynamics/btRigidBody.h" 36 38 #include <BulletDynamics/Dynamics/btRigidBody.h> 39 #include <boost/static_assert.hpp> 40 41 #include "util/OrxAssert.h" 42 #include "util/Convert.h" 37 43 #include "util/Exception.h" 38 #include "util/Convert.h"39 44 #include "core/CoreIncludes.h" 40 45 #include "core/XMLPort.h" 41 42 46 #include "objects/Scene.h" 43 47 #include "objects/collisionshapes/WorldEntityCollisionShape.h" … … 51 55 const Vector3 WorldEntity::DOWN = Vector3::NEGATIVE_UNIT_Y; 52 56 const Vector3 WorldEntity::UP = Vector3::UNIT_Y; 57 58 // 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); 53 62 54 63 /** … … 463 472 //! Attaches an Ogre::MovableObject to this WorldEntity. 464 473 void WorldEntity::attachOgreObject(Ogre::MovableObject* object) 465 { 466 this->node_->attachObject(object); 467 } 474 { this->node_->attachObject(object); } 475 void WorldEntity::attachOgreObject(Ogre::BillboardSet* object) 476 { this->node_->attachObject(object); } 477 void WorldEntity::attachOgreObject(Ogre::Camera* object) 478 { this->node_->attachObject(object); } 479 void WorldEntity::attachOgreObject(Ogre::Entity* object) 480 { this->node_->attachObject(object); } 481 void WorldEntity::attachOgreObject(Ogre::ParticleSystem* object) 482 { this->node_->attachObject(object); } 468 483 469 484 //! Detaches an Ogre::MovableObject from this WorldEntity. 470 485 void WorldEntity::detachOgreObject(Ogre::MovableObject* object) 471 { 472 this->node_->detachObject(object); 473 } 486 { this->node_->detachObject(object); } 487 void WorldEntity::detachOgreObject(Ogre::BillboardSet* object) 488 { this->node_->detachObject(object); } 489 void WorldEntity::detachOgreObject(Ogre::Camera* object) 490 { this->node_->detachObject(object); } 491 void WorldEntity::detachOgreObject(Ogre::Entity* object) 492 { this->node_->detachObject(object); } 493 void WorldEntity::detachOgreObject(Ogre::ParticleSystem* object) 494 { this->node_->detachObject(object); } 474 495 475 496 //! Detaches an Ogre::MovableObject (by string) from this WorldEntity. … … 501 522 502 523 // Note: These functions are placed in WorldEntity.h as inline functions for the release build. 503 #ifndef NDEBUG524 #ifndef ORXONOX_RELEASE 504 525 const Vector3& WorldEntity::getPosition() const 505 526 { … … 574 595 Translates this WorldEntity by a vector. 575 596 @param relativeTo 576 @see TransformSpace::Enum577 */ 578 void WorldEntity::translate(const Vector3& distance, TransformSpace ::EnumrelativeTo)597 @see WorldEntity::TransformSpace 598 */ 599 void WorldEntity::translate(const Vector3& distance, TransformSpace relativeTo) 579 600 { 580 601 switch (relativeTo) 581 602 { 582 case TransformSpace::Local:603 case WorldEntity::Local: 583 604 // position is relative to parent so transform downwards 584 605 this->setPosition(this->getPosition() + this->getOrientation() * distance); 585 606 break; 586 case TransformSpace::Parent:607 case WorldEntity::Parent: 587 608 this->setPosition(this->getPosition() + distance); 588 609 break; 589 case TransformSpace::World:610 case WorldEntity::World: 590 611 // position is relative to parent so transform upwards 591 612 if (this->node_->getParent()) … … 602 623 Rotates this WorldEntity by a quaternion. 603 624 @param relativeTo 604 @see TransformSpace::Enum605 */ 606 void WorldEntity::rotate(const Quaternion& rotation, TransformSpace ::EnumrelativeTo)625 @see WorldEntity::TransformSpace 626 */ 627 void WorldEntity::rotate(const Quaternion& rotation, TransformSpace relativeTo) 607 628 { 608 629 switch(relativeTo) 609 630 { 610 case TransformSpace::Local:631 case WorldEntity::Local: 611 632 this->setOrientation(this->getOrientation() * rotation); 612 633 break; 613 case TransformSpace::Parent:634 case WorldEntity::Parent: 614 635 // Rotations are normally relative to local axes, transform up 615 636 this->setOrientation(rotation * this->getOrientation()); 616 637 break; 617 case TransformSpace::World:638 case WorldEntity::World: 618 639 // Rotations are normally relative to local axes, transform up 619 640 this->setOrientation(this->getOrientation() * this->getWorldOrientation().Inverse() … … 627 648 Makes this WorldEntity look a specific target location. 628 649 @param relativeTo 629 @see TransformSpace::Enum650 @see WorldEntity::TransformSpace 630 651 @param localDirectionVector 631 652 The vector which normally describes the natural direction of the object, usually -Z. 632 653 */ 633 void WorldEntity::lookAt(const Vector3& target, TransformSpace ::EnumrelativeTo, const Vector3& localDirectionVector)634 { 635 Vector3 origin ;654 void WorldEntity::lookAt(const Vector3& target, TransformSpace relativeTo, const Vector3& localDirectionVector) 655 { 656 Vector3 origin(0, 0, 0); 636 657 switch (relativeTo) 637 658 { 638 case TransformSpace::Local:659 case WorldEntity::Local: 639 660 origin = Vector3::ZERO; 640 661 break; 641 case TransformSpace::Parent:662 case WorldEntity::Parent: 642 663 origin = this->getPosition(); 643 664 break; 644 case TransformSpace::World:665 case WorldEntity::World: 645 666 origin = this->getWorldPosition(); 646 667 break; … … 653 674 Makes this WorldEntity look in specific direction. 654 675 @param relativeTo 655 @see TransformSpace::Enum676 @see WorldEntity::TransformSpace 656 677 @param localDirectionVector 657 678 The vector which normally describes the natural direction of the object, usually -Z. 658 679 */ 659 void WorldEntity::setDirection(const Vector3& direction, TransformSpace ::EnumrelativeTo, const Vector3& localDirectionVector)680 void WorldEntity::setDirection(const Vector3& direction, TransformSpace relativeTo, const Vector3& localDirectionVector) 660 681 { 661 682 Quaternion savedOrientation(this->getOrientation()); 662 Ogre::Node::TransformSpace ogreRelativeTo; 663 switch (relativeTo) 664 { 665 case TransformSpace::Local: 666 ogreRelativeTo = Ogre::Node::TS_LOCAL; break; 667 case TransformSpace::Parent: 668 ogreRelativeTo = Ogre::Node::TS_PARENT; break; 669 case TransformSpace::World: 670 ogreRelativeTo = Ogre::Node::TS_WORLD; break; 671 default: OrxAssert(false, "Faulty TransformSpace::Enum assigned."); 672 } 673 this->node_->setDirection(direction, ogreRelativeTo, localDirectionVector); 683 this->node_->setDirection(direction, static_cast<Ogre::Node::TransformSpace>(relativeTo), localDirectionVector); 674 684 Quaternion newOrientation(this->node_->getOrientation()); 675 685 this->node_->setOrientation(savedOrientation); … … 772 782 break; 773 783 case Kinematic: 774 this->physicalBody_->setCollisionFlags( this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_STATIC_OBJECT| btCollisionObject::CF_KINEMATIC_OBJECT);784 this->physicalBody_->setCollisionFlags((this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_STATIC_OBJECT) | btCollisionObject::CF_KINEMATIC_OBJECT); 775 785 break; 776 786 case Static: 777 this->physicalBody_->setCollisionFlags( this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_KINEMATIC_OBJECT| btCollisionObject::CF_STATIC_OBJECT);787 this->physicalBody_->setCollisionFlags((this->physicalBody_->getCollisionFlags() & !btCollisionObject::CF_KINEMATIC_OBJECT) | btCollisionObject::CF_STATIC_OBJECT); 778 788 break; 779 789 case None:
Note: See TracChangeset
for help on using the changeset viewer.