/**
   * For internal use only callback for collisionevent
   *
   * @param event
   */
  public void collision(PhysicsCollisionEvent event) {
    PhysicsCollisionObject objA = event.getObjectA();
    PhysicsCollisionObject objB = event.getObjectB();

    // excluding collisions that involve 2 parts of the ragdoll
    if (event.getNodeA() == null && event.getNodeB() == null) {
      return;
    }

    // discarding low impulse collision
    if (event.getAppliedImpulse() < eventDispatchImpulseThreshold) {
      return;
    }

    boolean hit = false;
    Bone hitBone = null;
    PhysicsCollisionObject hitObject = null;

    // Computing which bone has been hit
    if (objA.getUserObject() instanceof PhysicsBoneLink) {
      PhysicsBoneLink link = (PhysicsBoneLink) objA.getUserObject();
      if (link != null) {
        hit = true;
        hitBone = link.bone;
        hitObject = objB;
      }
    }

    if (objB.getUserObject() instanceof PhysicsBoneLink) {
      PhysicsBoneLink link = (PhysicsBoneLink) objB.getUserObject();
      if (link != null) {
        hit = true;
        hitBone = link.bone;
        hitObject = objA;
      }
    }

    // dispatching the event if the ragdoll has been hit
    if (hit && listeners != null) {
      for (RagdollCollisionListener listener : listeners) {
        listener.collide(hitBone, hitObject, event);
      }
    }
  }