diff options
Diffstat (limited to 'Recoil.cs')
-rw-r--r-- | Recoil.cs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/Recoil.cs b/Recoil.cs new file mode 100644 index 0000000..ee047f1 --- /dev/null +++ b/Recoil.cs @@ -0,0 +1,64 @@ +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<Rigidbody>(); + holdableObject = GetComponent<HoldableObject>(); + ads = GetComponentInChildren<ADS>(); + } + + private void Update() + { + if (!holdableObject.isHeld && (bool)cameraRecoil) + { + cameraRecoil = null; + } + } + + public void AddRecoil(bool ADS) + { + if (!cameraRecoil) + { + cameraRecoil = holdableObject.holder.GetComponentInChildren<CameraRecoil>(); + } + 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); + } +} |