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.
|