12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- namespace Wayne.Lib.StateEngine.Generic
- {
-
-
-
-
-
- public abstract class CompositeState<TMain, TData> : CompositeState<TMain>, IStateWithData where TData : StateData
- {
- #region Fields
- private TData data;
- private IStateWithData stateWithData;
- #endregion
- #region Properties
-
-
-
- protected TData Data
- {
- get
- {
- if (data != null)
- return data;
- else
- return stateWithData.StateData as TData;
- }
- }
- StateData IStateWithData.StateData
- {
- get { return Data; }
- }
- #endregion
- #region Methods
- internal override void PerformEnter(StateEntry stateEntry, ref Transition transition)
- {
- InitStateData();
- base.PerformEnter(stateEntry, ref transition);
- }
- internal override void PerformExit()
- {
- base.PerformExit();
- using (data)
- {
- data = null;
- }
- }
-
-
-
-
-
-
- protected virtual TData CreateStateData(StateData parentStateData)
- {
- return null;
- }
- private void InitStateData()
- {
-
-
- var compositeStateWithData = ParentState as IStateWithData;
- if (compositeStateWithData != null)
- data = CreateStateData(compositeStateWithData.StateData);
- else
- data = CreateStateData(null);
- if (data == null)
- {
- if (stateWithData == null)
- {
- stateWithData = StateData.GetParentCompositeStateWithStateData<TData>(this);
- }
- }
- }
- #endregion
- }
- }
|