I know I can rotate any spatial around a point using:
public static void RotateAround(Spatial obj, Vector3 point, Vector3 axis, float angle)
{
obj.GlobalTranslate(-point);
obj.Transform = obj.Transform.Rotated(axis, -angle);
obj.GlobalTranslate(point);
}
But how can I rotate a KinematicBody
around a point and still collide? Right now, it just phases through everything. The move_and_collide
, move_and_slide
, move_and_slide_with_snap
, and test_move
all only take translate vectors as params, but no rotational vectors.
One of my use cases:

When rotating this shape, the pivot point is at the bottom right of that blue cube, but when it collides with the ground, I want the pivot point to move to be where it collided. Is there any way to do that?
Is there even an easier way to do this?