41 struct cpCollisionHandler {
51 typedef struct cpContact cpContact;
53 #define CP_MAX_CONTACTS_PER_ARBITER 2
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)
129 CP_DefineArbiterStructProperty(
cpDataPointer, data, UserData)
152 if(arb->CP_PRIVATE(swappedColl)){
153 (*a) = arb->CP_PRIVATE(b), (*b) = arb->CP_PRIVATE(a);
155 (*a) = arb->CP_PRIVATE(a), (*b) = arb->CP_PRIVATE(b);
159 #define CP_ARBITER_GET_SHAPES(__arb__, __a__, __b__) cpShape *__a__, *__b__; cpArbiterGetShapes(__arb__, &__a__, &__b__);
167 (*a) = shape_a->body;
168 (*b) = shape_b->body;
171 #define CP_ARBITER_GET_BODIES(__arb__, __a__, __b__) cpBody *__a__, *__b__; cpArbiterGetBodies(__arb__, &__a__, &__b__);
186 } points[CP_MAX_CONTACTS_PER_ARBITER];