Files
Cielonos/Assets/Scripts/SLSUtilities/General/Timer.cs
SoulliesOfficial b5cb6152ff MusicBeat
2026-05-26 00:21:27 -04:00

55 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
namespace SLSUtilities.General
{
public class Timer
{
public float duration;
public float currentTime;
public bool isInfinite;
public float Percentage => duration > 0 ? Mathf.Clamp01(currentTime / duration) : 1f;
public virtual bool IsCompleted => currentTime >= duration;
public List<PrioritizedAction> onComplete;
public Timer(float duration, bool isInfinite = false)
{
this.duration = duration;
this.isInfinite = isInfinite;
currentTime = 0f;
onComplete = new List<PrioritizedAction>();
}
public virtual void Update(float deltaTime)
{
if (!IsCompleted)
{
currentTime += deltaTime;
}
else
{
if (!isInfinite)
{
onComplete.Invoke();
onComplete.Clear(); // 确保只调用一次
}
else
{
onComplete.Invoke();
Reset();
}
}
}
public virtual void Reset(float newDuration = -1f)
{
currentTime = 0f;
if(newDuration >= 0f)
{
duration = newDuration;
}
}
}
}