summaryrefslogtreecommitdiff
path: root/RotateByMouseInput.cs
diff options
context:
space:
mode:
Diffstat (limited to 'RotateByMouseInput.cs')
-rw-r--r--RotateByMouseInput.cs121
1 files changed, 121 insertions, 0 deletions
diff --git a/RotateByMouseInput.cs b/RotateByMouseInput.cs
new file mode 100644
index 0000000..ced8420
--- /dev/null
+++ b/RotateByMouseInput.cs
@@ -0,0 +1,121 @@
+using UnityEngine;
+
+public class RotateByMouseInput : MonoBehaviour
+{
+ public enum XSpace
+ {
+ self,
+ world
+ }
+
+ public enum YSpace
+ {
+ self,
+ world
+ }
+
+ public bool useX;
+
+ public XSpace xSpace;
+
+ public Vector3 xVector;
+
+ public bool useY;
+
+ public YSpace ySpace;
+
+ public Vector3 yVector;
+
+ [Header("Control")]
+ public bool needControl;
+
+ public bool needAlive;
+
+ public bool freezeUnusedAngles;
+
+ private HasControl hasControl;
+
+ private PlayerDeath death;
+
+ private float m = 1f;
+
+ private void Start()
+ {
+ if (needControl)
+ {
+ hasControl = base.transform.root.GetComponent<HasControl>();
+ }
+ if (needAlive)
+ {
+ death = base.transform.root.GetComponent<PlayerDeath>();
+ }
+ }
+
+ private void LateUpdate()
+ {
+ if (needControl && !hasControl.hasControl)
+ {
+ return;
+ }
+ if (needAlive)
+ {
+ m = Mathf.Clamp(death.muscleFunction * 2f, 0f, 1f);
+ if (death.dead)
+ {
+ return;
+ }
+ }
+ if (useX)
+ {
+ Vector3 vector = xVector;
+ if (xSpace == XSpace.self)
+ {
+ vector = base.transform.TransformDirection(vector);
+ }
+ base.transform.Rotate(vector * Input.GetAxis("Mouse X") * m * 0.8f, Space.World);
+ }
+ if (useY)
+ {
+ Vector3 vector2 = yVector;
+ if (ySpace == YSpace.self)
+ {
+ vector2 = base.transform.TransformDirection(vector2);
+ }
+ base.transform.Rotate(vector2 * Input.GetAxis("Mouse Y") * m * 0.8f, Space.World);
+ }
+ if (!freezeUnusedAngles)
+ {
+ return;
+ }
+ if (useY)
+ {
+ if (yVector.x == 0f)
+ {
+ base.transform.localRotation = Quaternion.Euler(0f, base.transform.localEulerAngles.y, base.transform.localEulerAngles.z);
+ }
+ if (yVector.y == 0f)
+ {
+ base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, 0f, base.transform.localEulerAngles.z);
+ }
+ if (yVector.z == 0f)
+ {
+ base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, base.transform.localEulerAngles.y, 0f);
+ }
+ }
+ if (useX)
+ {
+ if (xVector.x == 0f)
+ {
+ base.transform.localRotation = Quaternion.Euler(0f, base.transform.localEulerAngles.y, base.transform.localEulerAngles.z);
+ }
+ if (xVector.y == 0f)
+ {
+ base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, 0f, base.transform.localEulerAngles.z);
+ }
+ if (xVector.z == 0f)
+ {
+ base.transform.localRotation = Quaternion.Euler(base.transform.localEulerAngles.x, base.transform.localEulerAngles.y, 0f);
+ }
+ }
+ }
+}