#if PRIME_TWEEN_INSTALLED && UNITY_UGUI_INSTALLED using PrimeTween; using UnityEngine; namespace PrimeTweenDemo { public class Wheels : Animatable { [SerializeField] Transform[] wheels; bool isAnimating; Sequence sequence; public override void OnClick() { Demo.instance.AnimateAll(!isAnimating); } public override Sequence Animate(bool _isAnimating) { isAnimating = _isAnimating; // Spinning wheels is an infinite animation, and we should not return it as result of this method. // Instead, we should wrap the SpinWheelsInfinitely() call inside the empty Sequence. This way, the SpinWheelsInfinitely() call can be grouped and chained with other tweens and sequences. return Sequence.Create().ChainCallback(this, target => target.SpinWheelsInfinitely()); } void SpinWheelsInfinitely() { if (isAnimating) { sequence.Complete(); sequence = Sequence.Create(-1); foreach (var wheel in wheels) { sequence.Group(Tween.LocalEulerAngles(wheel, Vector3.zero, new Vector3(360, 0), 1, Ease.Linear)); } } else { if (sequence.isAlive) { sequence.SetRemainingCycles(0); } } } } } #endif