Coroutine yields to a cooldown only once, what am I missing?

I don’t like coroutines for this sort of thing, as the edge case of what to do when something has to interrupt the coroutine is hard to reason about. Instead, I prefer cooldown timers:

Cooldown timers, gun bullet intervals, shot spacing, rate of fire:

GunHeat (gunheat) spawning shooting rate of fire: