I don't think i really get what you want to do, if a player is coming fast will it get really close to the pushing body before being pushed away, or is it more akin to the player sliding off an invisible barrier close to the hordes?
In the first case i guess you are in the right direction, but you will probably need to make the push force a function of the distance, something akin to the magnetic repulsion formula, where the closes you are the bigger the force. As to have some smoothness of how strong you are being pushed. (If you ever need to optimize this part of the code, just use a lookup table). I didn't work much with areas, but you can use a RayCast
when there is a collision within the Area
to get the distance, that is if the Area
doesn't give it to you already.
For the second case, I believe you can achieve it by creating a larger circular collision box that hits only the player, by selecting the collision layers, and basically stops the player from getting closer than that distance, and since you are using move and slide you should get a sliding through effect, albeit i dont really think this is the way to go, but maybe worth a try.