Shmup: Variable fire rate (Touhou/Danmaku-style)

Godot 4.3

Im a new dev working on a movement-focused vertical shmup. Part of my design is a fire rate that is refreshed when projectiles hit a collision. The idea is the player has a lower fire rate at the bottom of the screen where they are safest. Fire rate & damage increase the closer you get to an enemy.

I’m not sure how to do this. My ideas are:

  1. Have projectiles be objects that signal when they reach a distance from the generator or collide
  2. Have the generator have a timer for minimum and maximum time between shots fired. Use a signal when projectiles collide to trigger the next shot

Should I have the projectile telling the player script when it collides, or is that something that should be contained within the player script itself?

Potential issues:
A. I’m not sure I have the right idea of signals and how they work.
B. Current plan is to have each projectile be an object. I think particles would be more efficient, which will matter in the future when i add bullet pattern generators and the dodge, roll, boost mechanics.

First time poster, excited to finally be developing my first game! Thanks in advance for your help!!