using System;
using System.Collections;
using UnityEngine;

public class Timer
{
	public delegate void OnEndDelegate();

	public float RemainTimeSec;

	public bool IsEnd { get; protected set; }

	public event OnEndDelegate onEndEvent;

	public Timer(float time, OnEndDelegate onEndEvent)
	{
		RemainTimeSec = time;
		this.onEndEvent = onEndEvent;
		IsEnd = false;
	}

	public virtual void Update()
	{
		if (!IsEnd)
		{
			RemainTimeSec -= Time.deltaTime;
			if (!(RemainTimeSec > 0f))
			{
				IsEnd = true;
				CallEvent();
			}
		}
	}

	public void CallEvent()
	{
		this.onEndEvent();
	}

	public void Cancel()
	{
		IsEnd = true;
	}

	public static IEnumerator DelayMethod(float waitTime, Action process)
	{
		yield return new WaitForSeconds(waitTime);
		process?.Invoke();
	}
}
