using UnityEngine; namespace Crosstales.Radio.Demo.Util { [HelpURLAttribute("https://www.crosstales.com/media/data/assets/radio/api/class_crosstales_1_1_radio_1_1_demo_1_1_util_1_1_orbit.html")] public class Orbit : MonoBehaviour { public Transform Target; public bool RotateX; public bool RotateY = true; public bool RotateZ; public Vector3 Speed = Vector3.zero; public Vector3 ChangeTimeMin = Vector3.zero; public Vector3 ChangeTime = Vector3.zero; private float speedX; private float speedY; private float speedZ; private float changeTimeX; private float changeTimeY; private float changeTimeZ; private float elapsedTimeX; private float elapsedTimeY; private float elapsedTimeZ; public void Start() { if (RotateX) { changeTimeX = Random.Range(ChangeTimeMin.x, Mathf.Abs(ChangeTime.x)); speedX = Random.Range(0f - Mathf.Abs(Speed.x), Mathf.Abs(Speed.x)); } if (RotateY) { changeTimeY = Random.Range(ChangeTimeMin.y, Mathf.Abs(ChangeTime.y)); speedY = Random.Range(0f - Mathf.Abs(Speed.y), Mathf.Abs(Speed.y)); } if (RotateZ) { changeTimeZ = Random.Range(ChangeTimeMin.z, Mathf.Abs(ChangeTime.z)); speedZ = Random.Range(0f - Mathf.Abs(Speed.z), Mathf.Abs(Speed.z)); } } public void Update() { if (!(Target != null)) { return; } if (RotateX) { elapsedTimeX += Time.deltaTime; if (elapsedTimeX > changeTimeX) { speedX = Random.Range(0f - Mathf.Abs(Speed.x), Mathf.Abs(Speed.x) + 1f); elapsedTimeX = 0f; changeTimeX = Random.Range(Mathf.Abs(ChangeTimeMin.x), Mathf.Abs(ChangeTime.x)); } base.transform.RotateAround(Target.position, Vector3.right, speedX * Time.deltaTime); } if (RotateY) { elapsedTimeY += Time.deltaTime; if (elapsedTimeY > changeTimeY) { speedY = Random.Range(0f - Mathf.Abs(Speed.y), Mathf.Abs(Speed.y) + 1f); elapsedTimeY = 0f; changeTimeY = Random.Range(Mathf.Abs(ChangeTimeMin.y), Mathf.Abs(ChangeTime.y)); } base.transform.RotateAround(Target.position, Vector3.up, speedY * Time.deltaTime); } if (RotateZ) { elapsedTimeZ += Time.deltaTime; if (elapsedTimeZ > changeTimeZ) { speedZ = Random.Range(0f - Mathf.Abs(Speed.z), Mathf.Abs(Speed.z) + 1f); elapsedTimeZ = 0f; changeTimeZ = Random.Range(Mathf.Abs(ChangeTimeMin.z), Mathf.Abs(ChangeTime.z)); } base.transform.RotateAround(Target.position, Vector3.back, speedZ * Time.deltaTime); } } } }