Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <Box2D/Dynamics/Contacts/b2ChainAndCircleContact.h>
00020 #include <Box2D/Common/b2BlockAllocator.h>
00021 #include <Box2D/Dynamics/b2Fixture.h>
00022 #include <Box2D/Collision/Shapes/b2ChainShape.h>
00023 #include <Box2D/Collision/Shapes/b2EdgeShape.h>
00024
00025 #include <new>
00026
00027 b2Contact* b2ChainAndCircleContact::Create(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB, b2BlockAllocator* allocator)
00028 {
00029 void* mem = allocator->Allocate(sizeof(b2ChainAndCircleContact));
00030 return new (mem) b2ChainAndCircleContact(fixtureA, indexA, fixtureB, indexB);
00031 }
00032
00033 void b2ChainAndCircleContact::Destroy(b2Contact* contact, b2BlockAllocator* allocator)
00034 {
00035 ((b2ChainAndCircleContact*)contact)->~b2ChainAndCircleContact();
00036 allocator->Free(contact, sizeof(b2ChainAndCircleContact));
00037 }
00038
00039 b2ChainAndCircleContact::b2ChainAndCircleContact(b2Fixture* fixtureA, int32 indexA, b2Fixture* fixtureB, int32 indexB)
00040 : b2Contact(fixtureA, indexA, fixtureB, indexB)
00041 {
00042 b2Assert(m_fixtureA->GetType() == b2Shape::e_chain);
00043 b2Assert(m_fixtureB->GetType() == b2Shape::e_circle);
00044 }
00045
00046 void b2ChainAndCircleContact::Evaluate(b2Manifold* manifold, const b2Transform& xfA, const b2Transform& xfB)
00047 {
00048 b2ChainShape* chain = (b2ChainShape*)m_fixtureA->GetShape();
00049 b2EdgeShape edge;
00050 chain->GetChildEdge(&edge, m_indexA);
00051 b2CollideEdgeAndCircle( manifold, &edge, xfA,
00052 (b2CircleShape*)m_fixtureB->GetShape(), xfB);
00053 }