Singularity/Assets/Scripts/SpinVert.cs
2024-05-06 11:45:45 -07:00

92 lines
2.0 KiB
C#

using UnityEngine;
public class SpinVert : MonoBehaviour
{
[Header("\tSpin on axis")]
[SerializeField] public bool X = false;
[SerializeField] public bool Y = false;
[SerializeField] public bool Z = false;
[Header("\tController")]
[Tooltip("When this is true, it is spinning")]
[SerializeField] private bool Spin = false;
[Tooltip("How fast we are spinning")]
[SerializeField] private float Speed = 100f;
[Tooltip("What angle do we stop at (999 cancels this)")]
[SerializeField] private float StopAt = 999f;
[Header("\tStarting Positions")]
[SerializeField] private float RotX = 0f;
[SerializeField] private float RotY = 0f;
[SerializeField] private float RotZ = 0f;
void Start() {
/*
Vector3 temp = transform.rotation.eulerAngles;
temp.x = RotX;
temp.y = RotY;
temp.z = RotZ;
transform.rotation = Quaternion.Euler(temp);
*/
}
public void ToggleSpin(bool TF) {
Spin = TF;
}
public bool ToggleSpin() {
Spin = !Spin;
return Spin;
}
// Update is called once per frame
void Update()
{
if (Spin) {
Vector3 temp = transform.rotation.eulerAngles;
if (X) {
transform.Rotate(Speed * Time.deltaTime, 0f, 0f, Space.Self);
DoContinue(temp.x);
}
if (Y) {
transform.Rotate(0f, Speed * Time.deltaTime, 0f, Space.Self);
DoContinue(temp.y);
}
if (Z) {
transform.Rotate(0f, 0f, Speed * Time.deltaTime, Space.Self);
DoContinue(temp.z);
}
}
}
public void StartSpinning(string Axis = "none", float fSpeed = 100f, float fStopAt = 80f) {
Spin = true;
Speed = fSpeed;
StopAt = fStopAt;
if (Axis == "X" || Axis == "x")
X = true;
if (Axis == "Y" || Axis == "y")
Y = true;
if (Axis == "Z" || Axis == "z")
Z = true;
}
private void DoContinue(float i) {
if (StopAt == 999)
return;
if (i > StopAt)
Spin = false;
}
public void ResetRotation() {
Vector3 temp = transform.rotation.eulerAngles;
if (X)
temp.x = RotX;
if (Y)
temp.y = RotY;
if (Z)
temp.z = RotZ;
transform.rotation = Quaternion.Euler(temp);
}
}