using UnityEngine; namespace Superlazy.UI { public class SLUITrigger : SLUIComponent { public Animator animator; public string bindingValue; public string bindingAnimation; public string defaultAnimation; public bool forceTrigger; private SLEntity oldValue; private bool restart; protected override void Validate() { animator = GetComponent(); } protected override void Init() { } public void Update() { if (forceTrigger) return; if (animator.GetCurrentAnimatorStateInfo(0).loop == false && animator.GetCurrentAnimatorStateInfo(0).normalizedTime > 1) { if (restart) { var newValue = SLGame.SessionGet(bindParent.BindPath).Get(bindingValue); if (newValue) { animator.Play(bindingAnimation, 0, 0); } else { if (string.IsNullOrEmpty(defaultAnimation) == false) { animator.Play(defaultAnimation, 0, 0); } } restart = false; } } } protected override void Enable() { SLGame.AddNotify(bindParent.BindPath.CombinePath(bindingValue), OnChange); oldValue = false; } protected override void Disable() { SLGame.RemoveNotify(bindParent.BindPath.CombinePath(bindingValue), OnChange); } private void OnChange() { if (bindParent.Active == false) return; var newValue = SLGame.SessionGet(bindParent.BindPath).Get(bindingValue); if (newValue != oldValue) { if (newValue) { if (forceTrigger || animator.GetCurrentAnimatorStateInfo(0).loop || animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1) { animator.Play(bindingAnimation, 0, 0); } else { restart = true; } } else { if (forceTrigger || animator.GetCurrentAnimatorStateInfo(0).loop || animator.GetCurrentAnimatorStateInfo(0).normalizedTime >= 1) { if (string.IsNullOrEmpty(defaultAnimation) == false) { animator.Play(defaultAnimation, 0, 0); } } else { restart = true; } } oldValue = newValue; } } } }