using UnityEngine; using System.Collections; using System.Collections.Generic; namespace YHElectric { public class NGMouseLook : MonoBehaviour { public float sensitivity = 4.0f; [HideInInspector] public float sensitivityAmt = 4.0f;//actual sensitivity modified by IronSights Script private float minimumX = -360f; private float maximumX = 360f; private float minimumY = -35f; private float maximumY = 35f; [HideInInspector] public float rotationX = 0.0f; [HideInInspector] public float rotationY = 0.0f; [HideInInspector] public float inputY = 0.0f; public float smoothSpeed = 0.35f; private Quaternion originalRotation; [HideInInspector] public float recoilX;//non recovering recoil amount managed by WeaponKick function of WeaponBehavior.cs [HideInInspector] public float recoilY;//non recovering recoil amount managed by WeaponKick function of WeaponBehavior.cs void Start() { originalRotation = transform.localRotation; sensitivityAmt = sensitivity; } void Update() { if (Time.timeScale > 0 && Time.deltaTime > 0) {//allow pausing by setting timescale to 0 //Hide the cursor //Screen.lockCursor = true; //Screen.showCursor = false; // Read the mouse input axis rotationX += Input.GetAxisRaw("Mouse X") * sensitivityAmt * Time.timeScale;//lower sensitivity at slower time settings rotationY += Input.GetAxisRaw("Mouse Y") * sensitivityAmt * Time.timeScale; //reset vertical recoilY value if it would exceed maximumY amount if (maximumY - Input.GetAxisRaw("Mouse Y") * sensitivityAmt * Time.timeScale < recoilY) { rotationY += recoilY; recoilY = 0.0f; } //reset horizontal recoilX value if it would exceed maximumX amount if (maximumX - Input.GetAxisRaw("Mouse X") * sensitivityAmt * Time.timeScale < recoilX) { rotationX += recoilX; recoilX = 0.0f; } rotationX = ClampAngle(rotationX, minimumX, maximumX); rotationY = ClampAngle(rotationY, minimumY - recoilY, maximumY - recoilY); inputY = rotationY + recoilY;//set public inputY value for use in other scripts Quaternion xQuaternion = Quaternion.AngleAxis(rotationX + recoilX, Vector3.up); Quaternion yQuaternion = Quaternion.AngleAxis(rotationY + recoilY, -Vector3.right); //smooth the mouse input transform.rotation = Quaternion.Slerp(transform.rotation, originalRotation * xQuaternion * yQuaternion, smoothSpeed * Time.smoothDeltaTime * 60 / Time.timeScale); //lock mouselook roll to prevent gun rotating with fast mouse movements transform.rotation = Quaternion.Euler(transform.rotation.eulerAngles.x, transform.rotation.eulerAngles.y, 0.0f); } else { //Show the cursor //Screen.lockCursor = false; //Screen.showCursor = true; } } //function used to limit angles public static float ClampAngle(float angle, float min, float max) { angle = angle % 360; if ((angle >= -360F) && (angle <= 360F)) { if (angle < -360F) { angle += 360F; } if (angle > 360F) { angle -= 360F; } } return Mathf.Clamp(angle, min, max); } } }