void CollisionShape::endContactCallback(Contact& contact)
{
    CollisionShape* shapeA = contact.getCollisionShapeA();
    CollisionShape* shapeB = contact.getCollisionShapeB();
    if (shapeA != shapeB)
    {
        if (shapeA == this)
        {
            deactivateAffectors(shapeA, shapeB);
        }
        else if (shapeB == this)
        {
            deactivateAffectors(shapeB, shapeA);
        }
    }
}
//private
void CollisionShape::beginContactCallback(Contact& contact)
{
    if (!contact.touching()) return;

    CollisionShape* shapeA = contact.getCollisionShapeA();
    CollisionShape* shapeB = contact.getCollisionShapeB();
    if (shapeA != shapeB)
    {
        if (shapeA == this)
        {
            activateAffectors(shapeA, shapeB);
        }
        else if (shapeB == this)
        {
            activateAffectors(shapeB, shapeA);
        }
    }
}