From what I understood, I think you have to rotate you vector by your ship's rotation in set_dir()
or it will always shoot UP at Vector2(0, -1)
dir = Vector2(x, y).rotated(your_ship_node.rotation)
So if your ship is User
:
dir = Vector2.(x, y).rotated(User.rotation)
Also you can use Vector2.ZERO, Vector2.UP, Vector2.LEFT etc... instead of Vector2(0, 0), Vector2(0, -1)... it's less confusing I guess ;)