diff options
Diffstat (limited to 'Client/Source/Phy2DLite/Arbiter.cpp')
-rw-r--r-- | Client/Source/Phy2DLite/Arbiter.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/Client/Source/Phy2DLite/Arbiter.cpp b/Client/Source/Phy2DLite/Arbiter.cpp index 567e6f7..d29bace 100644 --- a/Client/Source/Phy2DLite/Arbiter.cpp +++ b/Client/Source/Phy2DLite/Arbiter.cpp @@ -73,10 +73,10 @@ void Arbiter::Update(Contact* newContacts, int numNewContacts) } -void Arbiter::PreStep(number inv_dt) +void Arbiter::PreStep(fixed inv_dt) { - const number k_allowedPenetration = _0_01; - number k_biasFactor = World::positionCorrection ? _0_2 : _0; + const fixed k_allowedPenetration = _0_01; + fixed k_biasFactor = World::positionCorrection ? _0_2 : _0; for (int i = 0; i < numContacts; ++i) { @@ -86,18 +86,18 @@ void Arbiter::PreStep(number inv_dt) Vec2 r2 = c->position - body2->position; // Precompute normal mass, tangent mass, and bias. - number rn1 = Dot(r1, c->normal); - number rn2 = Dot(r2, c->normal); - number kNormal = body1->invMass + body2->invMass; + fixed rn1 = Dot(r1, c->normal); + fixed rn2 = Dot(r2, c->normal); + fixed kNormal = body1->invMass + body2->invMass; kNormal += body1->invI * (Dot(r1, r1) - rn1 * rn1) + body2->invI * (Dot(r2, r2) - rn2 * rn2); - c->massNormal = (number)_1 / kNormal; + c->massNormal = (fixed)_1 / kNormal; Vec2 tangent = Cross(c->normal, _1); - number rt1 = Dot(r1, tangent); - number rt2 = Dot(r2, tangent); - number kTangent = body1->invMass + body2->invMass; + fixed rt1 = Dot(r1, tangent); + fixed rt2 = Dot(r2, tangent); + fixed kTangent = body1->invMass + body2->invMass; kTangent += body1->invI * (Dot(r1, r1) - rt1 * rt1) + body2->invI * (Dot(r2, r2) - rt2 * rt2); - c->massTangent = (number)_1 / kTangent; + c->massTangent = (fixed)_1 / kTangent; c->bias = -k_biasFactor * inv_dt * Min(_0, c->separation + k_allowedPenetration); @@ -130,14 +130,14 @@ void Arbiter::ApplyImpulse() Vec2 dv = b2->velocity + Cross(b2->angularVelocity, c->r2) - b1->velocity - Cross(b1->angularVelocity, c->r1); // Compute normal impulse - number vn = Dot(dv, c->normal); + fixed vn = Dot(dv, c->normal); - number dPn = c->massNormal * (-vn + c->bias); + fixed dPn = c->massNormal * (-vn + c->bias); if (World::accumulateImpulses) { // Clamp the accumulated impulse - number Pn0 = c->Pn; + fixed Pn0 = c->Pn; c->Pn = Max(Pn0 + dPn, _0); dPn = c->Pn - Pn0; } @@ -159,22 +159,22 @@ void Arbiter::ApplyImpulse() dv = b2->velocity + Cross(b2->angularVelocity, c->r2) - b1->velocity - Cross(b1->angularVelocity, c->r1); Vec2 tangent = Cross(c->normal, _1); - number vt = Dot(dv, tangent); - number dPt = c->massTangent * (-vt); + fixed vt = Dot(dv, tangent); + fixed dPt = c->massTangent * (-vt); if (World::accumulateImpulses) { // Compute friction impulse - number maxPt = friction * c->Pn; + fixed maxPt = friction * c->Pn; // Clamp friction - number oldTangentImpulse = c->Pt; + fixed oldTangentImpulse = c->Pt; c->Pt = Clamp(oldTangentImpulse + dPt, -maxPt, maxPt); dPt = c->Pt - oldTangentImpulse; } else { - number maxPt = friction * dPn; + fixed maxPt = friction * dPn; dPt = Clamp(dPt, -maxPt, maxPt); } |