Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Dec 13, 2008, 8:55:40 PM (17 years ago)
Author:
rgrieder
Message:
  • Handled translate, rotate, yaw, pitch, roll, lookAt and setDirection internally in WE. That only leaves setPosition and setOrientation to be pure virtual.
  • Removed loads of redundant and now obsolete code in MobileEntity and StaticEntity
  • Removed OgreSceneNode.h from WorldEntity in debug builds. getPosition, getOrientation and getScale3D are only inline in release mode. That should speed up dev builds a lot (the include is about 8300 line without Vector3, Quaternion, etc.)

Important:

  • Fixed a bug or introduced one: the lookAt(…) function in WE had default TransformSpace "TS_LOCAL", but that makes no sense the way I see it. Consider a SpaceShip and you would like it to face an asteroid. Then TS_LOCAL would yield weird results. The XMLPort attribute "lookAt" used the default value. That's where the bug might have been fixed or (I don't believe so) introduced.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/physics/src/orxonox/objects/worldentities/WorldEntity.h

    r2423 r2426  
    3333#include "OrxonoxPrereqs.h"
    3434
    35 #define OGRE_FORCE_ANGLE_TYPES
     35#ifdef _NDEBUG
    3636#include <OgreSceneNode.h>
     37#else
     38#include <OgrePrerequisites.h>
     39#endif
    3740#include "LinearMath/btMotionState.h"
    3841
     
    6568            inline void setPosition(float x, float y, float z)
    6669                { this->setPosition(Vector3(x, y, z)); }
    67             inline const Vector3& getPosition() const
    68                 { return this->node_->getPosition(); }
    69             inline const Vector3& getWorldPosition() const
    70                 { return this->node_->getWorldPosition(); }
    71 
    72             virtual void translate(const Vector3& distance, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL) = 0;
    73             inline void translate(float x, float y, float z, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
     70            const Vector3& getPosition() const;
     71            const Vector3& getWorldPosition() const;
     72
     73            void translate(const Vector3& distance, TransformSpace::Space relativeTo = TransformSpace::Parent);
     74            inline void translate(float x, float y, float z, TransformSpace::Space relativeTo = TransformSpace::Parent)
    7475                { this->translate(Vector3(x, y, z), relativeTo); }
    7576
     
    8182            inline void setOrientation(const Vector3& axis, const Degree& angle)
    8283                { this->setOrientation(Quaternion(angle, axis)); }
    83             inline const Quaternion& getOrientation() const
    84                 { return this->node_->getOrientation(); }
    85             inline const Quaternion& getWorldOrientation() const
    86                 { return this->node_->getWorldOrientation(); }
    87 
    88             virtual void rotate(const Quaternion& rotation, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL) = 0;
    89             inline void rotate(const Vector3& axis, const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
     84            const Quaternion& getOrientation() const;
     85            const Quaternion& getWorldOrientation() const;
     86
     87            void rotate(const Quaternion& rotation, TransformSpace::Space relativeTo = TransformSpace::Local);
     88            inline void rotate(const Vector3& axis, const Degree& angle, TransformSpace::Space relativeTo = TransformSpace::Local)
    9089                { this->rotate(Quaternion(angle, axis), relativeTo); }
    91             inline void rotate(const Vector3& axis, const Radian& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
    92                 { this->rotate(Quaternion(angle, axis), relativeTo); }
    93 
    94             virtual void yaw(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL) = 0;
    95             inline void yaw(const Radian& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
    96                 { this->yaw(Degree(angle), relativeTo); }
    97             virtual void pitch(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL) = 0;
    98             inline void pitch(const Radian& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
    99                 { this->pitch(Degree(angle), relativeTo); }
    100             virtual void roll(const Degree& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL) = 0;
    101             inline void roll(const Radian& angle, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL)
    102                 { this->roll(Degree(angle), relativeTo); }
    103 
    104             virtual void lookAt(const Vector3& target, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z) = 0;
    105             virtual void setDirection(const Vector3& direction, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z) = 0;
    106             inline void setDirection(float x, float y, float z, Ogre::Node::TransformSpace relativeTo = Ogre::Node::TS_LOCAL, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z)
     90
     91            inline void yaw(const Degree& angle, TransformSpace::Space relativeTo = TransformSpace::Local)
     92                { this->rotate(Quaternion(angle, Vector3::UNIT_Y), relativeTo); }
     93            inline void pitch(const Degree& angle, TransformSpace::Space relativeTo = TransformSpace::Local)
     94                { this->rotate(Quaternion(angle, Vector3::UNIT_X), relativeTo); }
     95            inline void roll(const Degree& angle, TransformSpace::Space relativeTo = TransformSpace::Local)
     96                { this->rotate(Quaternion(angle, Vector3::UNIT_Z), relativeTo); }
     97
     98            void lookAt(const Vector3& target, TransformSpace::Space relativeTo = TransformSpace::Parent, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
     99            void setDirection(const Vector3& direction, TransformSpace::Space relativeTo = TransformSpace::Local, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z);
     100            inline void setDirection(float x, float y, float z, TransformSpace::Space relativeTo = TransformSpace::Local, const Vector3& localDirectionVector = Vector3::NEGATIVE_UNIT_Z)
    107101                { this->setDirection(Vector3(x, y, z), relativeTo, localDirectionVector); }
    108102
     
    110104            inline void setScale3D(float x, float y, float z)
    111105                { this->setScale3D(Vector3(x, y, z)); }
    112             inline const Vector3& getScale3D(void) const
    113                 { return this->node_->getScale(); }
     106            const Vector3& getScale3D(void) const;
    114107
    115108            void setScale(float scale)
     
    118111                { Vector3 scale = this->getScale3D(); return (scale.x == scale.y && scale.x == scale.z) ? scale.x : 1; }
    119112
    120             virtual void scale3D(const Vector3& scale);
     113            inline void scale3D(const Vector3& scale)
     114                { this->setScale3D(this->getScale3D() * scale); }
    121115            inline void scale3D(float x, float y, float z)
    122116                { this->scale3D(Vector3(x, y, z)); }
     
    130124                { return this->children_; }
    131125
    132             inline void attachOgreObject(Ogre::MovableObject* object)
    133                 { this->node_->attachObject(object); }
    134             inline void detachOgreObject(Ogre::MovableObject* object)
    135                 { this->node_->detachObject(object); }
    136             inline Ogre::MovableObject* detachOgreObject(const Ogre::String& name)
    137                 { return this->node_->detachObject(name); }
     126            void attachOgreObject(Ogre::MovableObject* object);
     127            void detachOgreObject(Ogre::MovableObject* object);
     128            Ogre::MovableObject* detachOgreObject(const Ogre::String& name);
    138129
    139130            inline void attachToParent(WorldEntity* parent)
     
    241232            btScalar                     childrenMass_;
    242233    };
     234
     235    // Inline heavily used functions for release builds. In debug, we better avoid including OgreSceneNode here.
     236#ifdef _NDEBUG
     237    inline const Vector3& WorldEntity::getPosition() const
     238        { return this->node_->getPosition(); }
     239    inline const Quaternion& WorldEntity::getOrientation() const
     240        { return this->node_->getrOrientation(); }
     241    inline const Vector3& WorldEntity::getScale3D(void) const
     242        { return this->node_->getScale(); }
     243#endif
    243244}
    244245
Note: See TracChangeset for help on using the changeset viewer.