Projectiles are resource expensive. So you need to consider your system specs when testing and the tickrate (t.maxFPS). You should be applying a lifespan to each projectile after spawn and destroying it on collision. If you do this you’ll notice that when shooting at your feet (short life do to destroy) there’s no stuttering. The RoF is stable.
As far as adding an overheat mechanic it depends on the overall functionality. A full cooldown time (no shots until fully cooled) or incremental which allows for shots fired once its cooled just enough to allow for a single shot.
Your welcome to join my discord and I’ll help you with it over the weekend. Discord