Exemple #1
0
    // Token: 0x06001021 RID: 4129 RVA: 0x00071C14 File Offset: 0x0006FE14
    private void UpdateSupport()
    {
        if (this.m_colliders == null)
        {
            this.SetupColliders();
        }
        float num;
        float num2;
        float num3;
        float num4;

        this.GetMaterialProperties(out num, out num2, out num3, out num4);
        WearNTear.m_tempSupportPoints.Clear();
        WearNTear.m_tempSupportPointValues.Clear();
        Vector3 com = this.GetCOM();
        float   a   = 0f;

        foreach (WearNTear.BoundData boundData in this.m_bounds)
        {
            int num5 = Physics.OverlapBoxNonAlloc(boundData.m_pos, boundData.m_size, WearNTear.m_tempColliders, boundData.m_rot, WearNTear.m_rayMask);
            for (int i = 0; i < num5; i++)
            {
                Collider collider = WearNTear.m_tempColliders[i];
                if (!this.m_colliders.Contains(collider) && !(collider.attachedRigidbody != null) && !collider.isTrigger)
                {
                    WearNTear componentInParent = collider.GetComponentInParent <WearNTear>();
                    if (componentInParent == null)
                    {
                        this.m_support = num;
                        this.m_nview.GetZDO().Set("support", this.m_support);
                        return;
                    }
                    if (componentInParent.m_supports)
                    {
                        float num6    = Vector3.Distance(com, componentInParent.transform.position) + 0.1f;
                        float support = componentInParent.GetSupport();
                        a = Mathf.Max(a, support - num3 * num6 * support);
                        Vector3 vector = this.FindSupportPoint(com, componentInParent, collider);
                        if (vector.y < com.y + 0.05f)
                        {
                            Vector3 normalized = (vector - com).normalized;
                            if (normalized.y < 0f)
                            {
                                float t    = Mathf.Acos(1f - Mathf.Abs(normalized.y)) / 1.5707964f;
                                float num7 = Mathf.Lerp(num3, num4, t);
                                float b    = support - num7 * num6 * support;
                                a = Mathf.Max(a, b);
                            }
                            float item = support - num4 * num6 * support;
                            WearNTear.m_tempSupportPoints.Add(vector);
                            WearNTear.m_tempSupportPointValues.Add(item);
                        }
                    }
                }
            }
        }
        if (WearNTear.m_tempSupportPoints.Count > 0 && WearNTear.m_tempSupportPoints.Count >= 2)
        {
            for (int j = 0; j < WearNTear.m_tempSupportPoints.Count; j++)
            {
                Vector3 from = WearNTear.m_tempSupportPoints[j] - com;
                from.y = 0f;
                for (int k = 0; k < WearNTear.m_tempSupportPoints.Count; k++)
                {
                    if (j != k)
                    {
                        Vector3 to = WearNTear.m_tempSupportPoints[k] - com;
                        to.y = 0f;
                        if (Vector3.Angle(from, to) >= 100f)
                        {
                            float b2 = (WearNTear.m_tempSupportPointValues[j] + WearNTear.m_tempSupportPointValues[k]) * 0.5f;
                            a = Mathf.Max(a, b2);
                        }
                    }
                }
            }
        }
        this.m_support = Mathf.Min(a, num);
        this.m_nview.GetZDO().Set("support", this.m_support);
    }