using UnityEngine; public class HardAnimation : MonoBehaviour { public bool isLeft; public Vector3 targetRotationForward; public Vector3 targetRotationBack; private Vector3 currentTarget; private Vector3 currentTargetGoal; public float friction; public float movementAmount; public float delay; private float counter; private Vector3 velocity; private StepHandler step; private ConfigurableJoint joint; private Quaternion startRot; private Quaternion startRotLocal; private void Start() { joint = GetComponent(); step = base.transform.root.GetComponent(); startRot = base.transform.rotation; startRotLocal = base.transform.localRotation; } private void Update() { Vector3 vector = ((step.isLeft != isLeft) ? targetRotationBack : targetRotationForward); if (currentTargetGoal != vector) { if (counter >= delay) { counter = 0f; currentTargetGoal = vector; } else { counter += Time.deltaTime; } } velocity += (currentTargetGoal - currentTarget) * Time.deltaTime; velocity -= velocity * friction * Time.deltaTime; currentTarget += velocity * movementAmount * Time.deltaTime; joint.SetTargetRotationLocal(Quaternion.Euler(currentTarget), startRotLocal); } }