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();
}
}