I wouldn’t use coroutines for cooldowns. I mean you can, but it has all kinds of weird edge cases if somehow two of them get started.
Just use a cooldown timer.
Cooldown timers, gun bullet intervals, shot spacing, rate of fire:
GunHeat (gunheat) spawning shooting rate of fire:
Coroutines are NOT always an appropriate solution: know when to use them!