/* // ReSharper disable PossibleNullReferenceException // ReSharper disable UnusedMember.Global // ReSharper disable MemberCanBePrivate.Global // ReSharper disable UnusedMember.Local using System; using JetBrains.Annotations; namespace PrimeTween { internal static class CodeTemplates { public static Tween PositionAtSpeed([NotNull] UnityEngine.Transform target, UnityEngine.Vector3 endValue, float averageSpeed, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => PositionAtSpeed(target, new TweenSettings(endValue, new TweenSettings(averageSpeed, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween PositionAtSpeed([NotNull] UnityEngine.Transform target, UnityEngine.Vector3 endValue, float averageSpeed, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => PositionAtSpeed(target, new TweenSettings(endValue, new TweenSettings(averageSpeed, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween PositionAtSpeed([NotNull] UnityEngine.Transform target, UnityEngine.Vector3 startValue, UnityEngine.Vector3 endValue, float averageSpeed, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => PositionAtSpeed(target, new TweenSettings(startValue, endValue, new TweenSettings(averageSpeed, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween PositionAtSpeed([NotNull] UnityEngine.Transform target, UnityEngine.Vector3 startValue, UnityEngine.Vector3 endValue, float averageSpeed, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => PositionAtSpeed(target, new TweenSettings(startValue, endValue, new TweenSettings(averageSpeed, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); static Tween PositionAtSpeed([NotNull] UnityEngine.Transform target, TweenSettings settings) { var speed = settings.settings.duration; if (speed <= 0) { UnityEngine.Debug.LogError($"Invalid speed provided to the Tween.{nameof(PositionAtSpeed)}() method: {speed}."); return default; } if (settings.startFromCurrent) { settings.startFromCurrent = false; settings.startValue = target.position; } settings.settings.duration = Extensions.CalcDistance(settings.startValue, settings.endValue) / speed; return Tween.Position(target, settings); } public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, Single endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => METHOD_NAME(target, new TweenSettings(endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, Single endValue, float duration, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => METHOD_NAME(target, new TweenSettings(endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, Single startValue, Single endValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => METHOD_NAME(target, new TweenSettings(startValue, endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, Single startValue, Single endValue, float duration, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => METHOD_NAME(target, new TweenSettings(startValue, endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime))); public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, Single endValue, TweenSettings settings) => METHOD_NAME(target, new TweenSettings(endValue, settings)); public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, Single startValue, Single endValue, TweenSettings settings) => METHOD_NAME(target, new TweenSettings(startValue, endValue, settings)); public static Tween METHOD_NAME([NotNull] UnityEngine.Camera target, TweenSettings settings) { return animate(target, ref settings, _tween => { var _target = _tween.target as UnityEngine.Camera; var val = _tween.FloatVal; _target.orthographicSize = val; }, t => (t.target as UnityEngine.Camera).orthographicSize.ToContainer(), TweenType.CameraOrthographicSize); } public static Tween Custom_TEMPLATE(Single startValue, Single endValue, float duration, [NotNull] Action onValueChange, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => Custom_TEMPLATE(new TweenSettings(startValue, endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime)), onValueChange); public static Tween Custom_TEMPLATE(Single startValue, Single endValue, float duration, [NotNull] Action onValueChange, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => Custom_TEMPLATE(new TweenSettings(startValue, endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime)), onValueChange); public static Tween Custom_TEMPLATE(Single startValue, Single endValue, TweenSettings settings, [NotNull] Action onValueChange) => Custom_TEMPLATE(new TweenSettings(startValue, endValue, settings), onValueChange); public static Tween Custom_TEMPLATE(TweenSettings settings, [NotNull] Action onValueChange) { Assert.IsNotNull(onValueChange); if (settings.startFromCurrent) { UnityEngine.Debug.LogWarning(Constants.customTweensDontSupportStartFromCurrentWarning); } var tween = PrimeTweenManager.fetchTween(); tween.startValue.CopyFrom(ref settings.startValue); tween.endValue.CopyFrom(ref settings.endValue); tween.propType = PropType.Float; tween.customOnValueChange = onValueChange; tween.Setup(PrimeTweenManager.dummyTarget, ref settings.settings, _tween => { var _onValueChange = _tween.customOnValueChange as Action; var val = _tween.FloatVal; try { _onValueChange(val); } catch (Exception e) { UnityEngine.Debug.LogException(e); Assert.LogWarning($"Tween was stopped because of exception in {nameof(onValueChange)} callback, tween: {_tween.GetDescription()}\n", _tween.id, _tween.target as UnityEngine.Object); _tween.EmergencyStop(); } }, null, false, TweenType.CustomFloat); return PrimeTweenManager.Animate(tween); } public static Tween Custom_TEMPLATE([NotNull] T target, Single startValue, Single endValue, float duration, [NotNull] Action onValueChange, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class => Custom_internal(target, new TweenSettings(startValue, endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime)), onValueChange); public static Tween Custom_TEMPLATE([NotNull] T target, Single startValue, Single endValue, float duration, [NotNull] Action onValueChange, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) where T : class => Custom_internal(target, new TweenSettings(startValue, endValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime)), onValueChange); public static Tween Custom_TEMPLATE([NotNull] T target, Single startValue, Single endValue, TweenSettings settings, [NotNull] Action onValueChange) where T : class => Custom_internal(target, new TweenSettings(startValue, endValue, settings), onValueChange); public static Tween Custom_TEMPLATE([NotNull] T target, TweenSettings settings, [NotNull] Action onValueChange) where T : class => Custom_internal(target, settings, onValueChange); #if PRIME_TWEEN_EXPERIMENTAL public static Tween CustomAdditive([NotNull] T target, Single deltaValue, TweenSettings settings, [NotNull] Action onDeltaChange) where T : class => Custom_internal(target, new TweenSettings(default, deltaValue, settings), onDeltaChange, true); #endif static Tween Custom_internal([NotNull] T target, TweenSettings settings, [NotNull] Action onValueChange, bool isAdditive = false) where T : class { Assert.IsNotNull(onValueChange); if (settings.startFromCurrent) { UnityEngine.Debug.LogWarning(Constants.customTweensDontSupportStartFromCurrentWarning); } var tween = PrimeTweenManager.fetchTween(); tween.startValue.CopyFrom(ref settings.startValue); tween.endValue.CopyFrom(ref settings.endValue); tween.propType = PropType.Float; tween.customOnValueChange = onValueChange; tween.isAdditive = isAdditive; tween.Setup(target, ref settings.settings, _tween => { var _onValueChange = _tween.customOnValueChange as Action; var _target = _tween.target as T; Single val; if (_tween.isAdditive) { var newVal = _tween.FloatVal; val = newVal.calcDelta(_tween.prevVal); _tween.prevVal.FloatVal = newVal; } else { val = _tween.FloatVal; } try { _onValueChange(_target, val); } catch (Exception e) { UnityEngine.Debug.LogException(e, _target as UnityEngine.Object); Assert.LogWarning($"Tween was stopped because of exception in {nameof(onValueChange)} callback, tween: {_tween.GetDescription()}\n", _tween.id, _tween.target as UnityEngine.Object); _tween.EmergencyStop(); } }, null, false, TweenType.CustomFloat); return PrimeTweenManager.Animate(tween); } static Tween animate(object target, ref TweenSettings settings, [NotNull] Action setter, Func getter, TweenType _tweenType) { var tween = PrimeTweenManager.fetchTween(); tween.startValue.CopyFrom(ref settings.startValue); tween.endValue.CopyFrom(ref settings.endValue); tween.propType = PropType.Float; tween.Setup(target, ref settings.settings, setter, getter, settings.startFromCurrent, _tweenType); return PrimeTweenManager.Animate(tween); } static Tween animateWithIntParam([NotNull] object target, int intParam, ref TweenSettings settings, [NotNull] Action setter, [NotNull] Func getter, TweenType _tweenType) { var tween = PrimeTweenManager.fetchTween(); tween.intParam = intParam; tween.startValue.CopyFrom(ref settings.startValue); tween.endValue.CopyFrom(ref settings.endValue); tween.propType = PropType.Float; tween.Setup(target, ref settings.settings, setter, getter, settings.startFromCurrent, _tweenType); return PrimeTweenManager.Animate(tween); } public static Tween PositionAdditive([NotNull] UnityEngine.Transform target, Single deltaValue, float duration, Ease ease = Ease.Default, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => PositionAdditive(target, deltaValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime)); public static Tween PositionAdditive([NotNull] UnityEngine.Transform target, Single deltaValue, float duration, Easing ease, int cycles = 1, CycleMode cycleMode = CycleMode.Restart, float startDelay = 0, float endDelay = 0, bool useUnscaledTime = false) => PositionAdditive(target, deltaValue, new TweenSettings(duration, ease, cycles, cycleMode, startDelay, endDelay, useUnscaledTime)); public static Tween PositionAdditive([NotNull] UnityEngine.Transform target, Single deltaValue, TweenSettings settings) => CustomAdditive(target, deltaValue, settings, (_, _) => additiveTweenSetter()); static void additiveTweenSetter() {} } } */