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

public static class RendererExtensions
{
    public static IEnumerator ProgrammMaterialChange(this Renderer renderer, IEnumerable<(float delay, float lerp_time, Material new_material)> instructions, bool loop = false)
    {
        Material last_material;
        float start_time, end_time;

        do
            foreach (var (delay, lerp_time, new_material) in instructions)
            {
                last_material = renderer.material;
                start_time = Time.time;
                end_time = start_time + lerp_time;

                yield return new WaitForSeconds(delay);

                while (end_time >= Time.time)
                {
                    renderer.material.Lerp(last_material, new_material
                        , (Time.time - start_time) / lerp_time);
                    yield return null;
                }
                renderer.material = new_material;

            }
        while (loop);
    }
}