Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 6124 in orxonox.OLD for branches


Ignore:
Timestamp:
Dec 15, 2005, 2:28:27 AM (19 years ago)
Author:
bensch
Message:

orxonox/trunk: new Collision-detection algorithm, checking for framerate-increase now

Location:
branches/objectmanager/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • branches/objectmanager/src/lib/collision_detection/cd_engine.cc

    r6022 r6124  
    6565    be able to enhance iteration speed.
    6666 */
    67 void CDEngine::checkCollisions()
    68 {
    69   this->checkCollisionObjects();
     67//void CDEngine::checkCollisions()
     68//{
     69//  this->checkCollisionObjects();
    7070  //this->checkCollisionGround();
    71 }
    72 
    73 #include "class_list.h"
    74 #include "state.h"
     71//}
     72
    7573/**
    7674 *  this checks the collisions with the objects
    7775 */
    78 void CDEngine::checkCollisionObjects()
     76//void CDEngine::checkCollisionObjects()
     77//{
     78//   BVTree* tree;
     79//   tIterator<WorldEntity>* iterator1 = entityList->getIterator();
     80//   tIterator<WorldEntity>* iterator2 = entityList->getIterator();
     81//   WorldEntity* entity1 = iterator1->firstElement();
     82//   WorldEntity* entity2 = iterator2->iteratorElement(iterator1);
     83//   PRINTF(3)("checking for collisions\n");
     84//   while( entity1 != NULL)
     85//   {
     86//     if( likely(entity1 != this->terrain))
     87//     {
     88//       entity2 = iterator2->nextElement();
     89//
     90//       while( entity2 != NULL)
     91//       {
     92//         if( likely(entity2 != this->terrain))
     93//         {
     94//           PRINTF(4)("checking object %s against %s\n", entity1->getName(), entity2->getName());
     95//           tree = entity1->getOBBTree();
     96//           if( likely(tree != NULL) && entity2->getOBBTree() != NULL) tree->collideWith(entity1, entity2);
     97//         }
     98//         entity2 = iterator2->nextElement();
     99//       }
     100//     }
     101//     entity1 = iterator1->nextElement();
     102//     entity2 = iterator2->iteratorElement(iterator1);
     103//     entity2 = iterator2->nextElement();
     104//   }
     105//   delete iterator1;
     106//   delete iterator2;
     107//}
     108
     109void CDEngine::checkCollisions(std::list<WorldEntity*>& list1, std::list<WorldEntity*>& list2)
    79110{
    80111  BVTree* tree;
    81   tIterator<WorldEntity>* iterator1 = entityList->getIterator();
    82   tIterator<WorldEntity>* iterator2 = entityList->getIterator();
    83   WorldEntity* entity1 = iterator1->firstElement();
    84   WorldEntity* entity2 = iterator2->iteratorElement(iterator1);
     112  std::list<WorldEntity*>::iterator entity1, entity2;
    85113  PRINTF(3)("checking for collisions\n");
    86   while( entity1 != NULL)
     114  for (entity1 = list1.begin(); entity1 != list1.end(); entity1++)
    87115  {
    88     if( likely(entity1 != this->terrain))
     116    if( likely((*entity1) != this->terrain))
    89117    {
    90       entity2 = iterator2->nextElement();
    91 
    92       while( entity2 != NULL)
     118      for (entity2 = list2.begin(); entity2 != list2.end(); entity2++)
    93119      {
    94         if( likely(entity2 != this->terrain))
     120        if( likely((*entity2) != this->terrain))
    95121        {
    96           PRINTF(4)("checking object %s against %s\n", entity1->getName(), entity2->getName());
    97           tree = entity1->getOBBTree();
    98           if( likely(tree != NULL) && entity2->getOBBTree() != NULL) tree->collideWith(entity1, entity2);
     122          PRINTF(4)("checking object %s against %s\n", (*entity1)->getName(), (*entity2)->getName());
     123          tree = (*entity1)->getOBBTree();
     124          if( likely(tree != NULL) && (*entity2)->getOBBTree() != NULL) tree->collideWith(*entity1, *entity2);
    99125        }
    100         entity2 = iterator2->nextElement();
    101126      }
    102127    }
    103     entity1 = iterator1->nextElement();
    104     entity2 = iterator2->iteratorElement(iterator1);
    105     entity2 = iterator2->nextElement();
    106128  }
    107   delete iterator1;
    108   delete iterator2;
    109129}
    110130
     
    134154  /* this would operate on  worldList bases, for testing purposes, we only use one OBBTree */
    135155  //this->rootTree->drawBV(depth, drawMode);
    136 
    137   tIterator<WorldEntity>* iterator = entityList->getIterator();
     156  /// FIXME
     157/*  tIterator<WorldEntity>* iterator = entityList->getIterator();
    138158  WorldEntity* entity = iterator->firstElement();
    139159  while( entity != NULL)
     
    142162    entity = iterator->nextElement();
    143163  }
    144   delete iterator;
     164  delete iterator;*/
    145165}
    146166
  • branches/objectmanager/src/lib/collision_detection/cd_engine.h

    r6022 r6124  
    1212#include "model.h"
    1313
     14#include <list>
    1415
    15 template<class T> class tList;
    1616class WorldEntity;
    1717class OBBTree;
     
    4949  inline void disable(const int options) { int temp = this->state & options; this->state ^= temp; }
    5050
    51   inline void setEntityList(tList<WorldEntity>* entityList) { this->entityList = entityList; }
    5251  inline void setTerrain(Terrain* terrain) { this->terrain = terrain; }
    5352  //  inline void setPlayer(Player* player) { this->player = player; } /* only for debug purposes \todo: delete*/
     
    5554  void drawBV(int depth, int drawMode) const;
    5655
    57   void checkCollisions();
     56//  void checkCollisions();
     57  void checkCollisions(std::list<WorldEntity*>& list1, std::list<WorldEntity*>& list2);
    5858
    5959  void debug();
     
    7575 private:
    7676  int                     state;                            //!< the current state of the cd engine
    77   tList<WorldEntity>*     entityList;                       //!< pointer to the world entity list
    7877  OBBTree*                rootTree;                         //!< for testing purposes a root tree
    7978
  • branches/objectmanager/src/story_entities/world.cc

    r6121 r6124  
    235235
    236236  GraphicsEngine::getInstance()->displayFPS(true);
    237 
    238   CDEngine::getInstance()->setEntityList( this->entities);
    239237}
    240238
     
    776774void World::collide()
    777775{
    778   CDEngine::getInstance()->checkCollisions();
     776  CDEngine::getInstance()->checkCollisions(this->objectManager.getObjectList(OM_GROUP_00), this->objectManager.getObjectList(OM_GROUP_01_PROJ));
    779777}
    780778
Note: See TracChangeset for help on using the changeset viewer.