using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static  class MathfExtensions
{
    /// <summary>
    /// Lineary Lerps between <paramref name="start"/> and <paramref name="end"/> within <paramref name="time"/>, using <see cref="Time.deltaTime"/>.
    /// Guarantees returning <paramref name="end"/> at last step,
    /// </summary>
    /// <param name="start">Value to start</param>
    /// <param name="end">Value to end</param>
    /// <param name="time">Time to pass</param>
    /// <returns>IEnumerator<float> with statet behaviour</returns>
    public static IEnumerator<float> LerpInTime(float start, float end, float time)
    {
        if (time < 0) yield break;

        for (float current_time = 0; time > current_time; current_time += Time.deltaTime)
            yield return Mathf.Lerp(start, end, current_time / time);

        yield return end;
    }

    /// \copydoc LerpInTime(float, float, float)
    /// <remarks>Wrappes static method and exposes it as Extension.</remarks>
    /// <param name="iotta">Ignored. Here to expose Extension.</param>
    public static IEnumerator<float> LerpInTime(this float iotta, float start, float end, float time)
        => LerpInTime(start, end, time);

}