If someone could explain the maths behind how to do this that would be fantastic. It’s easy enough to get the curve with a sine function but I don’t know how I would bring the rotation into it.
If you want to use tweenservice you could probably have a start state:
local startPoint = CFrame.new(current.Position, block.Position + block.CFrame.UpVector) -- On the left looking at the top
local endPoint = CFrame.new(endPosition, lock.Position + block.CFrame.UpVector) -- Moves it to the rightmost image, still facing up