I would put a timer node as a “buffer” between shots.
You could script it like this, in whatever object is firing bullets:
export var shotBuffer = 1
var canShoot = true
onready var bullet = preload("bulletScenePathHere.tscn")
func input(event):
if Input.is_action_just_pressed("ui_shoot"):
if canShoot == true:
var b = bullet.instance()
add_child(b)
canShoot = false
$Timer.set_wait_time(shotBuffer)
$Timer.start()
else:
pass
func on_Timer_timeout():
canShoot = true
The timer will reset the Boolean and then allow you to shoot again. Since you export the shotBuffer value, you can adjust it until you get the shooting time necessary between shots.