I also like state machines
enter_state we push a new state onto the stack, and call its on_enter method
enter_state
on_enter
exit_state - we pop the top, call it's on_exit method, and the new tops on_enter
exit_state
on_exit
in control we call the topmost states handle method
control
handle