| 349 | } |
| 350 | |
| 351 | void SceneController::BeginContact( b2Contact* contact ) |
| 352 | { |
| 353 | void *userDataA = contact->GetFixtureA()->GetBody()->GetUserData(); |
| 354 | void *userDataB = contact->GetFixtureB()->GetBody()->GetUserData(); |
| 355 | |
| 356 | CI_ASSERT( userDataA && userDataB ); |
| 357 | |
| 358 | b2WorldManifold worldManifold; |
| 359 | contact->GetWorldManifold( &worldManifold ); |
| 360 | |
| 361 | vec2 contactPoint = metersToPoints( box2d::toCinder( worldManifold.points[0] ) ); |
| 362 | |
| 363 | SceneObject *objectA = static_cast<SceneObject *>( userDataA ); |
| 364 | SceneObject *objectB = static_cast<SceneObject *>( userDataB ); |
| 365 | |
| 366 | if( typeid( *objectA ) == typeid( Island ) ) |
| 367 | handleIslandCollision( dynamic_cast<Island *>( objectA ), objectB, contactPoint ); |
| 368 | else if( typeid( *objectA ) == typeid( Wall ) ) |
| 369 | handleWallCollision( dynamic_cast<Wall *>( objectA ), objectB, contactPoint ); |
| 370 | else if( typeid( *objectB ) == typeid( Island ) ) |
| 371 | handleIslandCollision( dynamic_cast<Island *>( objectB ), objectA, contactPoint ); |
| 372 | else if( typeid( *objectB ) == typeid( Wall ) ) |
| 373 | handleWallCollision( dynamic_cast<Wall *>( objectB ), objectA, contactPoint ); |
| 374 | } |
| 375 | |
| 376 | void SceneController::handleIslandCollision( Island *island, SceneObject *object, const vec2 &contactPoint ) |
| 377 | { |
nothing calls this directly
no test coverage detected