using UnityEngine; public class Recoil : MonoBehaviour { public float ADSMovementMultiplier = 0.5f; [Header("")] public Vector3 gunForce; public Vector3 gunForceRandom; [Header("")] public Vector3 gunTorque; public Vector3 gunTorqueRandom; [Header("")] private Rigidbody rig; [Header("")] public Vector2 recoil; public Vector2 randomRecoil; public AnimationCurve recoilCurve; private CameraRecoil cameraRecoil; private HoldableObject holdableObject; private ADS ads; private void Start() { rig = GetComponent(); holdableObject = GetComponent(); ads = GetComponentInChildren(); } private void Update() { if (!holdableObject.isHeld && (bool)cameraRecoil) { cameraRecoil = null; } } public void AddRecoil(bool ADS) { if (!cameraRecoil) { cameraRecoil = holdableObject.holder.GetComponentInChildren(); } ads.PlayRecoilAnimation(); cameraRecoil.AddRecoil(recoil + new Vector2(Random.Range(0f - randomRecoil.x, randomRecoil.x), Random.Range(0f - randomRecoil.y, randomRecoil.y)), recoilCurve); float num = 1f; if (ADS) { num = ADSMovementMultiplier; } rig.AddForce(base.transform.TransformDirection(gunForce + new Vector3(Random.Range(0f - gunForceRandom.x, gunForceRandom.x), Random.Range(0f - gunForceRandom.y, gunForceRandom.y), Random.Range(0f - gunForceRandom.z, gunForceRandom.z))) * num, ForceMode.VelocityChange); rig.AddTorque(base.transform.TransformDirection(gunTorque + new Vector3(Random.Range(0f - gunTorqueRandom.x, gunTorqueRandom.x), Random.Range(0f - gunTorqueRandom.y, gunTorqueRandom.y), Random.Range(0f - gunTorqueRandom.z, gunTorqueRandom.z))) * num, ForceMode.VelocityChange); } }