Thanks for playing!
The weapons use sine waves to calculate where they should be. Here's the entire function used to figure out where each weapon should be. This runs in physics process.
time += delta * orbit_rate var i = 0 for w in weapons: var offset = float(i) / 2 var new_pos = blade_focus.global_position + Vector2(sin(time + offset), sin(time + offset - 1)) * orbit_distance w.move_and_look(new_pos) i += 1
Sin returns a value between -1 and 1. Feeding time into it oscillates the returned value over, you know, time.
Using that to construct a Vector2 with an offset on the time gives you a point that revolves around the focus point.
That point is then multiplied by orbit_distance.
The blade_focus is a Node2D that follows the character except when you're holding the mouse button down.
The offset variable is there so the weapons aren't all trying to be in the same location at the same time. If you have 12 weapons, each is half a second behind the next.
Then you can modify orbit_rate to speed up or slow down the rotation. Can also use a negative number to reverse the rotation direction.
Move and look is a simple function that does exactly what's written. The weapons are character bodies and handle their own actual movement.
Hope that explanation makes sense!