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

public class SpriteAnimLoop : MonoBehaviour
{
    [SerializeField]
    private SpriteRenderer _renderer;
    
    [SerializeField]
    private Image _image;

    [System.Serializable]
    private struct SpriteFrame
    {
        public Sprite Sprite;
        public float ShowTime;
    }
    
    [SerializeField]
    private SpriteFrame[] _frames;

    private float _time;
    private int _spriteIndex;

    public void ResetAnim()
    {
        _time = 0f;
        _spriteIndex = 0;
    }

    private void OnEnable()
    {
        ResetAnim();
    }

    private void Update()
    {
        if ( _frames.Length == 0 )
            return;
        
        bool update = false;
        _time += Time.unscaledDeltaTime;
        
        while ( _time > _frames[ _spriteIndex ].ShowTime )
        {
            _time -= _frames[ _spriteIndex ].ShowTime;
            _spriteIndex = (_spriteIndex + 1) % _frames.Length;
            update = true;
        }

        if ( update )
        {
            var sprite = _frames[ _spriteIndex ].Sprite;
            if (_renderer != null)
            {
                _renderer.sprite = sprite;
            }

            if ( _image != null )
            {
                _image.sprite = sprite;
            }
        }
    }
}