public void RegisterMe(RigidbodyFreeze freeze) { if (!freezers.Contains(freeze)) { freezers.Add(freeze); } }
public void UnregisterMe(RigidbodyFreeze freeze) { if (freezers.Contains(freeze)) { freezers.Remove(freeze); } }
private IEnumerator TakeLastBreaths() { state = LifeState.takingLastBreaths; MakeComponents(false); Rigidbody body = GetComponent <Rigidbody>(); if (body) { //ragdollify body.WakeUp(); cacheIsKinetic = body.isKinematic; cachePosition = body.position; cacheRotation = body.rotation; if (body.isKinematic) { body.isKinematic = false; } //twitch int twitches = Random.Range(2, 5); for (int i = 0; i < twitches; i++) { //if we are frozen don't do anything until we are not frozern RigidbodyFreeze rbf = GetComponent <RigidbodyFreeze>(); if (rbf) { while (rbf.Frozen) { yield return(new WaitForEndOfFrame()); } } body.AddForce(Random.onUnitSphere * body.mass / 5f, ForceMode.Impulse); body.AddTorque(Random.onUnitSphere * body.mass / 5f, ForceMode.Impulse); yield return(new WaitForSeconds(deathThrowDuration / (float)twitches)); } } state = LifeState.dead; }