Пример #1
0
 public void RegisterMe(RigidbodyFreeze freeze)
 {
     if (!freezers.Contains(freeze))
     {
         freezers.Add(freeze);
     }
 }
Пример #2
0
 public void UnregisterMe(RigidbodyFreeze freeze)
 {
     if (freezers.Contains(freeze))
     {
         freezers.Remove(freeze);
     }
 }
Пример #3
0
    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;
    }