From: <spo...@us...> - 2007-08-07 19:00:22
|
Revision: 657 http://opengate.svn.sourceforge.net/opengate/?rev=657&view=rev Author: spom_spom Date: 2007-08-07 12:00:24 -0700 (Tue, 07 Aug 2007) Log Message: ----------- trying fix collision issues. 2nd. Modified Paths: -------------- branches/ogsector/src/OpcodeWrapper.cpp Modified: branches/ogsector/src/OpcodeWrapper.cpp =================================================================== --- branches/ogsector/src/OpcodeWrapper.cpp 2007-08-07 18:10:01 UTC (rev 656) +++ branches/ogsector/src/OpcodeWrapper.cpp 2007-08-07 19:00:24 UTC (rev 657) @@ -127,27 +127,29 @@ bool OpcodeCollisionDetection::checkCollideRay( BaseObject * obj, const Ogre::Ray & ray, double rayLength){ OgreOpcode::CollisionPair ** rayPickReport; - int nColl = collideInSectorContext_->rayCheck( ray, rayLength, OgreOpcode::COLLTYPE_EXACT, - OgreOpcode::COLLTYPE_ALWAYS_EXACT, rayPickReport ); + uint nColl = collideInSectorContext_->rayCheck( ray, rayLength, OgreOpcode::COLLTYPE_EXACT, + OgreOpcode::COLLTYPE_ALWAYS_EXACT, rayPickReport ); -// std::cout << "checkCollideRay: " << " " << rayLength << std::endl; + std::cout << "checkCollideRay: " << " " << rayLength << " " << nColl <<std::endl; - if ( nColl > 0 ){ - OgreOpcode::CollisionObject* col1 = rayPickReport[ 0 ]->this_object; - OgreOpcode::CollisionObject* col2 = rayPickReport[ 0 ]->other_object; + for ( uint i = 0; i < nColl; i ++ ){ + OgreOpcode::CollisionObject* col1 = rayPickReport[ i ]->this_object; + OgreOpcode::CollisionObject* col2 = rayPickReport[ i ]->other_object; - std::cout << "checkCollideRay: " << static_cast< BaseObject * >(col1->getClientData())->name() - << " " << static_cast< BaseObject * >(col2->getClientData())->name() << std::endl; + std::cout << "checkCollideRay: " << i << " " + << static_cast< BaseObject * >( col1->getClientData() )->name() << "<->" + << static_cast< BaseObject * >( col2->getClientData() )->name() << std::endl; if ( obj->getTypeID() == PROJECTILE_RTTI ){ if ( dynamic_cast< Projectile * >( obj )->parent() != static_cast< BaseObject * >( col1->getClientData() ) ){ - obj->mainNode()->setPosition( rayPickReport[ 0 ]->contact ); + obj->mainNode()->setPosition( rayPickReport[ i ]->contact ); + obj->collide( static_cast< BaseObject * >( col2->getClientData() ) ); + static_cast< BaseObject * >( col1->getClientData() )->collide( obj ); + return true; } - } - if ( obj != col1->getClientData() ){ + } else if ( obj != col1->getClientData() ){ obj->collide( static_cast< BaseObject * >( col2->getClientData() ) ); static_cast< BaseObject * >( col1->getClientData() )->collide( obj ); - return true; } } return false; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |