예제 #1
0
        // Token: 0x06001C36 RID: 7222 RVA: 0x00083904 File Offset: 0x00081B04
        public static float CalculateColliderVolume(Collider collider)
        {
            Vector3 lossyScale = collider.transform.lossyScale;
            float   num        = lossyScale.x * lossyScale.y * lossyScale.z;
            float   num2       = 0f;

            if (collider is BoxCollider)
            {
                Vector3 size = ((BoxCollider)collider).size;
                num2 = size.x * size.y * size.z;
            }
            else if (collider is SphereCollider)
            {
                num2 = Util.CalculateSphereVolume(((SphereCollider)collider).radius);
            }
            else if (collider is CapsuleCollider)
            {
                CapsuleCollider capsuleCollider = (CapsuleCollider)collider;
                float           radius          = capsuleCollider.radius;
                float           num3            = Util.CalculateSphereVolume(radius);
                float           num4            = Mathf.Max(capsuleCollider.height - num3, 0f);
                float           num5            = 3.1415927f * radius * radius * num4;
                num2 = num3 + num5;
            }
            else if (collider is CharacterController)
            {
                CharacterController characterController = (CharacterController)collider;
                float radius2 = characterController.radius;
                float num6    = Util.CalculateSphereVolume(radius2);
                float num7    = Mathf.Max(characterController.height - num6, 0f);
                float num8    = 3.1415927f * radius2 * radius2 * num7;
                num2 = num6 + num8;
            }
            return(num2 * num);
        }
예제 #2
0
        // Token: 0x06001C37 RID: 7223 RVA: 0x00083A1C File Offset: 0x00081C1C
        public static Vector3 RandomColliderVolumePoint(Collider collider)
        {
            Transform transform = collider.transform;
            Vector3   vector    = Vector3.zero;

            if (collider is BoxCollider)
            {
                BoxCollider boxCollider = (BoxCollider)collider;
                Vector3     size        = boxCollider.size;
                Vector3     center      = boxCollider.center;
                vector = new Vector3(center.x + UnityEngine.Random.Range(size.x * -0.5f, size.x * 0.5f), center.y + UnityEngine.Random.Range(size.y * -0.5f, size.y * 0.5f), center.z + UnityEngine.Random.Range(size.z * -0.5f, size.z * 0.5f));
            }
            else if (collider is SphereCollider)
            {
                SphereCollider sphereCollider = (SphereCollider)collider;
                vector = sphereCollider.center + UnityEngine.Random.insideUnitSphere * sphereCollider.radius;
            }
            else if (collider is CapsuleCollider)
            {
                CapsuleCollider capsuleCollider = (CapsuleCollider)collider;
                float           radius          = capsuleCollider.radius;
                float           num             = Mathf.Max(capsuleCollider.height - radius, 0f);
                float           num2            = Util.CalculateSphereVolume(radius);
                float           num3            = Util.CalculateCylinderVolume(radius, num);
                float           max             = num2 + num3;
                if (UnityEngine.Random.Range(0f, max) <= num2)
                {
                    vector = UnityEngine.Random.insideUnitSphere * radius;
                    float num4 = ((float)UnityEngine.Random.Range(0, 2) * 2f - 1f) * num * 0.5f;
                    switch (capsuleCollider.direction)
                    {
                    case 0:
                        vector.x += num4;
                        break;

                    case 1:
                        vector.y += num4;
                        break;

                    case 2:
                        vector.z += num4;
                        break;
                    }
                }
                else
                {
                    Vector2 vector2 = UnityEngine.Random.insideUnitCircle * radius;
                    float   num5    = UnityEngine.Random.Range(num * -0.5f, num * 0.5f);
                    switch (capsuleCollider.direction)
                    {
                    case 0:
                        vector = new Vector3(num5, vector2.x, vector2.y);
                        break;

                    case 1:
                        vector = new Vector3(vector2.x, num5, vector2.y);
                        break;

                    case 2:
                        vector = new Vector3(vector2.x, vector2.y, num5);
                        break;
                    }
                }
                vector += capsuleCollider.center;
            }
            else if (collider is CharacterController)
            {
                CharacterController characterController = (CharacterController)collider;
                float radius2 = characterController.radius;
                float num6    = Mathf.Max(characterController.height - radius2, 0f);
                float num7    = Util.CalculateSphereVolume(radius2);
                float num8    = Util.CalculateCylinderVolume(radius2, num6);
                float max2    = num7 + num8;
                if (UnityEngine.Random.Range(0f, max2) <= num7)
                {
                    vector = UnityEngine.Random.insideUnitSphere * radius2;
                    float num9 = ((float)UnityEngine.Random.Range(0, 2) * 2f - 1f) * num6 * 0.5f;
                    vector.y += num9;
                }
                else
                {
                    Vector2 vector3 = UnityEngine.Random.insideUnitCircle * radius2;
                    float   y       = UnityEngine.Random.Range(num6 * -0.5f, num6 * 0.5f);
                    vector = new Vector3(vector3.x, y, vector3.y);
                }
                vector += characterController.center;
            }
            return(transform.TransformPoint(vector));
        }