using UnityEngine; public class Balance : MonoBehaviour { private Rigidbody handLeft; private Rigidbody handRight; private Rigidbody footLeft; private Rigidbody footRight; private Rigidbody hip; private Vector3 centerOfMass; private Rigidbody[] allRigs; public float[] balanceForce; public float[] footCenterForces; private AnimationHandler animationHandler; private PlayerDeath death; private Strength str; private float muscleMultiplier; private void Start() { death = GetComponent(); str = GetComponent(); allRigs = GetComponentsInChildren(); HandLeft componentInChildren = GetComponentInChildren(); if ((bool)componentInChildren) { handLeft = componentInChildren.GetComponent(); } HandRight componentInChildren2 = GetComponentInChildren(); if ((bool)componentInChildren2) { handRight = componentInChildren2.GetComponent(); } footLeft = GetComponentInChildren().GetComponent(); footRight = GetComponentInChildren().GetComponent(); hip = GetComponentInChildren().GetComponent(); animationHandler = GetComponent(); } private void FixedUpdate() { if (!death.dead) { muscleMultiplier = str.strength; centerOfMass = Vector3.zero; Rigidbody[] array = allRigs; foreach (Rigidbody rigidbody in array) { centerOfMass += rigidbody.worldCenterOfMass; } centerOfMass /= (float)allRigs.Length; centerOfMass.y = 0f; BalanceLegs(); CenterLegs(); } } private void CenterLegs() { Vector3 vector = footLeft.transform.position + footLeft.transform.forward * 0.5f; Vector3 vector2 = footRight.transform.position + footRight.transform.forward * 0.5f; Vector3 vector3 = vector; if (vector.y + 0.3f < hip.worldCenterOfMass.y) { vector3.y = 0f; footLeft.AddForceAtPosition((centerOfMass - vector3) * muscleMultiplier * footCenterForces[animationHandler.animationState], vector, ForceMode.Acceleration); } Vector3 vector4 = vector2; if (vector4.y + 0.3f < hip.worldCenterOfMass.y) { vector4.y = 0f; footRight.AddForceAtPosition((centerOfMass - vector4) * muscleMultiplier * footCenterForces[animationHandler.animationState], vector2, ForceMode.Acceleration); } } private void BalanceLegs() { Vector3 vector = footLeft.transform.position + footLeft.transform.forward * 0.5f; Vector3 vector2 = footRight.transform.position + footRight.transform.forward * 0.5f; Vector3 vector3 = (vector + vector2) / 2f; if (!(vector3.y + 0.3f > hip.worldCenterOfMass.y)) { vector3.y = 0f; Vector3 vector4 = centerOfMass - vector3; footLeft.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector, ForceMode.Acceleration); footRight.AddForceAtPosition(vector4 * muscleMultiplier * balanceForce[animationHandler.animationState], vector2, ForceMode.Acceleration); } } }