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

namespace Arugula.UI
{
    [ExecuteInEditMode]
    public class ProgressBarMesh : MonoBehaviour
    {
        [Range(0, 1)]
        public float value;
        [Min(0)]
        public float damper = 0;
        public Vector2 uvZero;
        public Vector2 uvOne;

        new Renderer renderer;
        MaterialPropertyBlock block;
        float smoothValue;
        void Awake()
        {
            InitBlock();
            smoothValue = value;
        }

        void InitBlock()
        {
            block = new MaterialPropertyBlock();
            renderer = GetComponent<Renderer>();
            renderer.GetPropertyBlock(block);
        }

        void Update()
        {
            if (block == null || renderer == null)
                InitBlock();


            if (damper <= 0 || !Application.isPlaying)
            {
                smoothValue = value;
            }
            else
            {
                smoothValue = Mathf.Lerp(smoothValue, value, Time.unscaledDeltaTime * damper);
            }


            Vector2 pos = Vector2.Lerp(uvZero, uvOne, smoothValue);
            block.SetVector("_MainTex_ST", new Vector4(1, 1, pos.x, pos.y));
            renderer.SetPropertyBlock(block);
        }

        public void SetValue(float value, bool snap = false)
        {
            if (snap)
                smoothValue = value;
            this.value = Mathf.Clamp01(value);
        }
    }
}