Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 7958 in orxonox.OLD


Ignore:
Timestamp:
May 29, 2006, 5:32:42 PM (18 years ago)
Author:
patrick
Message:

cr: collision reactance introduced

Location:
branches/cr/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/cr/src/lib/collision_detection/obb_tree_node.cc

    r7957 r7958  
    523523      nodeA->registerCollision(nodeA, nodeB, (BoundingVolume*)this->bvElement, (BoundingVolume*)treeNode->bvElement);
    524524    }
    525 
    526 
    527 
    528     /* check if left node overlaps */
    529 //     if( this->nodeLeft != NULL )
    530 //     {
    531 //       PRINTF(5)("Checking OBB %i vs %i: ", this->nodeLeft->getIndex(), treeNode->getIndex());
    532 //       if( this->overlapTest(this->nodeLeft->bvElement, treeNode->bvElement, nodeA, nodeB))
    533 //       {
    534 //         this->nodeLeft->collideWith(treeNode->nodeLeft, nodeA, nodeB);
    535 //         this->nodeLeft->collideWith(treeNode->nodeRight, nodeA, nodeB);
    536 //       }
    537 //     }
    538 
    539     /* check if right node overlaps */
    540 //     if( likely( this->nodeRight != NULL))
    541 //     {
    542 //       PRINTF(5)("Checking OBB %i vs %i: ", this->nodeRight->getIndex(), treeNode->getIndex());
    543 //       if(this->overlapTest(this->nodeRight->bvElement, treeNode->bvElement, nodeA, nodeB))
    544 //       {
    545 //         this->nodeRight->collideWith(treeNode->nodeLeft, nodeA, nodeB);
    546 //         this->nodeRight->collideWith(treeNode->nodeRight, nodeA, nodeB);
    547 //       }
    548 //     }
    549 
    550     /* so there is a collision and this is the last box in the tree (i.e. leaf) */
    551 //     if( unlikely((this->nodeRight == NULL || this->nodeLeft == NULL) ||
    552 //                  (treeNode->nodeRight == NULL || treeNode->nodeLeft == NULL)) )
    553 //     {
    554 //       nodeA->collidesWith(nodeB, treeNode->bvElement->center);
    555 //       nodeB->collidesWith(nodeA, this->bvElement->center);
    556 //       nodeA->registerCollision(nodeA, nodeB, (BoundingVolume*)this->bvElement, (BoundingVolume*)treeNode->bvElement);
    557 //     }
    558525
    559526  }
  • branches/cr/src/lib/collision_reaction/cr_engine.cc

    r7950 r7958  
    5252
    5353  if( this->cachedCollisions.size() != CR_MAX_COLLISIONS)
    54     PRINTF(0)("CollisionReaction Error: cache size missmatch: %i of %i\n", this->cachedCollisions.size(), CR_NUMBER);
     54    PRINTF(0)("CollisionReaction Error: cache size missmatch: %i of %i\n", this->cachedCollisions.size(), CR_MAX_COLLISIONS);
    5555
    5656  this->reset();
     
    5959  for(; it < this->cachedCollisions.end(); it++)
    6060    delete *it;
    61 
    62 //    while( !this->cachedCollisions.empty())
    63 //      delete this->cachedCollisions.back();
    6461
    6562  this->cachedCollisions.clear();
  • branches/cr/src/lib/collision_reaction/cr_engine.h

    r7946 r7958  
    5151
    5252  /** @returns an instance to a collision object. instead of creating new object this ones can be resycled */
    53   inline Collision* popCollisionObject() { if(!this->cachedCollisions.empty()) { this->cachedCollisions.back(); this->cachedCollisions.pop_back();} else return NULL; }
     53  inline Collision* popCollisionObject() { if(!this->cachedCollisions.empty()) { return this->cachedCollisions.back(); this->cachedCollisions.pop_back();} else return NULL; }
    5454  /** @param collision: returns the Collision object back to the cache list */
    5555  inline void pushCollisionObject(Collision* collision) { this->cachedCollisions.push_back(collision); }
  • branches/cr/src/world_entities/world_entity.cc

    r7957 r7958  
    256256  this->collisionHandles[type] = CREngine::getInstance()->subscribeReaction(this, type);
    257257
     258  // add the target filter
    258259  va_list itemlist;
    259260  va_start (itemlist, target);
     
    261262    this->collisionHandles[type]->addTarget(va_arg(itemlist, long));
    262263  va_end(itemlist);
     264
     265  // now there is at least one collision reaction subsribed
     266  this->bReactive = true;
    263267}
    264268
     
    275279  CREngine::getInstance()->unsubscribeReaction(this->collisionHandles[type]);
    276280  this->collisionHandles[type] = NULL;
     281
     282  //
    277283}
    278284
     
    285291  for( int i = 0; i < CREngine::CR_NUMBER; i++)
    286292    this->unsubscribeReaction((CREngine::CRType)i);
     293
     294  this->bReactive = false;
    287295}
    288296
  • branches/cr/src/world_entities/world_entity.h

    r7946 r7958  
    7373  void unsubscribeReaction(CREngine::CRType type);
    7474  void unsubscribeReaction();
     75
    7576  bool registerCollision(WorldEntity* entityA, WorldEntity* entityB, BoundingVolume* bvA, BoundingVolume* bvB);
     77  /** @return true if there is at least on collision reaction subscribed */
     78  inline bool isReactive() const { return this->bReactive; }
    7679
    7780
     
    140143  float                   scaling;                                //!< the scaling of the model
    141144  CollisionHandle*        collisionHandles[CREngine::CR_NUMBER];  //!< the list of the collision reactions
     145  bool                    bReactive;                              //!< true if there is at least one collision reaction subscibed
    142146
    143147
Note: See TracChangeset for help on using the changeset viewer.