Oof, this reminds me of a personal experience.
Me: Oh this grapple system is easy, we’ll just push the player’s vector towards the destination vector.
Game: Oh but there’s a small object in the way that cannot be moved. This will make an immense amount of collision data per tick.
Me: Can’t we just ignore-
Game:
I don’t know the “right” answer, but I set it so if you hit something, it plays out some checks similar to as you described:
If we collide with something but its only waist high, then we will have the player stop the grapple and attempt to vault over whatever it is.
If we collide with something and its more than waist high, then we wait for a very small delay and see if we made any progress towards our destination. If not, end the grapple because something is in the way.
Ignore all collision damage otherwise when grappling. Either we get stopped on the way and give up, or make it and then end the grapple.
… And last but most horrible of all:
All my games are janky though so I don’t think this is some ideal setup.
Edit: Cleaned up the collision damage part as I thought I handled it differently.