using System; using TinaX.Tween.UnityEvents; using UnityEngine; using UnityEngine.Events; namespace TinaX.Tween.Components { public abstract class TweenComponentBase : MonoBehaviour, IPlayableTween { #region Editor Variables //暴露给编辑器的可配置变量 public float _Duration = 1f; public float _DelayBefore = 0f; [TextArea] public string _Description = "tween1"; //一个描述,通常只用于备注用途 public bool _PlayOnAwake = false; public OnTweenFinishEvent _OnTweenFinish = new OnTweenFinishEvent(); public UnityEvent _OnTweenStop = new UnityEvent(); #endregion public virtual float Duration => _Duration; public virtual float DelayBefore => _DelayBefore; /// /// 是否正在播放 /// public virtual bool Playing { get; private set; } = false; public Action OnFinish { get; set; } public Action OnStop { get; set; } public abstract void Ready(); public abstract void BeginPlay(); public virtual void Stop() { OnStop?.Invoke(); _OnTweenStop?.Invoke(); } protected virtual void Finish() { OnFinish?.Invoke(); _OnTweenFinish?.Invoke(); } public virtual void Dispose() { if (this.Playing) this.Stop(); } protected virtual void Awake() { if (_PlayOnAwake) { this.BeginPlay(); } } } /// /// /// /// 要改变的值 /// 操作值的目标 public abstract class TweenComponentBase : TweenComponentBase where TTarget: UnityEngine.Object { #region Editor Variables //暴露给编辑器的可配置变量 /// /// 操作目标 /// public TTarget _Target; /// /// 初始值 /// public TValue _FromValue; public TValue _ToValue; public bool _AutoOriginValue = false; public bool _AutoTargetValue = false; #endregion public TTarget Target { get { if(_Target == null) { _Target = this.GetDefaultTarget(); } return _Target; } } /// /// 如果编辑器中没有对TTarget赋值的话,基类会调用这里 /// /// public abstract TTarget GetDefaultTarget(); } }