This seems like it works at first glance, but upon recreating the code and testing I am met with this:
Green is the player movement speed, blue is the horizontal distance from the target.
As you can see, as the player strafes they move further and further away.
I believe this is because the player movement and orientation rotation are applied one after another and not at the same time, which creates a small offset that builds up over time.
I feel the best solution to avoid this is to rotate the vector a tiny bit to simulate rotating the object with a pivot on the target… Thing is, I don’t know the math for that.