The balls are AnimatableBody2D nodes.
I use tweens to change their positions.
On the X axis, the ball always travels the same distance, that's why it always lands on the other hand.
The Y axis is what changes relative to the time you keep the input pressed before releasing it.
Every time you throw a ball, a manager changes which hand is currently active.
That's basically it :D