Looks pretty good. Definitely easy for begginners to understand while maintaining flexibility. Personally I'd implement it with structs that have a Enter, Execute and Leave function. But now relfecting back on that it might be hard to implement with proper OOP support (virtual functions..).
Good job
