aboutsummaryrefslogtreecommitdiff
path: root/Client/Source/Phy2DLite/Arbiter.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-12-02 12:46:50 +0800
committerchai <chaifix@163.com>2021-12-02 12:46:50 +0800
commitb1d4e9866de19c70174553e543e81ef4473dee6c (patch)
treefa1518ce5e6580886d8f8b4d9772474cd6f67184 /Client/Source/Phy2DLite/Arbiter.cpp
parent83fedef41f6dcea4dde010abb025b7ed647d0501 (diff)
*number -> fixed
Diffstat (limited to 'Client/Source/Phy2DLite/Arbiter.cpp')
-rw-r--r--Client/Source/Phy2DLite/Arbiter.cpp38
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);
}