Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Ignore:
Timestamp:
Jan 1, 2009, 7:34:44 PM (15 years ago)
Author:
rgrieder
Message:
  • Added WorldEntityCollisionShape to clarify when a CompoundCollisionShape belongs to a WE.
  • Also fixed problems with the synchronisation of the CollisionShape hierarchy.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • code/branches/presentation/src/orxonox/objects/collisionshapes/CompoundCollisionShape.cc

    r2527 r2562  
    3636#include "core/XMLPort.h"
    3737#include "tools/BulletConversions.h"
    38 #include "objects/worldentities/WorldEntity.h"
    3938
    4039namespace orxonox
     
    4746
    4847        this->compoundShape_  = new btCompoundShape();
    49         this->worldEntityParent_ = 0;
    5048    }
    5149
     
    5957            {
    6058                // make sure that the child doesn't want to detach itself --> speedup because of the missing update
    61                 it->first->setParent(0, OBJECTID_UNKNOWN);
     59                it->first->notifyDetached();
    6260                delete it->first;
    6361            }
     
    7472    }
    7573
    76     void CompoundCollisionShape::setWorldEntityParent(WorldEntity* parent)
    77     {
    78         // suppress synchronisation
    79         this->setObjectMode(0x0);
    80 
    81         this->worldEntityParent_ = parent;
    82     }
    83 
    8474    void CompoundCollisionShape::attach(CollisionShape* shape)
    8575    {
     
    9181            return;
    9282        }
     83
     84        if (!shape->notifyBeingAttached(this))
     85            return;
     86
    9387        this->attachedShapes_[shape] = shape->getCollisionShape();
    9488
     
    10195            this->updatePublicShape();
    10296        }
    103 
    104         // network synchro
    105         if (this->worldEntityParent_)
    106         {
    107             // This compound collision shape belongs to a WE and doesn't get synchronised
    108             // So set our parent to be the WE
    109             shape->setParent(this, this->worldEntityParent_->getObjectID());
    110         }
    111         else
    112             shape->setParent(this, this->getObjectID());
    11397    }
    11498
     
    117101        if (this->attachedShapes_.find(shape) != this->attachedShapes_.end())
    118102        {
    119             shape->setParent(0, OBJECTID_UNKNOWN);
    120103            this->attachedShapes_.erase(shape);
    121104            if (shape->getCollisionShape())
    122105                this->compoundShape_->removeChildShape(shape->getCollisionShape());
     106            shape->notifyDetached();
    123107
    124108            this->updatePublicShape();
     
    197181    }
    198182
    199     void CompoundCollisionShape::updateParent()
    200     {
    201         if (this->parent_)
    202             this->parent_->updateAttachedShape(this);
    203         if (this->worldEntityParent_)
    204             this->worldEntityParent_->notifyCollisionShapeChanged();
    205     }
    206 
    207     void CompoundCollisionShape::parentChanged()
    208     {
    209         if (!this->worldEntityParent_)
    210             CollisionShape::parentChanged();
    211     }
    212 
    213183    CollisionShape* CompoundCollisionShape::getAttachedShape(unsigned int index) const
    214184    {
Note: See TracChangeset for help on using the changeset viewer.