public void AddRelativeForce(LVector2 relativeForce, LVector2 localPosition, LForceMode2D forceMode) { LVector3 globalForce = transform.rotation * (LVector3)relativeForce; LVector2 globalPosition = transform.TransformPoint(localPosition); AddForceAtPosition(globalForce, globalPosition, forceMode); }
public void AddTorque(LFloat torque, LForceMode2D forceMode) { switch (forceMode) { case LForceMode2D.Force: { mUserTorque += torque; break; } case LForceMode2D.Impulse: { mAngularVelocity += torque * inertiaInverse; break; } } }
public void AddForce(LVector2 force, LForceMode2D forceMode) { switch (forceMode) { case LForceMode2D.Force: { mUserForce += force; break; } case LForceMode2D.Impulse: { mLinearVelocity += force * mMassInverse; break; } } }
public void AddForceAtPosition(LVector2 force, LVector2 position, LForceMode2D forceMode) { AddForce(force, forceMode); switch (forceMode) { case LForceMode2D.Force: { mUserTorque += LVector3.Cross(position - GetWorldCenterOfMass(), force).z; break; } case LForceMode2D.Impulse: { mAngularVelocity += LVector3.Cross(position - GetWorldCenterOfMass(), force).z *mInertiaInverse; break; } } }