---------------------------------------------------------------------
| 47 | DefaultIntersectionSceneQuery::~DefaultIntersectionSceneQuery() {} |
| 48 | //--------------------------------------------------------------------- |
| 49 | void DefaultIntersectionSceneQuery::execute( IntersectionSceneQueryListener *listener ) |
| 50 | { |
| 51 | OGRE_EXCEPT( Exception::ERR_NOT_IMPLEMENTED, |
| 52 | "IntersectionSceneQuery not yet ported to Ogre 2.x!", |
| 53 | "DefaultIntersectionSceneQuery::execute" ); |
| 54 | #ifdef ENABLE_INCOMPATIBLE_OGRE_2_0 |
| 55 | // Iterate over all movable types |
| 56 | Root::MovableObjectFactoryIterator factIt = |
| 57 | Root::getSingleton().getMovableObjectFactoryIterator(); |
| 58 | while( factIt.hasMoreElements() ) |
| 59 | { |
| 60 | SceneManager::MovableObjectIterator objItA = |
| 61 | mParentSceneMgr->getMovableObjectIterator( factIt.getNext()->getType() ); |
| 62 | while( objItA.hasMoreElements() ) |
| 63 | { |
| 64 | MovableObject *a = objItA.getNext(); |
| 65 | // skip entire section if type doesn't match |
| 66 | if( !( a->getTypeFlags() & mQueryTypeMask ) ) |
| 67 | break; |
| 68 | |
| 69 | // Skip if a does not pass the mask |
| 70 | if( !( a->getQueryFlags() & mQueryMask ) || !a->isInScene() ) |
| 71 | continue; |
| 72 | |
| 73 | // Check against later objects in the same group |
| 74 | SceneManager::MovableObjectIterator objItB = objItA; |
| 75 | while( objItB.hasMoreElements() ) |
| 76 | { |
| 77 | MovableObject *b = objItB.getNext(); |
| 78 | |
| 79 | // Apply mask to b (both must pass) |
| 80 | if( ( b->getQueryFlags() & mQueryMask ) && b->isInScene() ) |
| 81 | { |
| 82 | const AxisAlignedBox &box1 = a->getWorldBoundingBox(); |
| 83 | const AxisAlignedBox &box2 = b->getWorldBoundingBox(); |
| 84 | |
| 85 | if( box1.intersects( box2 ) ) |
| 86 | { |
| 87 | if( !listener->queryResult( a, b ) ) |
| 88 | return; |
| 89 | } |
| 90 | } |
| 91 | } |
| 92 | // Check against later groups |
| 93 | Root::MovableObjectFactoryIterator factItLater = factIt; |
| 94 | while( factItLater.hasMoreElements() ) |
| 95 | { |
| 96 | SceneManager::MovableObjectIterator objItC = |
| 97 | mParentSceneMgr->getMovableObjectIterator( factItLater.getNext()->getType() ); |
| 98 | while( objI7tC.hasMoreElements() ) |
| 99 | { |
| 100 | MovableObject *c = objItC.getNext(); |
| 101 | // skip entire section if type doesn't match |
| 102 | if( !( c->getTypeFlags() & mQueryTypeMask ) ) |
| 103 | break; |
| 104 | |
| 105 | // Apply mask to c (both must pass) |
| 106 | if( ( c->getQueryFlags() & mQueryMask ) && c->isInScene() ) |
nothing calls this directly
no test coverage detected