Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/trunk/src/lib/collision_detection/cd_engine.cc @ 10033

Last change on this file since 10033 was 10033, checked in by patrick, 17 years ago

moved some of the importer sources, probably will need to rebuild the project

File size: 3.7 KB
Line 
1/*
2   orxonox - the future of 3D-vertical-scrollers
3
4   Copyright (C) 2004 orx
5
6   This program is free software; you can redistribute it and/or modify
7   it under the terms of the GNU General Public License as published by
8   the Free Software Foundation; either version 2, or (at your option)
9   any later version.
10
11### File Specific:
12   main-programmer: Patrick Boenzli
13   co-programmer: ...
14*/
15
16#define DEBUG_SPECIAL_MODULE DEBUG_MODULE_COLLISION_DETECTION
17
18#include "cd_engine.h"
19#include "obb_tree.h"
20#include "debug.h"
21
22#include "model.h"
23#include "world_entity.h"
24#include "terrain.h"
25// #include "player.h"
26
27//#include "spatial_separation.h"
28#include "quadtree.h"
29//#include "quadtree_node.h"
30
31#include "bsp/bsp_manager.h"
32#include "bsp_entity.h"
33
34
35
36ObjectListDefinition(CDEngine);
37/**
38 * @brief standard constructor
39 */
40CDEngine::CDEngine ()
41{
42  this->registerObject(this, CDEngine::_objectList);
43
44  this->bAbordOnFirstCollision = false;
45
46  this->terrain = NULL;
47}
48
49
50/**
51 *  the singleton reference to this class
52 */
53CDEngine* CDEngine::singletonRef = NULL;
54
55
56/**
57 *  standard deconstructor
58 */
59CDEngine::~CDEngine ()
60{
61  CDEngine::singletonRef = NULL;
62}
63
64
65/**
66 *
67 */
68void CDEngine::checkCollisions(ObjectManager::EntityList& list1, ObjectManager::EntityList& list2)
69{
70  BVTree* tree;
71  ObjectManager::EntityList::iterator entity1, entity2, pre1, pre2;
72  PRINTF(5)("checking for collisions\n");
73
74  pre1 = list1.begin();
75  while (pre1 != list1.end())
76  {
77    entity1 = pre1++;
78    if( likely((*entity1) != this->terrain))
79    {
80      pre2 = list2.begin();
81      while (pre2 != list2.end())
82      {
83        entity2 = pre2++;
84        if( likely((*entity2) != this->terrain))
85        {
86          PRINTF(5)("checking object %s (%s) against %s (%s)\n",
87            (*entity1)->getClassCName(), (*entity1)->getCName(), (*entity2)->getClassCName(), (*entity2)->getCName());
88          tree = (*entity1)->getOBBTree();
89          if( likely(tree != NULL) && (*entity2)->getOBBTree() != NULL)
90            tree->collideWith(*entity1, *entity2);
91        }
92      }
93    }
94  }
95}
96
97
98/**
99 *  this checks the collisions with the ground
100 */
101void CDEngine::checkCollisionGround(std::list<WorldEntity*>& list1)
102{
103  std::list<WorldEntity*>::iterator entityIterator;
104  // for all bsp managers check all entities
105  for( ObjectList<BspEntity>::const_iterator bspIterator = BspEntity::objectList().begin();
106       bspIterator != BspEntity::objectList().end();
107       bspIterator++) {
108      for(entityIterator = list1.begin(); entityIterator != list1.end(); entityIterator++)
109      {
110//         PRINTF(0)("Checking: %s a %s\n", (*entityIterator)->getName(), (*entityIterator)->getClassCName());
111        (dynamic_cast<BspEntity*>(*bspIterator)->getBspManager())->checkCollision(*entityIterator);
112      }
113  }
114}
115
116
117/**
118 * some debug output on the class
119 */
120void CDEngine::debug()
121{
122  PRINT(0)("\n=============================| CDEngine::debug() |===\n");
123  PRINT(0)("=  CDEngine: Spawning Tree Start\n");
124  //this->rootTree->debug();
125  PRINT(0)("=  CDEngine: Spawning Tree: Finished\n");
126  PRINT(0)("=======================================================\n");
127}
128
129
130/**
131 * this spawns a tree for debug purposes only
132 */
133void CDEngine::debugSpawnTree(int depth, sVec3D* vertices, int numVertices)
134{
135//   if ( this->rootTree == NULL)
136//     this->rootTree = new OBBTree(depth, vertices, numVertices);
137}
138
139
140void CDEngine::drawBV(const ObjectManager::EntityList& drawList, int level) const
141{
142  ObjectManager::EntityList::const_iterator entity;
143  for (entity = drawList.begin(); entity != drawList.end(); entity++)
144    (*entity)->drawBVTree(level, 226);
145}
146
147
148/**
149 * this draws the debug spawn tree
150 */
151void CDEngine::debugDraw(int depth, int drawMode)
152{
153//   if(this-> rootTree != NULL)
154//     this->rootTree->drawBV(depth, drawMode);
155}
Note: See TracBrowser for help on using the repository browser.