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);
|
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||||
if (customCallbacks->startCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata))
|
if (customCallbacks->startCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata))
|
||||||
{
|
return cpTrue;
|
||||||
cpBool retA = cpArbiterCallWildcardBeginA(arb, space);
|
|
||||||
cpBool retB = cpArbiterCallWildcardBeginB(arb, space);
|
|
||||||
return retA && retB;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
return cpFalse;
|
return cpFalse;
|
||||||
};
|
};
|
||||||
|
|
@ -416,9 +412,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
handler->beginFunc = [](cpArbiter* arb, cpSpace* space, void*) -> cpBool
|
handler->beginFunc = [](cpArbiter* arb, cpSpace* space, void*) -> cpBool
|
||||||
{
|
{
|
||||||
cpBool retA = cpArbiterCallWildcardBeginA(arb, space);
|
return cpTrue;
|
||||||
cpBool retB = cpArbiterCallWildcardBeginB(arb, space);
|
|
||||||
return retA && retB;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -438,17 +432,12 @@ namespace Nz
|
||||||
|
|
||||||
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||||
customCallbacks->endCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata);
|
customCallbacks->endCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata);
|
||||||
|
|
||||||
cpArbiterCallWildcardSeparateA(arb, space);
|
|
||||||
cpArbiterCallWildcardSeparateB(arb, space);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
handler->separateFunc = [](cpArbiter* arb, cpSpace* space, void*)
|
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);
|
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||||
if (customCallbacks->preSolveCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata))
|
if (customCallbacks->preSolveCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata))
|
||||||
{
|
return cpTrue;
|
||||||
cpBool retA = cpArbiterCallWildcardPreSolveA(arb, space);
|
|
||||||
cpBool retB = cpArbiterCallWildcardPreSolveB(arb, space);
|
|
||||||
return retA && retB;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
return cpFalse;
|
return cpFalse;
|
||||||
};
|
};
|
||||||
|
|
@ -481,9 +466,7 @@ namespace Nz
|
||||||
{
|
{
|
||||||
handler->preSolveFunc = [](cpArbiter* arb, cpSpace* space, void* data) -> cpBool
|
handler->preSolveFunc = [](cpArbiter* arb, cpSpace* space, void* data) -> cpBool
|
||||||
{
|
{
|
||||||
cpBool retA = cpArbiterCallWildcardPreSolveA(arb, space);
|
return cpTrue;
|
||||||
cpBool retB = cpArbiterCallWildcardPreSolveB(arb, space);
|
|
||||||
return retA && retB;
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -503,17 +486,12 @@ namespace Nz
|
||||||
|
|
||||||
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
const Callback* customCallbacks = static_cast<const Callback*>(data);
|
||||||
customCallbacks->postSolveCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata);
|
customCallbacks->postSolveCallback(*world, arbiter, *firstRigidBody, *secondRigidBody, customCallbacks->userdata);
|
||||||
|
|
||||||
cpArbiterCallWildcardPostSolveA(arb, space);
|
|
||||||
cpArbiterCallWildcardPostSolveB(arb, space);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
handler->postSolveFunc = [](cpArbiter* arb, cpSpace* space, void* data)
|
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
|
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.
|
// TODO account for radius.
|
||||||
if(count == 2) return cpMomentForSegment(m, verts[0], verts[1], 0.0f);
|
if(count == 2) return cpMomentForSegment(m, verts[0], verts[1], 0.0f);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue