Features
- Entry actions
- Exit actions
- Transition actions (executed after all exit actions and before all entry actions)
- Extremely fast (5 million state changes per second on a modern desktop system)
- NO allocation of reference types to avoid creating memory pressure (which is critical for games which cannot afford garbage collection at the wrong time).
- Derived class determines the event type which can be anything from an int to a string to an arbitrary struct or even a class.
- Derived class dictates the values for the required built-in events, unlike many implementations which reserve certain values for such use.
- Everything in the base class is protected rather than public so it's up to your derived class to decide what, if anything, to expose as public.