Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- namespace Common {
- public interface IReadOnlyCooldown {
- public long LastTrigger { get; }
- public long CooldownTime { get; }
- public long NextTriggerIn { get; }
- public long MillisElapsedSinceLastTrigger { get; }
- public float CooldownProgress { get; }
- public bool IsCooldown { get; }
- public bool IsReady { get; }
- }
- public class Cooldown : IReadOnlyCooldown {
- public long LastTrigger { get; private set; } = long.MinValue;
- public long CooldownTime { get; set; }
- public Cooldown(long cooldown = 0) {
- CooldownTime = cooldown;
- }
- public long NextTriggerIn => LastTrigger + CooldownTime <= 0 ? 0 : LastTrigger + CooldownTime;
- public long MillisElapsedSinceLastTrigger => DateTimeOffset.Now.ToUnixTimeMilliseconds() - LastTrigger;
- public float CooldownProgress => Mathf.Abs((float)MillisElapsedSinceLastTrigger / CooldownTime);
- public bool IsCooldown => LastTrigger >= DateTimeOffset.Now.ToUnixTimeMilliseconds() - CooldownTime;
- public bool IsReady => !IsCooldown;
- public bool TryTrigger() {
- if (IsCooldown) return false;
- LastTrigger = DateTimeOffset.Now.ToUnixTimeMilliseconds();
- return true;
- }
- public void Trigger() {
- LastTrigger = DateTimeOffset.Now.ToUnixTimeMilliseconds();
- }
- public void Reset() {
- LastTrigger = long.MinValue;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement