Maybe it should help selecting TWO "layers" of mobs' swim altitude: "surfaced" and "submerged", and they should continue to (2D x/y) move in these 2 layers, just avoiding obstacles and ground below them, not having a real 3D water movement.
The "switch" from submerged to surfaced and vice versa can also be an animation, not a real movement too.
Even when submerged or surfaced, they should move over a(n inexistent) plane, with no hills: just taking another direction when at a border.
The "switch" from submerged to surfaced and vice versa can also be an animation, not a real movement too.
Even when submerged or surfaced, they should move over a(n inexistent) plane, with no hills: just taking another direction when at a border.