Eliminates the need for states to have explicit constructors that receive an IContext object. Instead, the context is provided when a state is attached to a logic block as the logic block's active state. Eliminating contexts in state constructors simplifies serialization and reduces typing.
Adds OnAttach and OnDetach, which can and should be used for setting up a state instance. These differ from OnEnter and OnExit, respectively, as all callbacks registered via OnAttach and OnDetach will be called on the state instance whenever the state changes, whereas OnEnter and OnExit are only invoked when entering and exiting relevant states with respect to the type hierarchy. OnAttach and OnDetach are great for subscribing to events or other long-running operations that need to be cleaned up on a per-instance basis. Before, previous state instances would be implicitly retained in memory if relevant to the active state's type hierarchy. Now, LogicBlocks is more theoretically sound as only one state is active and retained at any given time.
Eliminates the context parameter in GetInitialState.
Adds a shorthand method for looking up blackboard contents inside a state via the Get<TDataType>() method available to states.
IContext
object. Instead, the context is provided when a state is attached to a logic block as the logic block's active state. Eliminating contexts in state constructors simplifies serialization and reduces typing.OnAttach
andOnDetach
, which can and should be used for setting up a state instance. These differ fromOnEnter
andOnExit
, respectively, as all callbacks registered viaOnAttach
andOnDetach
will be called on the state instance whenever the state changes, whereasOnEnter
andOnExit
are only invoked when entering and exiting relevant states with respect to the type hierarchy.OnAttach
andOnDetach
are great for subscribing to events or other long-running operations that need to be cleaned up on a per-instance basis. Before, previous state instances would be implicitly retained in memory if relevant to the active state's type hierarchy. Now, LogicBlocks is more theoretically sound as only one state is active and retained at any given time.context
parameter inGetInitialState
.Get<TDataType>()
method available to states.