예제 #1
0
//==============================================================================
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;
}
예제 #2
0
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());
}
예제 #3
0
void CollisionDetector::disablePair(dynamics::BodyNode* _node1,
                                    dynamics::BodyNode* _node2) {
  CollisionNode* collisionNode1 = getCollisionNode(_node1);
  CollisionNode* collisionNode2 = getCollisionNode(_node2);
  if (collisionNode1 && collisionNode2)
    getPairCollidable(collisionNode1, collisionNode2) = false;
}
예제 #4
0
void CollisionDetector::enablePair(kinematics::BodyNode* _node1, kinematics::BodyNode* _node2) {
    CollisionNode* collisionNode1 = getCollisionNode(_node1);
    CollisionNode* collisionNode2 = getCollisionNode(_node2);
    if(collisionNode1 && collisionNode2)
        getPairCollidable(collisionNode1, collisionNode2) = true;
}