using DG.Tweening; using DG.Tweening.Core; using DG.Tweening.Core.Easing; using DG.Tweening.Core.Enums; using DG.Tweening.Plugins.Core; using DG.Tweening.Plugins.Options; using System; using UnityEngine; public struct PlugCustomPlugin : IPlugSetter { readonly Vector3 _endValue; readonly DOGetter _getter; readonly DOSetter _setter; public PlugCustomPlugin(DOGetter getter, DOSetter setter, float endValue) { _getter = getter; _setter = setter; _endValue = new Vector3(endValue, 0, 0); } public DOGetter Getter() { return _getter; } public DOSetter Setter() { return _setter; } public Vector3 EndValue() { return _endValue; } public NoOptions GetOptions() { return new NoOptions(); } } // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ // ||| CLASS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| // +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ public class CustomPlugin : ABSTweenPlugin { public override void Reset(TweenerCore t) {} public override void SetFrom(TweenerCore t, bool isRelative) { Vector3 prevEndVal = t.endValue; t.endValue = t.getter(); t.startValue = isRelative ? t.endValue + prevEndVal : prevEndVal; t.setter(t.startValue); } public override Vector3 ConvertToStartValue(TweenerCore t, Vector3 value) { return value; } public override void SetRelativeEndValue(TweenerCore t) { t.endValue = t.startValue + t.changeValue; } public override void SetChangeValue(TweenerCore t) { t.changeValue = t.endValue - t.startValue; } public override float GetSpeedBasedDuration(NoOptions options, float unitsXSecond, Vector3 changeValue) { float res = changeValue.magnitude / unitsXSecond; if (res < 0) res = -res; return res; } public override void EvaluateAndApply(NoOptions options, Tween t, bool isRelative, DOGetter getter, DOSetter setter, float elapsed, Vector3 startValue, Vector3 changeValue, float duration, bool usingInversePosition, UpdateNotice updateNotice) { Vector3 res = getter(); float easeVal = EaseManager.Evaluate(t, elapsed, duration, t.easeOvershootOrAmplitude, t.easePeriod); res.x = startValue.x + changeValue.x * easeVal; setter(res); } }