mirror of
https://github.com/TorqueGameEngines/Torque3D.git
synced 2026-02-12 19:31:41 +00:00
cancel out momentums during updateforces if disablemove
increment forces on a per-contact basis, not a batch basis
This commit is contained in:
parent
e7b3a95f89
commit
93abe5a49c
1 changed files with 10 additions and 10 deletions
|
|
@ -1207,8 +1207,12 @@ void RigidShape::updatePos(F32 dt)
|
|||
|
||||
void RigidShape::updateForces(F32 dt)
|
||||
{
|
||||
if (mDisableMove) return;
|
||||
|
||||
if (mDisableMove)
|
||||
{
|
||||
mRigid.linVelocity = Point3F::Zero;
|
||||
mRigid.angMomentum = Point3F::Zero;
|
||||
return;
|
||||
}
|
||||
Point3F torque(0, 0, 0);
|
||||
Point3F force(0, 0, mRigid.mass * mNetGravity);
|
||||
|
||||
|
|
@ -1273,7 +1277,6 @@ bool RigidShape::resolveCollision(Rigid& ns,CollisionList& cList, F32 dt)
|
|||
PROFILE_SCOPE(RigidShape_resolveCollision);
|
||||
// Apply impulses to resolve collision
|
||||
bool collided = false;
|
||||
Point3F t, p(0, 0, 0), l(0, 0, 0);
|
||||
for (S32 i = 0; i < cList.getCount(); i++)
|
||||
{
|
||||
Collision& c = cList[i];
|
||||
|
|
@ -1318,6 +1321,7 @@ bool RigidShape::resolveCollision(Rigid& ns,CollisionList& cList, F32 dt)
|
|||
// "constraints".
|
||||
else
|
||||
{
|
||||
Point3F t;
|
||||
// Penetration force. This is actually a spring which
|
||||
// will seperate the body from the collision surface.
|
||||
F32 zi = 2 * mFabs(mRigid.getZeroImpulse(r, c.normal) / dt);
|
||||
|
|
@ -1340,17 +1344,13 @@ bool RigidShape::resolveCollision(Rigid& ns,CollisionList& cList, F32 dt)
|
|||
}
|
||||
|
||||
// Accumulate forces
|
||||
p += f;
|
||||
mCross(r, f, &t);
|
||||
l += t;
|
||||
|
||||
ns.linMomentum += f * dt;
|
||||
ns.angMomentum += t * dt;
|
||||
ns.updateVelocity();
|
||||
}
|
||||
}
|
||||
}
|
||||
// Contact constraint forces act over time...
|
||||
ns.linMomentum += p * dt;
|
||||
ns.angMomentum += l * dt;
|
||||
ns.updateVelocity();
|
||||
|
||||
|
||||
return collided;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue