using System; using System.Collections.Generic; using AnimationOrTween; using UnityEngine; [ExecuteInEditMode] [AddComponentMenu("NGUI/Interaction/Play Tween")] public class UIPlayTween : MonoBehaviour { private void Awake() { if (this.eventReceiver != null && EventDelegate.IsValid(this.onFinished)) { this.eventReceiver = null; this.callWhenFinished = null; } } private void Start() { this.mStarted = true; if (this.tweenTarget == null) { this.tweenTarget = base.gameObject; } } private void OnEnable() { if (this.mStarted) { this.OnHover(UICamera.IsHighlighted(base.gameObject)); } if (UICamera.currentTouch != null) { if (this.trigger == Trigger.OnPress || this.trigger == Trigger.OnPressTrue) { this.mActivated = (UICamera.currentTouch.pressed == base.gameObject); } if (this.trigger == Trigger.OnHover || this.trigger == Trigger.OnHoverTrue) { this.mActivated = (UICamera.currentTouch.current == base.gameObject); } } UIToggle component = base.GetComponent(); if (component != null) { EventDelegate.Add(component.onChange, new EventDelegate.Callback(this.OnToggle)); } } private void OnDisable() { UIToggle component = base.GetComponent(); if (component != null) { EventDelegate.Remove(component.onChange, new EventDelegate.Callback(this.OnToggle)); } } private void OnDragOver() { if (this.trigger == Trigger.OnHover) { this.OnHover(true); } } private void OnHover(bool isOver) { if (base.enabled && (this.trigger == Trigger.OnHover || (this.trigger == Trigger.OnHoverTrue && isOver) || (this.trigger == Trigger.OnHoverFalse && !isOver))) { this.mActivated = (isOver && this.trigger == Trigger.OnHover); this.Play(isOver); } } private void OnDragOut() { if (base.enabled && this.mActivated) { this.mActivated = false; this.Play(false); } } private void OnPress(bool isPressed) { if (base.enabled && (this.trigger == Trigger.OnPress || (this.trigger == Trigger.OnPressTrue && isPressed) || (this.trigger == Trigger.OnPressFalse && !isPressed))) { this.mActivated = (isPressed && this.trigger == Trigger.OnPress); this.Play(isPressed); } } private void OnClick() { if (base.enabled && this.trigger == Trigger.OnClick) { this.Play(true); } } private void OnDoubleClick() { if (base.enabled && this.trigger == Trigger.OnDoubleClick) { this.Play(true); } } private void OnSelect(bool isSelected) { if (base.enabled && (this.trigger == Trigger.OnSelect || (this.trigger == Trigger.OnSelectTrue && isSelected) || (this.trigger == Trigger.OnSelectFalse && !isSelected))) { this.mActivated = (isSelected && this.trigger == Trigger.OnSelect); this.Play(isSelected); } } private void OnToggle() { if (!base.enabled || UIToggle.current == null) { return; } if (this.trigger == Trigger.OnActivate || (this.trigger == Trigger.OnActivateTrue && UIToggle.current.value) || (this.trigger == Trigger.OnActivateFalse && !UIToggle.current.value)) { this.Play(UIToggle.current.value); } } private void Update() { if (this.disableWhenFinished != DisableCondition.DoNotDisable && this.mTweens != null) { bool flag = true; bool flag2 = true; int i = 0; int num = this.mTweens.Length; while (i < num) { UITweener uitweener = this.mTweens[i]; if (uitweener.tweenGroup == this.tweenGroup) { if (uitweener.enabled) { flag = false; break; } if (uitweener.direction != (Direction)this.disableWhenFinished) { flag2 = false; } } i++; } if (flag) { if (flag2) { NGUITools.SetActive(this.tweenTarget, false); } this.mTweens = null; } } } public void Play(bool forward) { this.mActive = 0; GameObject gameObject = (!(this.tweenTarget == null)) ? this.tweenTarget : base.gameObject; if (!NGUITools.GetActive(gameObject)) { if (this.ifDisabledOnPlay != EnableCondition.EnableThenPlay) { return; } NGUITools.SetActive(gameObject, true); } this.mTweens = ((!this.includeChildren) ? gameObject.GetComponents() : gameObject.GetComponentsInChildren()); if (this.mTweens.Length == 0) { if (this.disableWhenFinished != DisableCondition.DoNotDisable) { NGUITools.SetActive(this.tweenTarget, false); } } else { bool flag = false; if (this.playDirection == Direction.Reverse) { forward = !forward; } int i = 0; int num = this.mTweens.Length; while (i < num) { UITweener uitweener = this.mTweens[i]; if (uitweener.tweenGroup == this.tweenGroup) { if (!flag && !NGUITools.GetActive(gameObject)) { flag = true; NGUITools.SetActive(gameObject, true); } this.mActive++; if (this.playDirection == Direction.Toggle) { EventDelegate.Add(uitweener.onFinished, new EventDelegate.Callback(this.OnFinished), true); uitweener.Toggle(); } else { if (this.resetOnPlay || (this.resetIfDisabled && !uitweener.enabled)) { uitweener.Play(forward); uitweener.ResetToBeginning(); } EventDelegate.Add(uitweener.onFinished, new EventDelegate.Callback(this.OnFinished), true); uitweener.Play(forward); } } i++; } } } private void OnFinished() { if (--this.mActive == 0 && UIPlayTween.current == null) { UIPlayTween.current = this; EventDelegate.Execute(this.onFinished); if (this.eventReceiver != null && !string.IsNullOrEmpty(this.callWhenFinished)) { this.eventReceiver.SendMessage(this.callWhenFinished, SendMessageOptions.DontRequireReceiver); } this.eventReceiver = null; UIPlayTween.current = null; } } public static UIPlayTween current; public GameObject tweenTarget; public int tweenGroup; public Trigger trigger; public Direction playDirection = Direction.Forward; public bool resetOnPlay; public bool resetIfDisabled; public EnableCondition ifDisabledOnPlay; public DisableCondition disableWhenFinished; public bool includeChildren; public List onFinished = new List(); [HideInInspector] [SerializeField] private GameObject eventReceiver; [HideInInspector] [SerializeField] private string callWhenFinished; private UITweener[] mTweens; private bool mStarted; private int mActive; private bool mActivated; }