//============================================================================== bool CollisionDetector::isCollidable(const CollisionNode* _node1, const CollisionNode* _node2) { dynamics::BodyNode* bn1 = _node1->getBodyNode(); dynamics::BodyNode* bn2 = _node2->getBodyNode(); if (!getPairCollidable(_node1, _node2)) return false; if (!bn1->isCollidable() || !bn2->isCollidable()) return false; if (bn1->getSkeleton() == bn2->getSkeleton()) { if (bn1->getSkeleton()->isEnabledSelfCollisionCheck()) { if (isAdjacentBodies(bn1, bn2)) { if (!bn1->getSkeleton()->isEnabledAdjacentBodyCheck()) return false; } } else { return false; } } return true; }
bool CollisionDetector::isCollidable(const CollisionNode* _node1, const CollisionNode* _node2) { return getPairCollidable(_node1, _node2) && _node1->getBodyNode()->getCollideState() && _node2->getBodyNode()->getCollideState() && (_node1->getBodyNode()->getSkel() != _node2->getBodyNode()->getSkel() || _node1->getBodyNode()->getSkel()->getSelfCollidable()); }
void CollisionDetector::disablePair(dynamics::BodyNode* _node1, dynamics::BodyNode* _node2) { CollisionNode* collisionNode1 = getCollisionNode(_node1); CollisionNode* collisionNode2 = getCollisionNode(_node2); if (collisionNode1 && collisionNode2) getPairCollidable(collisionNode1, collisionNode2) = false; }
void CollisionDetector::enablePair(kinematics::BodyNode* _node1, kinematics::BodyNode* _node2) { CollisionNode* collisionNode1 = getCollisionNode(_node1); CollisionNode* collisionNode2 = getCollisionNode(_node2); if(collisionNode1 && collisionNode2) getPairCollidable(collisionNode1, collisionNode2) = true; }