player objects needs to broadcast its movement all enemies

The problem:
I have a player object which always moves the same fixed distance when the user presses a key.
Other GameObjects (different enemy types) should do stuff depending on the percentage of the (fixed) distance the player has traveled. These percentage are fixed values: 0% (start moving), 25%, 50%, 75% and 100% (done moving).

A possible solution i’m thinking of:

  1. register the different enemy types with the game controller
  2. player movement script calls methods of the game controller at the specified distances when moving.
  3. the methods on the game controller called by the player movement script, loop through the registered enemies and call methods on these enemies (enemies could implement an interface to ensure they have the correct methods)

Everything now depends on the game controller, and it seems overly messy and totaly wrong to do it this way…

Is there a better solution to this problem, maybe some sort of broadcasting or event system?

For everyone facing the same problems, C# Events seem to be a solution.
Read up on the following:

Or use the ready to use out of the box “Advanced CSharp Messenger”: