41 struct cpCollisionHandler {
51 typedef struct cpContact cpContact;
53 #define CP_MAX_CONTACTS_PER_ARBITER 4
56 typedef enum cpArbiterState {
58 cpArbiterStateFirstColl,
69 struct cpArbiterThread {
93 CP_PRIVATE(
cpBody *body_a);
94 CP_PRIVATE(
cpBody *body_b);
96 CP_PRIVATE(
struct cpArbiterThread thread_a);
97 CP_PRIVATE(
struct cpArbiterThread thread_b);
99 CP_PRIVATE(
int numContacts);
100 CP_PRIVATE(cpContact *contacts);
103 CP_PRIVATE(cpCollisionHandler *handler);
104 CP_PRIVATE(
cpBool swappedColl);
105 CP_PRIVATE(cpArbiterState state);
108 #define CP_DefineArbiterStructGetter(type, member, name) \
109 static inline type cpArbiterGet##name(const cpArbiter *arb){return arb->member;}
111 #define CP_DefineArbiterStructSetter(type, member, name) \
112 static inline void cpArbiterSet##name(cpArbiter *arb, type value){arb->member = value;}
114 #define CP_DefineArbiterStructProperty(type, member, name) \
115 CP_DefineArbiterStructGetter(type, member, name) \
116 CP_DefineArbiterStructSetter(type, member, name)
118 CP_DefineArbiterStructProperty(
cpFloat, e, Elasticity)
119 CP_DefineArbiterStructProperty(
cpFloat, u, Friction)
120 CP_DefineArbiterStructProperty(
cpVect, surface_vr, SurfaceVelocity)
121 CP_DefineArbiterStructProperty(
cpDataPointer, data, UserData)
144 if(arb->CP_PRIVATE(swappedColl)){
145 (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a);
147 (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b);
151 #define CP_ARBITER_GET_SHAPES(arb, a, b) cpShape *a, *b; cpArbiterGetShapes(arb, &a, &b);
159 (*a) = shape_a->body;
160 (*b) = shape_b->body;
163 #define CP_ARBITER_GET_BODIES(arb, a, b) cpBody *a, *b; cpArbiterGetBodies(arb, &a, &b);
178 } points[CP_MAX_CONTACTS_PER_ARBITER];