diff --git a/NewHorizons/Components/AddPhysics.cs b/NewHorizons/Components/AddPhysics.cs index 5f3183a1..635ed6d1 100644 --- a/NewHorizons/Components/AddPhysics.cs +++ b/NewHorizons/Components/AddPhysics.cs @@ -96,8 +96,13 @@ public class AddPhysics : MonoBehaviour if (SuspendUntilImpact) { - // suspend disables colliders, so have to use copy-pasted version - Suspend(); + // copied from OWRigidbody.Suspend + _body._suspensionBody = parentBody; + _body.MakeKinematic(); + _body._transform.parent = parentBody.transform; + _body._suspended = true; + _body._unsuspendNextUpdate = false; + _impactSensor.OnImpact += OnImpact; } else @@ -105,61 +110,6 @@ public class AddPhysics : MonoBehaviour Destroy(this); } } - - #region copy-pasted from OWRigidbody - - private void Suspend() - { - if (!_body._suspended) - { - if (_body._origParentBody != null) - { - Suspend(_body._origParent, _body._origParentBody); - return; - } - if (_body._simulateInSector != null) - { - Suspend(_body._simulateInSector.GetOWRigidbody()); - return; - } - Debug.Log("Unable to suspend : " + _body.gameObject.name); - } - } - - private void Suspend(OWRigidbody suspensionBody) - { - _body.Suspend(suspensionBody.transform, suspensionBody); - } - - private void Suspend(Transform suspensionParent, OWRigidbody suspensionBody) - { - if (!_body._suspended || _body._unsuspendNextUpdate) - { - _body._suspensionBody = suspensionBody; - Vector3 vector = _body.GetVelocity() - suspensionBody.GetPointVelocity(_body._transform.position); - _body._cachedRelativeVelocity = suspensionBody.transform.InverseTransformDirection(vector); - _body._cachedAngularVelocity = (_body.RunningKinematicSimulation() ? _body._kinematicRigidbody.angularVelocity : _body._rigidbody.angularVelocity); - _body.enabled = false; - _body._offsetApplier.enabled = false; - if (_body.RunningKinematicSimulation()) - { - _body._kinematicRigidbody.enabled = false; - } - else - { - _body.MakeKinematic(); - } - _body._transform.parent = suspensionParent; - _body._suspended = true; - _body._unsuspendNextUpdate = false; - if (!Physics.autoSyncTransforms) - { - Physics.SyncTransforms(); - } - } - } - - #endregion private void OnImpact(ImpactData impact) {