Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Nov 29, 2008, 12:45:19 AM (15 years ago)
Author:
rgrieder
Message:

Clarified use of different physical bodies. The "collisionType" XML attribute of WE specifies the following:
"none": There is not physical body at all. Physics disabled.
"static": It is a StaticEntity with physics. Any other derived class of WE issues an exception by choosing this collision type.
"kinematic" or "dynamic": MovableEntity with physics. StaticEntity issues an exception when choosing one of these two.

Added two new Exceptions: ParseError and PhysicsViolation.

File:
1 edited

Legend:

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

    r2296 r2298  
    4646    class _OrxonoxExport WorldEntity : public BaseObject, public network::Synchronisable, public btMotionState
    4747    {
    48         public:
    49             enum CollisionType
    50             {
    51                 Dynamic,
    52                 Kinematic,
    53                 Static
    54             };
    55 
    5648        public:
    5749            WorldEntity(BaseObject* creator);
     
    135127                { this->node_->scale(scale, scale, scale); }
    136128
    137             bool hasPhysics()  { return this->physicalBody_; }
    138             bool isKinematic() { return this->physicalBody_ && this->physicalBody_->isKinematicObject(); }
    139             bool isDynamic()   { return this->physicalBody_ && !this->physicalBody_->isStaticOrKinematicObject(); }
    140 
    141129            void attach(WorldEntity* object);
    142130            void detach(WorldEntity* object);
     
    159147                { return this->parent_; }
    160148
    161             void setCollisionRadius(float radius);
    162             float getCollisionRadius();
    163 
    164             void setCollisionTypeStr(const std::string& type);
    165             std::string getCollisionTypeStr();
    166 
    167             void setMass(float mass);
    168             float getMass();
    169 
    170             CollisionType getCollisionType();
    171 
    172149        protected:
    173             //virtual btCollisionShape* getCollisionShape() = 0;
    174 
    175             void createPhysicalBody();
    176             //virtual void attachPhysicalObject(WorldEntity* object);
    177             virtual void setCollisionType(CollisionType type);
    178 
    179150            Ogre::SceneNode* node_;
    180             btRigidBody* physicalBody_;
    181151
    182152        private:
     
    197167            unsigned int parentID_;
    198168            std::set<WorldEntity*> children_;
     169
     170            /////////////
     171            // Physics //
     172            /////////////
     173
     174        public:
     175            enum CollisionType
     176            {
     177                Dynamic,
     178                Kinematic,
     179                Static,
     180                None
     181            };
     182
     183            bool hasPhysics()  { return getCollisionType() != None; }
     184
     185            CollisionType getCollisionType() { return this->collisionType_; }
     186            void setCollisionType(CollisionType type);
     187
     188            void setCollisionTypeStr(const std::string& type);
     189            std::string getCollisionTypeStr();
     190
     191            bool isStatic()    { return getCollisionType() == Static   ; }
     192            bool isKinematic() { return getCollisionType() == Kinematic; }
     193            bool isDynamic()   { return getCollisionType() == Dynamic  ; }
     194
     195            void setMass(float mass);
     196            float getMass();
     197
     198            void setCollisionRadius(float radius);
     199            float getCollisionRadius();
     200
     201        protected:
     202            //virtual btCollisionShape* getCollisionShape() = 0;
     203            //virtual void attachPhysicalObject(WorldEntity* object);
     204
     205            virtual bool isCollisionTypeLegal(CollisionType type) = 0;
     206            bool checkPhysics();
     207            void updateCollisionType();
     208
     209            btRigidBody*  physicalBody_;
     210
     211        private:
     212            CollisionType collisionType_;
     213
    199214    };
    200215}
Note: See TracChangeset for help on using the changeset viewer.