The enemy AI I created is simple but has taught me a lot for how small of a project each one was. The Catapult Enemy was created after my Magnetic Shotgun concept, and I wanted to get smoother curves for the projectile path than I had for the shotgun's bullets. This led me to learning about Bezier curves and how to implement them in games/Unity, and it's redefined how I approach most problems, even things such as timers/schedulers that are entirely back-end make use of them.
The Follow-from-Distance logic came next, and is something I'm proud of due to how efficiently it both works and runs. Most resources online suggest having an enemy either "move toward the player" or "move away from the player" depending on distance, but the issue with that is a player could force an enemy into a corner and they would become stuck. The system I developed here polls 100 locations along a sphere surrounding the player and checks for which one of those is closest AND valid (i.e. not in a wall near a corner). This creates a more dynamic movement for an enemy that needs to keep its distance or get away from the player, as it's not as simple as "move directly away form player", but rather find the most efficient spot that is the optimal distance away from the player (including higher/lower elevation spots).