private void OnCollisionEnter(Collision collision)
    {
        if (rewindablesManager.IsRewindable(collision.gameObject.GetInstanceID()))
        {
            Vector3 averageContact = Vector3.zero;
            foreach (var contact in collision.contacts)
            {
                averageContact += contact.point;
            }
            averageContact /= collision.contactCount;

            Vector3 repulsiveForce = transform.position - averageContact;
            repulsiveForce.y = 0.0F;
            playerRigidbody.AddForce(repulsiveForce * 10.0F, ForceMode.Impulse);
        }
    }
Example #2
0
    private void OnCollisionEnter(Collision collision)
    {
        if (rewindablesManager.IsRewindable(collision.gameObject.GetInstanceID()))
        {
            Vector3 averageContact = Vector3.zero;
            foreach (var contact in collision.contacts)
            {
                averageContact += contact.point;
            }
            averageContact /= collision.contactCount;

            Vector3 repulsiveForce = transform.position - averageContact;
            repulsiveForce.y = 0.0F;
            float collisionSpeed = collision.gameObject.GetComponent <Rigidbody>().velocity.magnitude + 5F;
            playerRigidbody.constraints |= RigidbodyConstraints.FreezeRotationY;

            float repulsionModifier = (1 - ScoreManager.Instance.GetPlayerScore(playerNumber)) * 4F;

            playerRigidbody.AddForce(repulsiveForce * collisionSpeed * repulsionModifier, ForceMode.Impulse);
            collision.gameObject.GetComponent <Rigidbody>().AddForce(-repulsiveForce * collisionSpeed);
            playerRigidbody.constraints &= ~(RigidbodyConstraints.FreezeRotationY);
        }
    }