diff options
Diffstat (limited to 'RotateByMouseInput.cs')
-rw-r--r-- | RotateByMouseInput.cs | 121 |
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); + } + } + } +} |