summaryrefslogtreecommitdiff
path: root/MouseLook.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MouseLook.cs')
-rw-r--r--MouseLook.cs117
1 files changed, 117 insertions, 0 deletions
diff --git a/MouseLook.cs b/MouseLook.cs
new file mode 100644
index 0000000..45c7cca
--- /dev/null
+++ b/MouseLook.cs
@@ -0,0 +1,117 @@
+using UnityEngine;
+
+public class MouseLook : MonoBehaviour
+{
+ public enum RotationAxes
+ {
+ MouseXAndY,
+ MouseX,
+ MouseY
+ }
+
+ public RotationAxes axes;
+
+ public float sensitivityX = 3f;
+
+ public float sensitivityY = 3f;
+
+ public float minimumX = -360f;
+
+ public float maximumX = 360f;
+
+ public float minimumY = -80f;
+
+ public float maximumY = 80f;
+
+ public float forwardSpeedScale = 0.03f;
+
+ public float strafeSpeedScale = 0.03f;
+
+ private float rotationX;
+
+ private float rotationY;
+
+ private bool look;
+
+ private Quaternion originalRotation;
+
+ private void Update()
+ {
+ if (GUIUtility.hotControl != 0)
+ {
+ return;
+ }
+ if (Input.GetMouseButtonDown(0))
+ {
+ look = true;
+ }
+ if (Input.GetMouseButtonUp(0))
+ {
+ look = false;
+ }
+ if (look)
+ {
+ if (axes == RotationAxes.MouseXAndY)
+ {
+ rotationX += Input.GetAxis("Mouse X") * sensitivityX;
+ rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
+ rotationX = ClampAngle(rotationX, minimumX, maximumX);
+ rotationY = ClampAngle(rotationY, minimumY, maximumY);
+ Quaternion quaternion = Quaternion.AngleAxis(rotationX, Vector3.up);
+ Quaternion quaternion2 = Quaternion.AngleAxis(rotationY, Vector3.left);
+ base.transform.localRotation = originalRotation * quaternion * quaternion2;
+ }
+ else if (axes == RotationAxes.MouseX)
+ {
+ rotationX += Input.GetAxis("Mouse X") * sensitivityX;
+ rotationX = ClampAngle(rotationX, minimumX, maximumX);
+ Quaternion quaternion3 = Quaternion.AngleAxis(rotationX, Vector3.up);
+ base.transform.localRotation = originalRotation * quaternion3;
+ }
+ else
+ {
+ rotationY += Input.GetAxis("Mouse Y") * sensitivityY;
+ rotationY = ClampAngle(rotationY, minimumY, maximumY);
+ Quaternion quaternion4 = Quaternion.AngleAxis(rotationY, Vector3.left);
+ base.transform.localRotation = originalRotation * quaternion4;
+ }
+ }
+ Vector3 direction = new Vector3(Input.GetAxis("Horizontal"), 0f, Input.GetAxis("Vertical"));
+ direction = base.transform.TransformDirection(direction);
+ direction *= 10f;
+ float num = ((!Input.GetKey(KeyCode.LeftShift)) ? 50f : 150f);
+ float num2 = Input.GetAxis("Vertical") * forwardSpeedScale * num;
+ float num3 = Input.GetAxis("Horizontal") * strafeSpeedScale * num;
+ if (num2 != 0f)
+ {
+ base.transform.position += base.transform.forward * num2;
+ }
+ if (num3 != 0f)
+ {
+ base.transform.position += base.transform.right * num3;
+ }
+ }
+
+ private void Start()
+ {
+ if ((bool)GetComponent<Rigidbody>())
+ {
+ GetComponent<Rigidbody>().freezeRotation = true;
+ }
+ originalRotation = base.transform.localRotation;
+ look = false;
+ }
+
+ public static float ClampAngle(float angle, float min, float max)
+ {
+ if (angle < -360f)
+ {
+ angle += 360f;
+ }
+ if (angle > 360f)
+ {
+ angle -= 360f;
+ }
+ return Mathf.Clamp(angle, min, max);
+ }
+}