Ejemplo n.º 1
0
void SpriteContactListener::PreSolve(b2Contact* contact, const b2Manifold* oldManifold)
{

    b2WorldManifold worldManifold;
    contact->GetWorldManifold(&worldManifold);
    b2PointState state1[2], state2[2];
    b2GetPointStates(state1, state2, oldManifold, contact->GetManifold());
    if (state2[0] == b2_addState)
    {
        const b2Body* bodyA = contact->GetFixtureA()->GetBody();
        const b2Body* bodyB = contact->GetFixtureB()->GetBody();

        b2Vec2 point = worldManifold.points[0];
        b2Vec2 vA = bodyA->GetLinearVelocityFromWorldPoint(point);
        b2Vec2 vB = bodyB->GetLinearVelocityFromWorldPoint(point);
        float approachVelocity = abs(b2Dot(vB - vA, worldManifold.normal));

        Sprite* spriteA = (Sprite*)bodyA->GetUserData();
        Sprite* spriteB = (Sprite*)bodyB->GetUserData();
        spriteA->Hit(spriteB, approachVelocity);
        spriteB->Hit(spriteA, approachVelocity);

    }

    return;
}