15 private GameObject[] orbs;
16 private bool startingLoader =
false;
17 private int startingIndex;
19 public Vector3 CenterPoint =
new Vector3();
20 public Vector3 Axis = Vector3.forward;
21 public float Radius = 0.075f;
22 public float RevolutionSpeed = 1.9f;
23 public int Revolutions = 3;
24 public float AngleSpace = 12;
25 public bool IsPaused =
false;
26 public bool SmoothEaseInOut =
false;
27 public float SmoothRatio = 0.65f;
29 private float angle = 0;
30 private float timeValue = 0;
31 private int revolutionsCount = 0;
32 private bool loopPause =
false;
33 private int fadeIndex = 0;
34 private bool checkLoopPause =
false;
35 private Vector3 positionVector;
36 private Vector3 rotatedPositionVector;
39 public GameObject[] Orbs
54 positionVector = transform.up;
56 if (!Mathf.Approximately(Vector3.Angle(Axis, positionVector), 90))
58 positionVector = transform.forward;
59 if (!Mathf.Approximately(Vector3.Angle(Axis, positionVector), 90))
61 float x = Mathf.Abs(Axis.x);
62 float y = Mathf.Abs(Axis.y);
63 float z = Mathf.Abs(Axis.z);
68 positionVector = Vector3.Cross(Axis * Radius, Vector3.forward);
74 positionVector = Vector3.Cross(Axis * Radius, Vector3.right);
80 positionVector = Vector3.Cross(Axis * Radius, Vector3.right);
89 for (
int i = 0; i < Orbs.Length; ++i)
91 Orbs[i].SetActive(
false);
96 startingLoader =
true;
104 for (
int i = 0; i < Orbs.Length; ++i)
106 Orbs[i].gameObject.SetActive(
false);
125 return e / 2 * v * v * v * v + s;
128 return -e / 2 * ((v -= 2) * v * v * v - 2) + s;
131 private void Update()
138 float percentage = timeValue / RevolutionSpeed;
140 for (
int i = 0; i < Orbs.Length; ++i)
142 GameObject orb = Orbs[i];
143 float orbPercentage = percentage - AngleSpace / 360 * i;
144 if (orbPercentage < 0)
146 orbPercentage = 1 + orbPercentage;
151 float linearSmoothing = 1 * (orbPercentage * (1 - SmoothRatio));
152 orbPercentage = QuartEaseInOut(0, 1, orbPercentage) * SmoothRatio + linearSmoothing;
154 angle = 0 - (orbPercentage) * 360;
158 if (orbPercentage >= 0 && orbPercentage < 0.5f)
160 if (i == startingIndex)
163 if (i >= Orbs.Length - 1)
165 startingLoader =
false;
172 orb.transform.Rotate(Axis, angle);
173 rotatedPositionVector = Quaternion.AngleAxis(angle, Axis) * positionVector * Radius;
174 orb.transform.localPosition = CenterPoint + rotatedPositionVector;
176 if (checkLoopPause != loopPause)
178 if (loopPause && orbPercentage > 0.25f)
184 if (i >= Orbs.Length - 1)
186 checkLoopPause = loopPause;
193 if (!loopPause && orbPercentage > 0.5f)
199 if (i >= Orbs.Length - 1)
201 checkLoopPause = loopPause;
210 timeValue += Time.deltaTime;
213 if (timeValue >= RevolutionSpeed)
215 timeValue = timeValue - RevolutionSpeed;
217 revolutionsCount += 1;
219 if (revolutionsCount >= Revolutions && Revolutions > 0)
223 revolutionsCount = 0;
224 loadingAnimation.gameObject.SetActive(
false);
230 if (timeValue >= RevolutionSpeed)
233 revolutionsCount += 1;
234 if (revolutionsCount >= Revolutions * 0.25f)
238 revolutionsCount = 0;