summaryrefslogtreecommitdiff
path: root/MouseLook.cs
blob: 45c7cca03683677226c1f5eb5714cca493b5dde9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
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);
	}
}