PhysWorld2D: Fix possible stack overflow when using wildcard collision handler
This commit is contained in:
parent
6e7fd326db
commit
c23248c564
|
|
@ -403,11 +403,7 @@ namespace Nz
|
|||
|
||||
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||
if (customCallbacks->startCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata))
|
||||
{
|
||||
cpBool retA = cpArbiterCallWildcardBeginA(arb, space);
|
||||
cpBool retB = cpArbiterCallWildcardBeginB(arb, space);
|
||||
return retA && retB;
|
||||
}
|
||||
return cpTrue;
|
||||
else
|
||||
return cpFalse;
|
||||
};
|
||||
|
|
@ -416,9 +412,7 @@ namespace Nz
|
|||
{
|
||||
handler->beginFunc = [](cpArbiter* arb, cpSpace* space, void*) -> cpBool
|
||||
{
|
||||
cpBool retA = cpArbiterCallWildcardBeginA(arb, space);
|
||||
cpBool retB = cpArbiterCallWildcardBeginB(arb, space);
|
||||
return retA && retB;
|
||||
return cpTrue;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -438,17 +432,12 @@ namespace Nz
|
|||
|
||||
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||
customCallbacks->endCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata);
|
||||
|
||||
cpArbiterCallWildcardSeparateA(arb, space);
|
||||
cpArbiterCallWildcardSeparateB(arb, space);
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
handler->separateFunc = [](cpArbiter* arb, cpSpace* space, void*)
|
||||
{
|
||||
cpArbiterCallWildcardSeparateA(arb, space);
|
||||
cpArbiterCallWildcardSeparateB(arb, space);
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -468,11 +457,7 @@ namespace Nz
|
|||
|
||||
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||
if (customCallbacks->preSolveCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata))
|
||||
{
|
||||
cpBool retA = cpArbiterCallWildcardPreSolveA(arb, space);
|
||||
cpBool retB = cpArbiterCallWildcardPreSolveB(arb, space);
|
||||
return retA && retB;
|
||||
}
|
||||
return cpTrue;
|
||||
else
|
||||
return cpFalse;
|
||||
};
|
||||
|
|
@ -481,9 +466,7 @@ namespace Nz
|
|||
{
|
||||
handler->preSolveFunc = [](cpArbiter* arb, cpSpace* space, void* data) -> cpBool
|
||||
{
|
||||
cpBool retA = cpArbiterCallWildcardPreSolveA(arb, space);
|
||||
cpBool retB = cpArbiterCallWildcardPreSolveB(arb, space);
|
||||
return retA && retB;
|
||||
return cpTrue;
|
||||
};
|
||||
}
|
||||
|
||||
|
|
@ -503,17 +486,12 @@ namespace Nz
|
|||
|
||||
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||
customCallbacks->postSolveCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata);
|
||||
|
||||
cpArbiterCallWildcardPostSolveA(arb, space);
|
||||
cpArbiterCallWildcardPostSolveB(arb, space);
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
handler->postSolveFunc = [](cpArbiter* arb, cpSpace* space, void* data)
|
||||
{
|
||||
cpArbiterCallWildcardPostSolveA(arb, space);
|
||||
cpArbiterCallWildcardPostSolveB(arb, space);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -89,7 +89,7 @@ cpAreaForSegment(cpVect a, cpVect b, cpFloat r)
|
|||
}
|
||||
|
||||
cpFloat
|
||||
cpMomentForPoly(cpFloat m, const int count, const cpVect *verts, cpVect offset, cpFloat r)
|
||||
cpMomentForPoly(cpFloat m, int count, const cpVect *verts, cpVect offset, cpFloat r)
|
||||
{
|
||||
// TODO account for radius.
|
||||
if(count == 2) return cpMomentForSegment(m, verts[0], verts[1], 0.0f);
|
||||
|
|
|
|||
Loading…
Reference in New Issue