Why use an event dispatcher over calling a function?

If I wanted to do what your saying above I would simply use an interface on my enemy. I would do an interface call and if my enemy implemented that interface then it would execute the event. I wouldn’t need to cast to anything in this case and I could have unique logic for each enemy.