fn retry_random_swimmable_pos( target_pos: Option<DVec3>, next_pos: impl FnMut() -> Option<DVec3>, is_water_pathfindable: impl FnMut(DVec3) -> bool, ) -> Option<DVec3>