So for example, my character can fire every 2 seconds, jump every 4 seconds and sprint every 3.142 seconds; and this class takes care of the cooldown timers for me.
Here's how I use it:
public class Player : MonoBehaviour
{
private CooldownTimer firingCooldown;
private CooldownTimer sprintCooldown;
private void Awake()
{
firingCooldown = new CooldownTimer(2f); // the player can fire every 2 seconds
sprintCooldown = new CooldownTimer(3.142f); // the player can sprint every 3.142 seconds
}
private void Update()
{
if (Input.GetButtonDown("Fire") && firingCooldown.CanWeDoAction())
{
firingCooldown.UpdateActionTime();
// Do firing logic
}
if (Input.GetButtonDown("Sprint") && sprintCooldown.CanWeDoAction())
{
sprintCooldown.UpdateActionTime();
// Do sprinting logic
}
}
}
And this here's the CooldownTimer class:
using System;
public class CooldownTimer
{
private float? LastActionDone { get; set; }
private float IntervalSeconds { get; set; }
public CooldownTimer(float intervalSeconds)
{
IntervalSeconds = intervalSeconds;
}
public void UpdateActionTime()
{
LastActionDone = Time.time;
}
public bool CanWeDoAction()
{
var canWeDoAction = true;
if (LastActionDone.HasValue)
{
var secondsSinceLastAction = Time.time - LastActionDone;
canWeDoAction = secondsSinceLastAction > IntervalSeconds;
}
return canWeDoAction;
}
}