Both the ActionScheduler and the StateMachine are different ways of solving the same problem.
I find the ActionScheduler to be a more robust implementation because aside from classes needing to know about Mover, different classes don’t need to actually know about each other… For example, you could have a Collector class that gathers pickups, a PlayerConversant that moves to a dialogue speaker, or a Shopper component that moves to a Shop, and none would need to know about each other to switch states. (this will become clearer when we get to IHandleRaycast later in the course).
For an excellent deep dive in a pure StateMachine, I recommend our Third Person Combat and Traversal course, taught by Nathan. It’s actually quite possible to adapt that StateMachine to the RPG course with some slight modifications.